Bug 713755 - Rename parse node variables in memberExpr, and shorten lifetimes where possible. r=jorendorff
authorJeff Walden <jwalden@mit.edu>
Wed, 21 Dec 2011 18:22:34 -0500
changeset 84945 ff44100cc3c3727ee2276800e3121c24c43cc575
parent 84944 377a1042074ee12c703eb00a2339b44a6164f315
child 84946 214d94667876890c30b2a32f087ec95c885d7467
push idunknown
push userunknown
push dateunknown
reviewersjorendorff
bugs713755
milestone12.0a1
Bug 713755 - Rename parse node variables in memberExpr, and shorten lifetimes where possible. r=jorendorff
js/src/frontend/Parser.cpp
--- a/js/src/frontend/Parser.cpp
+++ b/js/src/frontend/Parser.cpp
@@ -5688,93 +5688,95 @@ CheckForImmediatelyAppliedLambda(ParseNo
             pn->pn_dflags &= ~PND_FUNARG;
     }
     return pn;
 }
 
 ParseNode *
 Parser::memberExpr(JSBool allowCallSyntax)
 {
-    ParseNode *pn, *pn2, *pn3;
+    ParseNode *lhs;
 
     JS_CHECK_RECURSION(context, return NULL);
 
     /* Check for new expression first. */
     TokenKind tt = tokenStream.getToken(TSF_OPERAND);
     if (tt == TOK_NEW) {
-        pn = ListNode::create(PNK_NEW, tc);
-        if (!pn)
+        lhs = ListNode::create(PNK_NEW, tc);
+        if (!lhs)
             return NULL;
-        pn2 = memberExpr(JS_FALSE);
-        if (!pn2)
+        ParseNode *ctorExpr = memberExpr(JS_FALSE);
+        if (!ctorExpr)
             return NULL;
-        pn2 = CheckForImmediatelyAppliedLambda(pn2);
-        pn->setOp(JSOP_NEW);
-        pn->initList(pn2);
-        pn->pn_pos.begin = pn2->pn_pos.begin;
-
-        if (tokenStream.matchToken(TOK_LP) && !argumentList(pn))
+        ctorExpr = CheckForImmediatelyAppliedLambda(ctorExpr);
+        lhs->setOp(JSOP_NEW);
+        lhs->initList(ctorExpr);
+        lhs->pn_pos.begin = ctorExpr->pn_pos.begin;
+
+        if (tokenStream.matchToken(TOK_LP) && !argumentList(lhs))
             return NULL;
-        if (pn->pn_count > ARGC_LIMIT) {
+        if (lhs->pn_count > ARGC_LIMIT) {
             JS_ReportErrorNumber(context, js_GetErrorMessage, NULL,
                                  JSMSG_TOO_MANY_CON_ARGS);
             return NULL;
         }
-        pn->pn_pos.end = pn->last()->pn_pos.end;
+        lhs->pn_pos.end = lhs->last()->pn_pos.end;
     } else {
-        pn = primaryExpr(tt, JS_FALSE);
-        if (!pn)
+        lhs = primaryExpr(tt, JS_FALSE);
+        if (!lhs)
             return NULL;
 
-        if (pn->isXMLNameOp()) {
-            pn = new_<UnaryNode>(PNK_XMLUNARY, JSOP_XMLNAME, pn->pn_pos, pn);
-            if (!pn)
+        if (lhs->isXMLNameOp()) {
+            lhs = new_<UnaryNode>(PNK_XMLUNARY, JSOP_XMLNAME, lhs->pn_pos, lhs);
+            if (!lhs)
                 return NULL;
         }
     }
 
     while ((tt = tokenStream.getToken()) > TOK_EOF) {
+        ParseNode *pn2;
         if (tt == TOK_DOT) {
             pn2 = NameNode::create(PNK_DOT, NULL, tc);
             if (!pn2)
                 return NULL;
 
             tt = tokenStream.getToken(TSF_KEYWORD_IS_NAME);
             if (tt == TOK_ERROR)
                 return NULL;
             if (tt == TOK_NAME) {
 #if JS_HAS_XML_SUPPORT
                 if (!tc->inStrictMode() && tokenStream.peekToken() == TOK_DBLCOLON) {
-                    pn3 = propertyQualifiedIdentifier();
+                    ParseNode *pn3 = propertyQualifiedIdentifier();
                     if (!pn3)
                         return NULL;
 
                     JS_ASSERT(pn3->isKind(PNK_DBLCOLON));
                     pn2->setKind(PNK_LB);
                     pn2->setOp(JSOP_GETELEM);
                     pn2->setArity(PN_BINARY);
-                    pn2->pn_left = pn;
+                    pn2->pn_left = lhs;
                     pn2->pn_right = pn3;
                 } else
 #endif
                 {
                     pn2->setOp(JSOP_GETPROP);
-                    pn2->pn_expr = pn;
+                    pn2->pn_expr = lhs;
                     pn2->pn_atom = tokenStream.currentToken().name();
                 }
             }
 #if JS_HAS_XML_SUPPORT
             else if (!tc->inStrictMode()) {
+                ParseNode *pn3;
                 if (tt == TOK_LP) {
                     /* Filters are effectively 'with', so deoptimize names. */
                     tc->flags |= TCF_FUN_HEAVYWEIGHT;
 
                     StmtInfo stmtInfo;
                     ParseNode *oldWith = tc->innermostWith;
-                    tc->innermostWith = pn;
+                    tc->innermostWith = lhs;
                     PushStatement(tc, &stmtInfo, STMT_WITH, -1);
 
                     pn3 = bracketedExpr();
                     if (!pn3)
                         return NULL;
                     pn3->setInParens(true);
                     MUST_MATCH_TOKEN(TOK_RP, JSMSG_PAREN_IN_PAREN);
 
@@ -5790,65 +5792,65 @@ Parser::memberExpr(JSBool allowCallSynta
                     pn2->setKind(PNK_LB);
                     pn2->setOp(JSOP_GETELEM);
                 } else {
                     reportErrorNumber(NULL, JSREPORT_ERROR, JSMSG_NAME_AFTER_DOT);
                     return NULL;
                 }
 
                 pn2->setArity(PN_BINARY);
-                pn2->pn_left = pn;
+                pn2->pn_left = lhs;
                 pn2->pn_right = pn3;
             }
 #endif
             else {
                 reportErrorNumber(NULL, JSREPORT_ERROR, JSMSG_NAME_AFTER_DOT);
                 return NULL;
             }
 
-            pn2->pn_pos.begin = pn->pn_pos.begin;
+            pn2->pn_pos.begin = lhs->pn_pos.begin;
             pn2->pn_pos.end = tokenStream.currentToken().pos.end;
 #if JS_HAS_XML_SUPPORT
         } else if (tt == TOK_DBLDOT) {
             if (tc->inStrictMode()) {
                 reportErrorNumber(NULL, JSREPORT_ERROR, JSMSG_NAME_AFTER_DOT);
                 return NULL;
             }
 
             pn2 = BinaryNode::create(PNK_DBLDOT, tc);
             if (!pn2)
                 return NULL;
             tt = tokenStream.getToken(TSF_OPERAND | TSF_KEYWORD_IS_NAME);
-            pn3 = primaryExpr(tt, JS_TRUE);
+            ParseNode *pn3 = primaryExpr(tt, JS_TRUE);
             if (!pn3)
                 return NULL;
             if (pn3->isKind(PNK_NAME) && !pn3->isInParens()) {
                 pn3->setKind(PNK_STRING);
                 pn3->setArity(PN_NULLARY);
                 pn3->setOp(JSOP_QNAMEPART);
             } else if (!pn3->isXMLPropertyIdentifier()) {
                 reportErrorNumber(NULL, JSREPORT_ERROR, JSMSG_NAME_AFTER_DOT);
                 return NULL;
             }
             pn2->setOp(JSOP_DESCENDANTS);
-            pn2->pn_left = pn;
+            pn2->pn_left = lhs;
             pn2->pn_right = pn3;
-            pn2->pn_pos.begin = pn->pn_pos.begin;
+            pn2->pn_pos.begin = lhs->pn_pos.begin;
             pn2->pn_pos.end = tokenStream.currentToken().pos.end;
 #endif
         } else if (tt == TOK_LB) {
             pn2 = BinaryNode::create(PNK_LB, tc);
             if (!pn2)
                 return NULL;
-            pn3 = expr();
+            ParseNode *pn3 = expr();
             if (!pn3)
                 return NULL;
 
             MUST_MATCH_TOKEN(TOK_RB, JSMSG_BRACKET_IN_INDEX);
-            pn2->pn_pos.begin = pn->pn_pos.begin;
+            pn2->pn_pos.begin = lhs->pn_pos.begin;
             pn2->pn_pos.end = tokenStream.currentToken().pos.end;
 
             /*
              * Optimize o['p'] to o.p by rewriting pn2, but avoid rewriting
              * o['0'] to use JSOP_GETPROP, to keep fast indexing disjoint in
              * the interpreter from fast property access. However, if the
              * bracketed string is a uint32, we rewrite pn3 to be a number
              * instead of a string.
@@ -5856,77 +5858,77 @@ Parser::memberExpr(JSBool allowCallSynta
             do {
                 if (pn3->isKind(PNK_STRING)) {
                     jsuint index;
 
                     if (!js_IdIsIndex(ATOM_TO_JSID(pn3->pn_atom), &index)) {
                         pn2->setKind(PNK_DOT);
                         pn2->setOp(JSOP_GETPROP);
                         pn2->setArity(PN_NAME);
-                        pn2->pn_expr = pn;
+                        pn2->pn_expr = lhs;
                         pn2->pn_atom = pn3->pn_atom;
                         break;
                     }
                     pn3->setKind(PNK_NUMBER);
                     pn3->setOp(JSOP_DOUBLE);
                     pn3->pn_dval = index;
                 }
                 pn2->setOp(JSOP_GETELEM);
-                pn2->pn_left = pn;
+                pn2->pn_left = lhs;
                 pn2->pn_right = pn3;
             } while (0);
         } else if (allowCallSyntax && tt == TOK_LP) {
             pn2 = ListNode::create(PNK_LP, tc);
             if (!pn2)
                 return NULL;
             pn2->setOp(JSOP_CALL);
 
-            pn = CheckForImmediatelyAppliedLambda(pn);
-            if (pn->isOp(JSOP_NAME)) {
-                if (pn->pn_atom == context->runtime->atomState.evalAtom) {
+            lhs = CheckForImmediatelyAppliedLambda(lhs);
+            if (lhs->isOp(JSOP_NAME)) {
+                if (lhs->pn_atom == context->runtime->atomState.evalAtom) {
                     /* Select JSOP_EVAL and flag tc as heavyweight. */
                     pn2->setOp(JSOP_EVAL);
                     tc->noteCallsEval();
                     tc->flags |= TCF_FUN_HEAVYWEIGHT;
                     /*
                      * In non-strict mode code, direct calls to eval can add
                      * variables to the call object.
                      */
                     if (!tc->inStrictMode())
                         tc->noteHasExtensibleScope();
                 }
-            } else if (pn->isOp(JSOP_GETPROP)) {
+            } else if (lhs->isOp(JSOP_GETPROP)) {
                 /* Select JSOP_FUNAPPLY given foo.apply(...). */
-                if (pn->pn_atom == context->runtime->atomState.applyAtom)
+                if (lhs->pn_atom == context->runtime->atomState.applyAtom)
                     pn2->setOp(JSOP_FUNAPPLY);
-                else if (pn->pn_atom == context->runtime->atomState.callAtom)
+                else if (lhs->pn_atom == context->runtime->atomState.callAtom)
                     pn2->setOp(JSOP_FUNCALL);
             }
 
-            pn2->initList(pn);
-            pn2->pn_pos.begin = pn->pn_pos.begin;
+            pn2->initList(lhs);
+            pn2->pn_pos.begin = lhs->pn_pos.begin;
 
             if (!argumentList(pn2))
                 return NULL;
             if (pn2->pn_count > ARGC_LIMIT) {
                 JS_ReportErrorNumber(context, js_GetErrorMessage, NULL,
                                      JSMSG_TOO_MANY_FUN_ARGS);
                 return NULL;
             }
             pn2->pn_pos.end = tokenStream.currentToken().pos.end;
         } else {
             tokenStream.ungetToken();
-            return pn;
+            return lhs;
         }
 
-        pn = pn2;
+        lhs = pn2;
     }
     if (tt == TOK_ERROR)
         return NULL;
-    return pn;
+    return lhs;
 }
 
 ParseNode *
 Parser::bracketedExpr()
 {
     uintN oldflags;
     ParseNode *pn;