changes made after tupshins reconstruction
[org.ibex.core.git] / src / org / xwt / js / Parser.java
index bffeeb4..1914cc7 100644 (file)
@@ -97,7 +97,10 @@ class Parser extends Lexer implements ByteCodes {
             isRightAssociative[ASSIGN_SUB] =
             isRightAssociative[ASSIGN_MUL] =
             isRightAssociative[ASSIGN_DIV] =
-            isRightAssociative[ASSIGN_MOD] = true;
+            isRightAssociative[ASSIGN_MOD] =
+            isRightAssociative[ADD_TRAP] =
+            isRightAssociative[DEL_TRAP] =
+            true;
 
         precedence[COMMA] = 1;
         // 2 is intentionally left unassigned. we use minPrecedence==2 for comma separated lists
@@ -112,6 +115,8 @@ class Parser extends Lexer implements ByteCodes {
             precedence[ASSIGN_SUB] =
             precedence[ASSIGN_MUL] =
             precedence[ASSIGN_DIV] =
+            precedence[ADD_TRAP] =
+            precedence[DEL_TRAP] =
             precedence[ASSIGN_MOD] = 3;
         precedence[HOOK] = 4;
         precedence[OR] = 5;
@@ -380,25 +385,22 @@ class Parser extends Lexer implements ByteCodes {
         }
 
         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: {
-            if (tok != ASSIGN_ADD && tok != ASSIGN_SUB) b.add(parserLine, GET_PRESERVE);
+        case ASSIGN_MUL: case ASSIGN_DIV: case ASSIGN_MOD: case ASSIGN_ADD: case ASSIGN_SUB: case ADD_TRAP: case DEL_TRAP: {
+            if (tok != ADD_TRAP && tok != DEL_TRAP) 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);
+            
+            if (tok != ADD_TRAP && tok != DEL_TRAP) {
+                // 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);
+            } else {
+                b.add(parserLine, tok);
             }
-            
-            // 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;
         }
         case INC: case DEC: { // postfix