From 482cf08cb350c7f3ead5d040b028a492be8d18f5 Mon Sep 17 00:00:00 2001 From: jmoenig Date: Fri, 19 Jun 2020 19:35:43 +0200 Subject: [PATCH] enable relabelling any loop prim to "forEach" and vice-versa --- src/blocks.js | 6 +++++- src/objects.js | 19 ++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/blocks.js b/src/blocks.js index 9e7dde7f..ebe62b02 100644 --- a/src/blocks.js +++ b/src/blocks.js @@ -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()); diff --git a/src/objects.js b/src/objects.js index 6eec7e0f..cb2f6a94 100644 --- a/src/objects.js +++ b/src/objects.js @@ -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