diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp index de63e1fe8714..c26cc82890e9 100644 --- a/js/src/frontend/Parser.cpp +++ b/js/src/frontend/Parser.cpp @@ -2335,9 +2335,9 @@ PerHandlerParser::declareFunctionThis() return true; } -template +template typename ParseHandler::Node -GeneralParser::newInternalDotName(HandlePropertyName name) +PerHandlerParser::newInternalDotName(HandlePropertyName name) { Node nameNode = newName(name); if (!nameNode) @@ -2347,16 +2347,16 @@ GeneralParser::newInternalDotName(HandlePropertyName name) return nameNode; } -template +template typename ParseHandler::Node -GeneralParser::newThisName() +PerHandlerParser::newThisName() { return newInternalDotName(context->names().dotThis); } -template +template typename ParseHandler::Node -GeneralParser::newDotGeneratorName() +PerHandlerParser::newDotGeneratorName() { return newInternalDotName(context->names().dotGenerator); } @@ -8764,16 +8764,16 @@ GeneralParser::memberExpr(YieldHandling yieldHandling, return lhs; } -template -typename ParseHandler::Node -GeneralParser::newName(PropertyName* name) +template +inline typename ParseHandler::Node +PerHandlerParser::newName(PropertyName* name) { return newName(name, pos()); } -template -typename ParseHandler::Node -GeneralParser::newName(PropertyName* name, TokenPos pos) +template +inline typename ParseHandler::Node +PerHandlerParser::newName(PropertyName* name, TokenPos pos) { return handler.newName(name, pos, context); } diff --git a/js/src/frontend/Parser.h b/js/src/frontend/Parser.h index 31da2e0aff44..35063fe84888 100644 --- a/js/src/frontend/Parser.h +++ b/js/src/frontend/Parser.h @@ -291,6 +291,8 @@ class PerHandlerParser /* State specific to the kind of parse being performed. */ ParseHandler handler; + static Node null() { return ParseHandler::null(); } + const char* nameIsArgumentsOrEval(Node node); bool noteDestructuredPositionalFormalParameter(Node fn, Node destruct); @@ -310,6 +312,13 @@ class PerHandlerParser bool declareFunctionThis(); + inline Node newName(PropertyName* name); + inline Node newName(PropertyName* name, TokenPos pos); + + Node newInternalDotName(HandlePropertyName name); + Node newThisName(); + Node newDotGeneratorName(); + public: bool isValidSimpleAssignmentTarget(Node node, FunctionCallBehavior behavior = ForbidAssignmentToFunctionCalls); @@ -374,6 +383,8 @@ class GeneralParser using Base::nameIsArgumentsOrEval; using Base::newFunction; using Base::newFunctionBox; + using Base::newName; + using Base::null; using Base::options; using Base::pos; using Base::propagateFreeNamesAndMarkClosedOverBindings; @@ -392,6 +403,9 @@ class GeneralParser private: using Base::declareFunctionThis; using Base::hasUsedName; + using Base::newDotGeneratorName; + using Base::newInternalDotName; + using Base::newThisName; using Base::noteDestructuredPositionalFormalParameter; using Base::noteUsedName; @@ -872,9 +886,6 @@ class GeneralParser bool matchInOrOf(bool* isForInp, bool* isForOfp); bool declareFunctionArgumentsObject(); - Node newInternalDotName(HandlePropertyName name); - Node newThisName(); - Node newDotGeneratorName(); bool declareDotGeneratorName(); inline bool finishFunction(bool isStandaloneFunction = false); @@ -933,13 +944,8 @@ class GeneralParser } protected: - static Node null() { return ParseHandler::null(); } - Node stringLiteral(); - inline Node newName(PropertyName* name); - inline Node newName(PropertyName* name, TokenPos pos); - // Match the current token against the BindingIdentifier production with // the given Yield parameter. If there is no match, report a syntax // error.