Changeset 237128 in webkit for trunk/Source/JavaScriptCore/parser/Parser.h
- Timestamp:
- Oct 15, 2018, 11:42:44 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/parser/Parser.h
r237096 r237128 860 860 }; 861 861 862 enum class ArgumentType { Normal, Spread }; 863 enum class ParsingContext { Program, FunctionConstructor, Eval }; 862 enum class ArgumentType { 863 Normal, 864 Spread 865 }; 864 866 865 867 template <typename LexerType> … … 873 875 874 876 template <class ParsedNode> 875 std::unique_ptr<ParsedNode> parse(ParserError&, const Identifier&, SourceParseMode , ParsingContext, std::optional<int> functionConstructorParametersEndPosition = std::nullopt);877 std::unique_ptr<ParsedNode> parse(ParserError&, const Identifier&, SourceParseMode); 876 878 877 879 JSTextPosition positionBeforeLastNewline() const { return m_lexer->positionBeforeLastNewline(); } … … 1311 1313 1312 1314 Parser(); 1313 1314 String parseInner(const Identifier&, SourceParseMode, ParsingContext, std::optional<int> functionConstructorParametersEndPosition = std::nullopt); 1315 String parseInner(const Identifier&, SourceParseMode); 1315 1316 1316 1317 void didFinishParsing(SourceElements*, DeclarationStacks::FunctionStack&&, VariableEnvironment&, UniquedStringImplPtrSet&&, CodeFeatures, int); … … 1524 1525 template <class TreeBuilder> TreeSourceElements parseAsyncFunctionSourceElements(TreeBuilder&, SourceParseMode, bool isArrowFunctionBodyExpression, SourceElementsMode); 1525 1526 template <class TreeBuilder> TreeSourceElements parseAsyncGeneratorFunctionSourceElements(TreeBuilder&, SourceParseMode, bool isArrowFunctionBodyExpression, SourceElementsMode); 1526 template <class TreeBuilder> TreeSourceElements parseSingleFunction(TreeBuilder&, std::optional<int> functionConstructorParametersEndPosition);1527 1527 template <class TreeBuilder> TreeStatement parseStatementListItem(TreeBuilder&, const Identifier*& directive, unsigned* directiveLiteralLength); 1528 1528 template <class TreeBuilder> TreeStatement parseStatement(TreeBuilder&, const Identifier*& directive, unsigned* directiveLiteralLength = 0); 1529 1529 enum class ExportType { Exported, NotExported }; 1530 1530 template <class TreeBuilder> TreeStatement parseClassDeclaration(TreeBuilder&, ExportType = ExportType::NotExported, DeclarationDefaultContext = DeclarationDefaultContext::Standard); 1531 template <class TreeBuilder> TreeStatement parseFunctionDeclaration(TreeBuilder&, ExportType = ExportType::NotExported, DeclarationDefaultContext = DeclarationDefaultContext::Standard , std::optional<int> functionConstructorParametersEndPosition = std::nullopt);1531 template <class TreeBuilder> TreeStatement parseFunctionDeclaration(TreeBuilder&, ExportType = ExportType::NotExported, DeclarationDefaultContext = DeclarationDefaultContext::Standard); 1532 1532 template <class TreeBuilder> TreeStatement parseFunctionDeclarationStatement(TreeBuilder&, bool isAsync, bool parentAllowsFunctionDeclarationAsStatement); 1533 template <class TreeBuilder> TreeStatement parseAsyncFunctionDeclaration(TreeBuilder&, ExportType = ExportType::NotExported, DeclarationDefaultContext = DeclarationDefaultContext::Standard , std::optional<int> functionConstructorParametersEndPosition = std::nullopt);1533 template <class TreeBuilder> TreeStatement parseAsyncFunctionDeclaration(TreeBuilder&, ExportType = ExportType::NotExported, DeclarationDefaultContext = DeclarationDefaultContext::Standard); 1534 1534 template <class TreeBuilder> NEVER_INLINE bool maybeParseAsyncFunctionDeclarationStatement(TreeBuilder& context, TreeStatement& result, bool parentAllowsFunctionDeclarationAsStatement); 1535 1535 template <class TreeBuilder> TreeStatement parseVariableDeclaration(TreeBuilder&, DeclarationType, ExportType = ExportType::NotExported); … … 1600 1600 1601 1601 enum class FunctionDefinitionType { Expression, Declaration, Method }; 1602 template <class TreeBuilder> NEVER_INLINE bool parseFunctionInfo(TreeBuilder&, FunctionNameRequirements, SourceParseMode, bool nameIsInContainingScope, ConstructorKind, SuperBinding, int functionKeywordStart, ParserFunctionInfo<TreeBuilder>&, FunctionDefinitionType , std::optional<int> functionConstructorParametersEndPosition = std::nullopt);1602 template <class TreeBuilder> NEVER_INLINE bool parseFunctionInfo(TreeBuilder&, FunctionNameRequirements, SourceParseMode, bool nameIsInContainingScope, ConstructorKind, SuperBinding, int functionKeywordStart, ParserFunctionInfo<TreeBuilder>&, FunctionDefinitionType); 1603 1603 1604 1604 ALWAYS_INLINE bool isArrowFunctionParameters(); … … 1848 1848 template <typename LexerType> 1849 1849 template <class ParsedNode> 1850 std::unique_ptr<ParsedNode> Parser<LexerType>::parse(ParserError& error, const Identifier& calleeName, SourceParseMode parseMode , ParsingContext parsingContext, std::optional<int> functionConstructorParametersEndPosition)1850 std::unique_ptr<ParsedNode> Parser<LexerType>::parse(ParserError& error, const Identifier& calleeName, SourceParseMode parseMode) 1851 1851 { 1852 1852 int errLine; … … 1865 1865 unsigned startColumn = m_source->startColumn().zeroBasedInt(); 1866 1866 1867 String parseError = parseInner(calleeName, parseMode , parsingContext, functionConstructorParametersEndPosition);1867 String parseError = parseInner(calleeName, parseMode); 1868 1868 1869 1869 int lineNumber = m_lexer->lineNumber(); … … 1960 1960 if (source.provider()->source().is8Bit()) { 1961 1961 Parser<Lexer<LChar>> parser(vm, source, builtinMode, strictMode, scriptMode, parseMode, superBinding, defaultConstructorKind, derivedContextType, isEvalNode<ParsedNode>(), evalContextType, debuggerParseData); 1962 result = parser.parse<ParsedNode>(error, name, parseMode , isEvalNode<ParsedNode>() ? ParsingContext::Eval : ParsingContext::Program);1962 result = parser.parse<ParsedNode>(error, name, parseMode); 1963 1963 if (positionBeforeLastNewline) 1964 1964 *positionBeforeLastNewline = parser.positionBeforeLastNewline(); … … 1973 1973 ASSERT_WITH_MESSAGE(defaultConstructorKind == ConstructorKind::None, "BuiltinExecutables::createDefaultConstructor should always use a 8-bit string"); 1974 1974 Parser<Lexer<UChar>> parser(vm, source, builtinMode, strictMode, scriptMode, parseMode, superBinding, defaultConstructorKind, derivedContextType, isEvalNode<ParsedNode>(), evalContextType, debuggerParseData); 1975 result = parser.parse<ParsedNode>(error, name, parseMode , isEvalNode<ParsedNode>() ? ParsingContext::Eval : ParsingContext::Program);1975 result = parser.parse<ParsedNode>(error, name, parseMode); 1976 1976 if (positionBeforeLastNewline) 1977 1977 *positionBeforeLastNewline = parser.positionBeforeLastNewline(); … … 1987 1987 } 1988 1988 1989 inline std::unique_ptr<ProgramNode> parseFunctionForFunctionConstructor(VM& vm, const SourceCode& source, ParserError& error, JSTextPosition* positionBeforeLastNewline, std::optional<int> functionConstructorParametersEndPosition)1990 {1991 ASSERT(!source.provider()->source().isNull());1992 1993 MonotonicTime before;1994 if (UNLIKELY(Options::reportParseTimes()))1995 before = MonotonicTime::now();1996 1997 Identifier name;1998 bool isEvalNode = false;1999 std::unique_ptr<ProgramNode> result;2000 if (source.provider()->source().is8Bit()) {2001 Parser<Lexer<LChar>> parser(&vm, source, JSParserBuiltinMode::NotBuiltin, JSParserStrictMode::NotStrict, JSParserScriptMode::Classic, SourceParseMode::ProgramMode, SuperBinding::NotNeeded, ConstructorKind::None, DerivedContextType::None, isEvalNode, EvalContextType::None, nullptr);2002 result = parser.parse<ProgramNode>(error, name, SourceParseMode::ProgramMode, ParsingContext::FunctionConstructor, functionConstructorParametersEndPosition);2003 if (positionBeforeLastNewline)2004 *positionBeforeLastNewline = parser.positionBeforeLastNewline();2005 } else {2006 Parser<Lexer<UChar>> parser(&vm, source, JSParserBuiltinMode::NotBuiltin, JSParserStrictMode::NotStrict, JSParserScriptMode::Classic, SourceParseMode::ProgramMode, SuperBinding::NotNeeded, ConstructorKind::None, DerivedContextType::None, isEvalNode, EvalContextType::None, nullptr);2007 result = parser.parse<ProgramNode>(error, name, SourceParseMode::ProgramMode, ParsingContext::FunctionConstructor, functionConstructorParametersEndPosition);2008 if (positionBeforeLastNewline)2009 *positionBeforeLastNewline = parser.positionBeforeLastNewline();2010 }2011 2012 if (UNLIKELY(Options::reportParseTimes())) {2013 MonotonicTime after = MonotonicTime::now();2014 ParseHash hash(source);2015 dataLogLn(result ? "Parsed #" : "Failed to parse #", hash.hashForCall(), "/#", hash.hashForConstruct(), " in ", (after - before).milliseconds(), " ms.");2016 }2017 2018 return result;2019 }2020 2021 2022 1989 } // namespace
Note:
See TracChangeset
for help on using the changeset viewer.