enable relabelling any loop prim to "forEach" and vice-versa

pull/95/head
jmoenig 2020-06-19 19:35:43 +02:00
rodzic deafbdd145
commit 482cf08cb3
2 zmienionych plików z 19 dodań i 6 usunięć

Wyświetl plik

@ -3275,7 +3275,11 @@ BlockMorph.prototype.restoreInputs = function (oldInputs, offset = 0) {
this.inputs().forEach(inp => {
old = oldInputs[offset];
if (old instanceof ReporterBlockMorph) {
this.replaceInput(inp, old.fullCopy());
if (inp instanceof TemplateSlotMorph || inp.isStatic) {
leftOver.push(old);
} else {
this.replaceInput(inp, old.fullCopy());
}
} else if (old && inp instanceof InputSlotMorph) {
// original - turns empty numberslots to 0:
// inp.setContents(old.evaluate());

Wyświetl plik

@ -1525,6 +1525,10 @@ SpriteMorph.prototype.initBlockMigrations = function () {
SpriteMorph.prototype.initBlockMigrations();
SpriteMorph.prototype.blockAlternatives = {
// structure:
// selector: [ersatz, ...]
// ersatz can also be a 2-item array: [selector, input-offset]
// motion:
turn: ['turnLeft'],
turnLeft: ['turn'],
@ -1581,10 +1585,13 @@ SpriteMorph.prototype.blockAlternatives = {
doBroadcastAndWait: ['doBroadcast'],
doIf: ['doIfElse', 'doUntil'],
doIfElse: ['doIf', 'doUntil'],
doRepeat: ['doUntil', ['doForever', -1], ['doFor', 2]],
doUntil: ['doRepeat', 'doIf', ['doForever', -1], ['doFor', 2]],
doForever: [['doUntil', 1], ['doRepeat', 1], ['doFor', 3]],
doFor: [['doForever', -3], ['doRepeat', -2], ['doUntil', -2]],
doRepeat: ['doUntil', ['doForever', -1], ['doFor', 2], ['doForEach', 1]],
doUntil: ['doRepeat', 'doIf', ['doForever', -1], ['doFor', 2],
['doForEach', 1]],
doForever: [['doUntil', 1], ['doRepeat', 1], ['doFor', 3],
['doForEach', 2]],
doFor: [['doForever', -3], ['doRepeat', -2], ['doUntil', -2],
['doForEach', -1]],
// sensing:
doAsk: ['bubble', 'doThink', 'doSayFor', 'doThinkFor'],
@ -1621,7 +1628,9 @@ SpriteMorph.prototype.blockAlternatives = {
// lists - HOFs
reportMap: ['reportKeep', 'reportFindFirst'],
reportKeep: ['reportFindFirst', 'reportMap'],
reportFindFirst: ['reportKeep', 'reportMap']
reportFindFirst: ['reportKeep', 'reportMap'],
doForEach: [['doFor', 1], ['doForever', -2], ['doRepeat', -1],
['doUntil', -1]]
};
// SpriteMorph instance creation