Bug 1424946 - Move various GeneralParser::newName-style functions into a baser class. r=arai

This commit is contained in:
Jeff Walden 2017-12-12 15:20:58 -06:00
parent 811d1f7fd6
commit 7aac997a48
2 changed files with 26 additions and 20 deletions

View File

@ -2335,9 +2335,9 @@ PerHandlerParser<ParseHandler>::declareFunctionThis()
return true;
}
template <class ParseHandler, typename CharT>
template <class ParseHandler>
typename ParseHandler::Node
GeneralParser<ParseHandler, CharT>::newInternalDotName(HandlePropertyName name)
PerHandlerParser<ParseHandler>::newInternalDotName(HandlePropertyName name)
{
Node nameNode = newName(name);
if (!nameNode)
@ -2347,16 +2347,16 @@ GeneralParser<ParseHandler, CharT>::newInternalDotName(HandlePropertyName name)
return nameNode;
}
template <class ParseHandler, typename CharT>
template <class ParseHandler>
typename ParseHandler::Node
GeneralParser<ParseHandler, CharT>::newThisName()
PerHandlerParser<ParseHandler>::newThisName()
{
return newInternalDotName(context->names().dotThis);
}
template <class ParseHandler, typename CharT>
template <class ParseHandler>
typename ParseHandler::Node
GeneralParser<ParseHandler, CharT>::newDotGeneratorName()
PerHandlerParser<ParseHandler>::newDotGeneratorName()
{
return newInternalDotName(context->names().dotGenerator);
}
@ -8764,16 +8764,16 @@ GeneralParser<ParseHandler, CharT>::memberExpr(YieldHandling yieldHandling,
return lhs;
}
template <class ParseHandler, typename CharT>
typename ParseHandler::Node
GeneralParser<ParseHandler, CharT>::newName(PropertyName* name)
template <class ParseHandler>
inline typename ParseHandler::Node
PerHandlerParser<ParseHandler>::newName(PropertyName* name)
{
return newName(name, pos());
}
template <class ParseHandler, typename CharT>
typename ParseHandler::Node
GeneralParser<ParseHandler, CharT>::newName(PropertyName* name, TokenPos pos)
template <class ParseHandler>
inline typename ParseHandler::Node
PerHandlerParser<ParseHandler>::newName(PropertyName* name, TokenPos pos)
{
return handler.newName(name, pos, context);
}

View File

@ -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.