2004/01/07 20:37:33
[org.ibex.core.git] / src / org / xwt / js / Parser.java
index b67b59c..4bf273d 100644 (file)
@@ -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;
         }