Parse a function expression as a primary expression
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 27 Jan 2015 01:14:14 +0000 (01:14 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 27 Jan 2015 01:14:14 +0000 (01:14 +0000)
https://bugs.webkit.org/show_bug.cgi?id=140908

Reviewed by Mark Lam.

Moved the code to generate an AST node for a function expression from parseMemberExpression
to parsePrimaryExpression to match the ES6 specification terminology:
https://people.mozilla.org/~jorendorff/es6-draft.html#sec-primary-expression

There should be no behavior change from this change since parsePrimaryExpression is only
called in parseMemberExpression other than the fact failIfStackOverflow() is called.

* parser/Parser.cpp:
(JSC::Parser<LexerType>::parsePrimaryExpression):
(JSC::Parser<LexerType>::parseMemberExpression):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@179159 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/parser/Parser.cpp

index 7605bcf65e4f590282339efcca1a93741fe2f5b4..95af991ded760ce28cde6ac60e573ff925c8e815 100644 (file)
@@ -1,3 +1,21 @@
+2015-01-26  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Parse a function expression as a primary expression
+        https://bugs.webkit.org/show_bug.cgi?id=140908
+
+        Reviewed by Mark Lam.
+
+        Moved the code to generate an AST node for a function expression from parseMemberExpression
+        to parsePrimaryExpression to match the ES6 specification terminology:
+        https://people.mozilla.org/~jorendorff/es6-draft.html#sec-primary-expression
+
+        There should be no behavior change from this change since parsePrimaryExpression is only
+        called in parseMemberExpression other than the fact failIfStackOverflow() is called.
+
+        * parser/Parser.cpp:
+        (JSC::Parser<LexerType>::parsePrimaryExpression):
+        (JSC::Parser<LexerType>::parseMemberExpression):
+
 2015-01-26  Myles C. Maxfield  <mmaxfield@apple.com>
 
         [iOS] [SVG -> OTF Converter] Flip the switch off on iOS
index cc068fe67561976a29a2c0e27cd63fc92f32bbb7..9a42ab07509e9cf0d1b6ab00a6154cdf9b402ae8 100644 (file)
@@ -2027,6 +2027,15 @@ template <class TreeBuilder> TreeExpression Parser<LexerType>::parsePrimaryExpre
 {
     failIfStackOverflow();
     switch (m_token.m_type) {
+    case FUNCTION: {
+        JSTokenLocation location(tokenLocation());
+        unsigned functionKeywordStart = tokenStart();
+        next();
+        ParserFunctionInfo<TreeBuilder> info;
+        info.name = &m_vm->propertyNames->nullIdentifier;
+        failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, FunctionMode, false, info)), "Cannot parse function expression");
+        return context.createFunctionExpr(location, info, functionKeywordStart);
+    }
     case OPENBRACE:
         if (strictMode())
             return parseStrictObjectLiteral(context);
@@ -2163,16 +2172,7 @@ template <class TreeBuilder> TreeExpression Parser<LexerType>::parseMemberExpres
         newCount++;
     }
 
-    if (match(FUNCTION)) {
-        unsigned functionKeywordStart = tokenStart();
-        location = tokenLocation();
-        next();
-        ParserFunctionInfo<TreeBuilder> info;
-        info.name = &m_vm->propertyNames->nullIdentifier;
-        failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, FunctionMode, false, info)), "Cannot parse function expression");
-        base = context.createFunctionExpr(location, info, functionKeywordStart);
-    } else
-        base = parsePrimaryExpression(context);
+    base = parsePrimaryExpression(context);
     
     failIfFalse(base, "Cannot parse base expression");
     while (true) {