Changeset 186959 in webkit for trunk/Source/JavaScriptCore/parser/Parser.h
- Timestamp:
- Jul 17, 2015, 11:48:30 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/parser/Parser.h
r186860 r186959 82 82 83 83 enum SourceElementsMode { CheckForStrictMode, DontCheckForStrictMode }; 84 #if ENABLE(ES6_ARROWFUNCTION_SYNTAX)85 84 enum FunctionParseType { StandardFunctionParseType, ArrowFunctionParseType }; 86 #else 87 enum FunctionParseType { StandardFunctionParseType}; 88 #endif 85 enum FunctionBodyType { ArrowFunctionBodyExpression, ArrowFunctionBodyBlock, StandardFunctionBodyBlock }; 89 86 enum FunctionRequirements { FunctionNoRequirements, FunctionNeedsName }; 90 enum FunctionParseMode {91 FunctionMode,92 GetterMode,93 SetterMode,94 MethodMode,95 #if ENABLE(ES6_ARROWFUNCTION_SYNTAX)96 ArrowFunctionMode97 #endif98 };99 87 enum DestructuringKind { 100 88 DestructureToVariables, … … 538 526 public: 539 527 Parser( 540 VM*, const SourceCode&, FunctionParameters*, const Identifier&, 541 JSParserBuiltinMode, JSParserStrictMode, JSParserCodeType, 528 VM*, const SourceCode&, JSParserBuiltinMode, JSParserStrictMode, JSParserCodeType, 542 529 ConstructorKind defaultConstructorKind = ConstructorKind::None, ThisTDZMode = ThisTDZMode::CheckIfNeeded); 543 530 ~Parser(); 544 531 545 532 template <class ParsedNode> 546 std::unique_ptr<ParsedNode> parse(ParserError& );533 std::unique_ptr<ParsedNode> parse(ParserError&, const Identifier&, FunctionParseMode); 547 534 548 535 JSTextPosition positionBeforeLastNewline() const { return m_lexer->positionBeforeLastNewline(); } … … 740 727 741 728 Parser(); 742 String parseInner( );729 String parseInner(const Identifier&, FunctionParseMode); 743 730 744 731 void didFinishParsing(SourceElements*, DeclarationStacks::FunctionStack&, VariableEnvironment&, CodeFeatures, int, const Vector<RefPtr<UniquedStringImpl>>&&); … … 797 784 } 798 785 786 ALWAYS_INLINE bool isEndOfArrowFunction() 787 { 788 return match(SEMICOLON) || match(COMMA) || match(CLOSEPAREN) || match(CLOSEBRACE) || match(CLOSEBRACKET) || match(EOFTOK) || m_lexer->prevTerminator(); 789 } 790 791 ALWAYS_INLINE bool isArrowFunctionParamters() 792 { 799 793 #if ENABLE(ES6_ARROWFUNCTION_SYNTAX) 800 ALWAYS_INLINE bool isEndOfArrowFunction()801 {802 return match(SEMICOLON) || match(COMMA) || match(CLOSEPAREN) || match(CLOSEBRACE) || match(CLOSEBRACKET) || match(EOFTOK) || m_lexer->prevTerminator();803 }804 805 ALWAYS_INLINE bool isArrowFunctionParamters()806 {807 794 bool isArrowFunction = false; 808 795 … … 835 822 836 823 return isArrowFunction; 837 } 824 #else 825 return false; 838 826 #endif 827 } 839 828 840 829 ALWAYS_INLINE unsigned tokenStart() … … 947 936 } 948 937 949 template <class TreeBuilder> TreeSourceElements parseSourceElements(TreeBuilder&, SourceElementsMode , FunctionParseType);938 template <class TreeBuilder> TreeSourceElements parseSourceElements(TreeBuilder&, SourceElementsMode); 950 939 template <class TreeBuilder> TreeStatement parseStatementListItem(TreeBuilder&, const Identifier*& directive, unsigned* directiveLiteralLength); 951 940 template <class TreeBuilder> TreeStatement parseStatement(TreeBuilder&, const Identifier*& directive, unsigned* directiveLiteralLength = 0); … … 988 977 template <class TreeBuilder> TreeExpression parsePropertyMethod(TreeBuilder& context, const Identifier* methodName); 989 978 template <class TreeBuilder> TreeProperty parseGetterSetter(TreeBuilder&, bool strict, PropertyNode::Type, unsigned getterOrSetterStartOffset, ConstructorKind = ConstructorKind::None, SuperBinding = SuperBinding::NotNeeded); 990 template <class TreeBuilder> ALWAYS_INLINE TreeFunctionBody parseFunctionBody(TreeBuilder&, int functionKeywordStart, int functionNameStart, int parametersStart, ConstructorKind, FunctionParseType);991 template <class TreeBuilder> ALWAYS_INLINE TreeFormalParameterList parseFormalParameters(TreeBuilder&);979 template <class TreeBuilder> ALWAYS_INLINE TreeFunctionBody parseFunctionBody(TreeBuilder&, const JSTokenLocation&, int, int functionKeywordStart, int functionNameStart, int parametersStart, ConstructorKind, FunctionBodyType, unsigned, FunctionParseMode); 980 template <class TreeBuilder> ALWAYS_INLINE bool parseFormalParameters(TreeBuilder&, TreeFormalParameterList, unsigned&); 992 981 enum VarDeclarationListContext { ForLoopContext, VarDeclarationContext }; 993 982 template <class TreeBuilder> TreeExpression parseVariableDeclarationList(TreeBuilder&, int& declarations, TreeDestructuringPattern& lastPattern, TreeExpression& lastInitializer, JSTextPosition& identStart, JSTextPosition& initStart, JSTextPosition& initEnd, VarDeclarationListContext, DeclarationType); 994 983 template <class TreeBuilder> NEVER_INLINE TreeConstDeclList parseConstDeclarationList(TreeBuilder&); 995 996 #if ENABLE(ES6_ARROWFUNCTION_SYNTAX) 997 template <class TreeBuilder> TreeStatement parseArrowFunctionSingleExpressionBody(TreeBuilder&, FunctionParseType); 984 template <class TreeBuilder> TreeSourceElements parseArrowFunctionSingleExpressionBodySourceElements(TreeBuilder&); 998 985 template <class TreeBuilder> TreeExpression parseArrowFunctionExpression(TreeBuilder&); 999 #endif1000 1001 986 template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern createBindingPattern(TreeBuilder&, DestructuringKind, const Identifier&, int depth, JSToken, AssignmentContext); 1002 987 template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern parseDestructuringPattern(TreeBuilder&, DestructuringKind, AssignmentContext = AssignmentContext::DeclarationStatement, int depth = 0); … … 1031 1016 } 1032 1017 1033 1034 #if ENABLE(ES6_ARROWFUNCTION_SYNTAX)1035 1018 void setEndOfStatement() 1036 1019 { 1037 1020 m_lexer->setTokenPosition(&m_token); 1038 1021 } 1039 #endif1040 1022 1041 1023 bool canRecurse() … … 1109 1091 ParserArena m_parserArena; 1110 1092 std::unique_ptr<LexerType> m_lexer; 1093 FunctionParameters* m_parameters { nullptr }; 1111 1094 1112 1095 bool m_hasStackOverflow; … … 1154 1137 template <typename LexerType> 1155 1138 template <class ParsedNode> 1156 std::unique_ptr<ParsedNode> Parser<LexerType>::parse(ParserError& error )1139 std::unique_ptr<ParsedNode> Parser<LexerType>::parse(ParserError& error, const Identifier& calleeName, FunctionParseMode parseMode) 1157 1140 { 1158 1141 int errLine; … … 1160 1143 1161 1144 if (ParsedNode::scopeIsFunction) 1162 m_lexer->setIsReparsing ();1145 m_lexer->setIsReparsingFunction(); 1163 1146 1164 1147 m_sourceElements = 0; … … 1171 1154 unsigned startColumn = m_source->startColumn() - 1; 1172 1155 1173 String parseError = parseInner( );1156 String parseError = parseInner(calleeName, parseMode); 1174 1157 1175 1158 int lineNumber = m_lexer->lineNumber(); … … 1201 1184 m_funcDeclarations, 1202 1185 currentScope()->finalizeLexicalEnvironment(), 1186 m_parameters, 1203 1187 *m_source, 1204 1188 m_features, … … 1234 1218 template <class ParsedNode> 1235 1219 std::unique_ptr<ParsedNode> parse( 1236 VM* vm, const SourceCode& source, FunctionParameters* parameters,1220 VM* vm, const SourceCode& source, 1237 1221 const Identifier& name, JSParserBuiltinMode builtinMode, 1238 1222 JSParserStrictMode strictMode, JSParserCodeType codeType, 1239 ParserError& error, JSTextPosition* positionBeforeLastNewline = 0, 1240 ConstructorKind defaultConstructorKind = ConstructorKind::None, ThisTDZMode thisTDZMode = ThisTDZMode::CheckIfNeeded) 1223 ParserError& error, JSTextPosition* positionBeforeLastNewline = nullptr, 1224 FunctionParseMode parseMode = NotAFunctionMode, ConstructorKind defaultConstructorKind = ConstructorKind::None, 1225 ThisTDZMode thisTDZMode = ThisTDZMode::CheckIfNeeded) 1241 1226 { 1242 1227 SamplingRegion samplingRegion("Parsing"); … … 1244 1229 ASSERT(!source.provider()->source().isNull()); 1245 1230 if (source.provider()->source().is8Bit()) { 1246 Parser<Lexer<LChar>> parser(vm, source, parameters, name,builtinMode, strictMode, codeType, defaultConstructorKind, thisTDZMode);1247 std::unique_ptr<ParsedNode> result = parser.parse<ParsedNode>(error );1231 Parser<Lexer<LChar>> parser(vm, source, builtinMode, strictMode, codeType, defaultConstructorKind, thisTDZMode); 1232 std::unique_ptr<ParsedNode> result = parser.parse<ParsedNode>(error, name, parseMode); 1248 1233 if (positionBeforeLastNewline) 1249 1234 *positionBeforeLastNewline = parser.positionBeforeLastNewline(); … … 1257 1242 } 1258 1243 ASSERT_WITH_MESSAGE(defaultConstructorKind == ConstructorKind::None, "BuiltinExecutables::createDefaultConstructor should always use a 8-bit string"); 1259 Parser<Lexer<UChar>> parser(vm, source, parameters, name,builtinMode, strictMode, codeType, defaultConstructorKind, thisTDZMode);1260 std::unique_ptr<ParsedNode> result = parser.parse<ParsedNode>(error );1244 Parser<Lexer<UChar>> parser(vm, source, builtinMode, strictMode, codeType, defaultConstructorKind, thisTDZMode); 1245 std::unique_ptr<ParsedNode> result = parser.parse<ParsedNode>(error, name, parseMode); 1261 1246 if (positionBeforeLastNewline) 1262 1247 *positionBeforeLastNewline = parser.positionBeforeLastNewline();
Note:
See TracChangeset
for help on using the changeset viewer.