+ Grammar g = parseGrammar(null);
+ if (peekToken() == LC) {
+ g.action = new JSFunction(sourceName, parserLine, null);
+ parseBlock(g.action);
+ g.action.add(parserLine, LITERAL, null); // in case we "fall out the bottom", return NULL
+ g.action.add(parserLine, RETURN);
+ }
+ b.add(parserLine, MAKE_GRAMMAR, g);
+ b.add(parserLine, PUT);
+ break;
+ }
+
+ 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);
+
+ 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);
+ }
+