X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2Fjs%2FParser.java;h=4bf273d78d1e1331d19bad76c702ff7a7ee20bd4;hb=96cc912c45623abf8a8a37d7c1d6103e5fe58bd5;hp=b67b59c9bff43c08c1a02f799d4300b6e1704fbd;hpb=6261c41b2ac9d182d8c3541e8e0e5fd00062fa43;p=org.ibex.core.git diff --git a/src/org/xwt/js/Parser.java b/src/org/xwt/js/Parser.java index b67b59c..4bf273d 100644 --- a/src/org/xwt/js/Parser.java +++ b/src/org/xwt/js/Parser.java @@ -336,17 +336,23 @@ class Parser extends Lexer implements ByteCodes { switch(tok) { case ASSIGN_BITOR: case ASSIGN_BITXOR: case ASSIGN_BITAND: case ASSIGN_LSH: case ASSIGN_RSH: case ASSIGN_URSH: case ASSIGN_MUL: case ASSIGN_DIV: case ASSIGN_MOD: case ASSIGN_ADD: case ASSIGN_SUB: { - b.add(parserLine, GET_PRESERVE); + if (tok != ASSIGN_ADD && tok != ASSIGN_SUB) b.add(parserLine, GET_PRESERVE); + startExpr(b, precedence[tok]); + int size = b.size; if (tok == ASSIGN_ADD || tok == ASSIGN_SUB) { b.add(parserLine, tok); + b.add(parserLine, GET); + b.add(parserLine, SWAP); } + // tok-1 is always s/^ASSIGN_// (0 is BITOR, 1 is ASSIGN_BITOR, etc) b.add(parserLine, tok - 1, tok-1==ADD ? JS.N(2) : null); b.add(parserLine, PUT); b.add(parserLine, SWAP); b.add(parserLine, POP); + if (tok == ASSIGN_ADD || tok == ASSIGN_SUB) b.set(size, tok, JS.N(b.size - size)); break; }