From 63f7dadd3f8ee8877ebf00e83efb8775ce877343 Mon Sep 17 00:00:00 2001 From: Blake Kaplan Date: Thu, 7 Jan 2010 15:58:44 -0800 Subject: [PATCH] Bug 537673 - Don't constant-fold a parenthesized callee expression. r=jorendoff --- js/src/jsparse.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/js/src/jsparse.cpp b/js/src/jsparse.cpp index 2459979f7442..cc6296a92c8c 100644 --- a/js/src/jsparse.cpp +++ b/js/src/jsparse.cpp @@ -8978,8 +8978,13 @@ js_FoldConstants(JSContext *cx, JSParseNode *pn, JSTreeContext *tc, bool inCond) /* Propagate inCond through logical connectives. */ bool cond = inCond && (pn->pn_type == TOK_OR || pn->pn_type == TOK_AND); + /* Don't fold a parenthesized call expression. See bug 537673. */ + pn1 = pn2 = pn->pn_head; + if ((pn->pn_type == TOK_LP || pn->pn_type == TOK_NEW) && pn2->pn_parens) + pn2 = pn2->pn_next; + /* Save the list head in pn1 for later use. */ - for (pn1 = pn2 = pn->pn_head; pn2; pn2 = pn2->pn_next) { + for (; pn2; pn2 = pn2->pn_next) { if (!js_FoldConstants(cx, pn2, tc, cond)) return JS_FALSE; }