From e5b75592477a3b39156dadc0a2a3ccd1e6dbce32 Mon Sep 17 00:00:00 2001 From: jmoenig Date: Fri, 23 Dec 2016 14:59:13 +0100 Subject: [PATCH] tweaked reporterize infixParser --- history.txt | 4 ++++ objects.js | 20 ++++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/history.txt b/history.txt index 04ea8f77..0c9f469b 100755 --- a/history.txt +++ b/history.txt @@ -3211,6 +3211,10 @@ http://snap.berkeley.edu/run#cloud:Username=jens&ProjectName=rotation * Objects: simplified reporterize>>blockFromAST * Threads: prevented color slots from flashing. Good catch, thanks, Joan! +161223 +------ +* Objects: tweaked reporterize infixParser + == v4.10 === (in development) Features: diff --git a/objects.js b/objects.js index 6696bd33..3851d2ae 100644 --- a/objects.js +++ b/objects.js @@ -82,7 +82,7 @@ SpeechBubbleMorph, RingMorph, isNil, FileReader, TableDialogMorph, BlockEditorMorph, BlockDialogMorph, PrototypeHatBlockMorph, localize, TableMorph, TableFrameMorph, normalizeCanvas, BooleanSlotMorph*/ -modules.objects = '2016-December-22'; +modules.objects = '2016-December-23'; var SpriteMorph; var StageMorph; @@ -2642,7 +2642,7 @@ SpriteMorph.prototype.reporterize = function (expressionString) { function parseInfix(expression, operator, already) { // very basic diadic infix parser for arithmetic expressions - // with strict left-to-right operator precedence (like in Smalltalk) + // with strict left-to-right operator precedence (as in Smalltalk) // which can be overriden by - nested - parentheses. // assumes well-formed expressions, no graceful error handling yet. @@ -2702,13 +2702,17 @@ SpriteMorph.prototype.reporterize = function (expressionString) { case '&': case '|': if (!operator && !inputs[0].length) { - inputs[0] += ch; + inputs[0] = ch; } else if (operator) { - return parseInfix( - expression.slice(idx), - ch, - [operator, already, format(inputs[1])] - ); + if (!inputs[1].length) { + inputs[1] = ch; + } else { + return parseInfix( + expression.slice(idx), + ch, + [operator, already, format(inputs[1])] + ); + } } else { operator = ch; already = format(inputs[0]);