Changeset 99618 in webkit for trunk/Source/JavaScriptCore/parser/Parser.cpp
- Timestamp:
- Nov 8, 2011, 2:49:27 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/parser/Parser.cpp
r99608 r99618 41 41 namespace JSC { 42 42 43 Parser::Parser(JSGlobalData* globalData, const SourceCode& source, FunctionParameters* parameters, JSParserStrictness strictness, JSParserMode parserMode) 43 template <typename LexerType> 44 Parser<LexerType>::Parser(JSGlobalData* globalData, const SourceCode& source, FunctionParameters* parameters, JSParserStrictness strictness, JSParserMode parserMode) 44 45 : m_globalData(globalData) 45 46 , m_source(&source) … … 58 59 , m_sourceElements(0) 59 60 { 60 m_lexer = adoptPtr(new Lexer <UChar>(globalData));61 m_lexer = adoptPtr(new LexerType(globalData)); 61 62 m_arena = m_globalData->parserArena; 62 63 m_lexer->setCode(source, m_arena); … … 76 77 } 77 78 78 Parser::~Parser() 79 { 80 } 81 82 83 UString Parser::parseInner() 79 template <typename LexerType> 80 Parser<LexerType>::~Parser() 81 { 82 } 83 84 template <typename LexerType> 85 UString Parser<LexerType>::parseInner() 84 86 { 85 87 UString parseError = UString(); … … 111 113 } 112 114 113 void Parser::didFinishParsing(SourceElements* sourceElements, ParserArenaData<DeclarationStacks::VarStack>* varStack, 115 template <typename LexerType> 116 void Parser<LexerType>::didFinishParsing(SourceElements* sourceElements, ParserArenaData<DeclarationStacks::VarStack>* varStack, 114 117 ParserArenaData<DeclarationStacks::FunctionStack>* funcStack, CodeFeatures features, int lastLine, int numConstants, IdentifierSet& capturedVars) 115 118 { … … 123 126 } 124 127 125 bool Parser::allowAutomaticSemicolon() 128 template <typename LexerType> 129 bool Parser<LexerType>::allowAutomaticSemicolon() 126 130 { 127 131 return match(CLOSEBRACE) || match(EOFTOK) || m_lexer->prevTerminator(); 128 132 } 129 133 130 template <Parser::SourceElementsMode mode, class TreeBuilder> TreeSourceElements Parser::parseSourceElements(TreeBuilder& context) 134 template <typename LexerType> 135 template <SourceElementsMode mode, class TreeBuilder> TreeSourceElements Parser<LexerType>::parseSourceElements(TreeBuilder& context) 131 136 { 132 137 const unsigned lengthOfUseStrictLiteral = 12; // "use strict".length … … 165 170 } 166 171 167 template <class TreeBuilder> TreeStatement Parser::parseVarDeclaration(TreeBuilder& context) 172 template <typename LexerType> 173 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseVarDeclaration(TreeBuilder& context) 168 174 { 169 175 ASSERT(match(VAR)); … … 181 187 } 182 188 183 template <class TreeBuilder> TreeStatement Parser::parseConstDeclaration(TreeBuilder& context) 189 template <typename LexerType> 190 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseConstDeclaration(TreeBuilder& context) 184 191 { 185 192 ASSERT(match(CONSTTOKEN)); … … 193 200 } 194 201 195 template <class TreeBuilder> TreeStatement Parser::parseDoWhileStatement(TreeBuilder& context) 202 template <typename LexerType> 203 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseDoWhileStatement(TreeBuilder& context) 196 204 { 197 205 ASSERT(match(DO)); … … 214 222 } 215 223 216 template <class TreeBuilder> TreeStatement Parser::parseWhileStatement(TreeBuilder& context) 224 template <typename LexerType> 225 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseWhileStatement(TreeBuilder& context) 217 226 { 218 227 ASSERT(match(WHILE)); … … 232 241 } 233 242 234 template <class TreeBuilder> TreeExpression Parser::parseVarDeclarationList(TreeBuilder& context, int& declarations, const Identifier*& lastIdent, TreeExpression& lastInitializer, int& identStart, int& initStart, int& initEnd) 243 template <typename LexerType> 244 template <class TreeBuilder> TreeExpression Parser<LexerType>::parseVarDeclarationList(TreeBuilder& context, int& declarations, const Identifier*& lastIdent, TreeExpression& lastInitializer, int& identStart, int& initStart, int& initEnd) 235 245 { 236 246 TreeExpression varDecls = 0; … … 268 278 } 269 279 270 template <class TreeBuilder> TreeConstDeclList Parser::parseConstDeclarationList(TreeBuilder& context) 280 template <typename LexerType> 281 template <class TreeBuilder> TreeConstDeclList Parser<LexerType>::parseConstDeclarationList(TreeBuilder& context) 271 282 { 272 283 failIfTrue(strictMode()); … … 293 304 } 294 305 295 template <class TreeBuilder> TreeStatement Parser::parseForStatement(TreeBuilder& context) 306 template <typename LexerType> 307 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseForStatement(TreeBuilder& context) 296 308 { 297 309 ASSERT(match(FOR)); … … 401 413 } 402 414 403 template <class TreeBuilder> TreeStatement Parser::parseBreakStatement(TreeBuilder& context) 415 template <typename LexerType> 416 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseBreakStatement(TreeBuilder& context) 404 417 { 405 418 ASSERT(match(BREAK)); … … 424 437 } 425 438 426 template <class TreeBuilder> TreeStatement Parser::parseContinueStatement(TreeBuilder& context) 439 template <typename LexerType> 440 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseContinueStatement(TreeBuilder& context) 427 441 { 428 442 ASSERT(match(CONTINUE)); … … 449 463 } 450 464 451 template <class TreeBuilder> TreeStatement Parser::parseReturnStatement(TreeBuilder& context) 465 template <typename LexerType> 466 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseReturnStatement(TreeBuilder& context) 452 467 { 453 468 ASSERT(match(RETURN)); … … 474 489 } 475 490 476 template <class TreeBuilder> TreeStatement Parser::parseThrowStatement(TreeBuilder& context) 491 template <typename LexerType> 492 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseThrowStatement(TreeBuilder& context) 477 493 { 478 494 ASSERT(match(THROW)); … … 492 508 } 493 509 494 template <class TreeBuilder> TreeStatement Parser::parseWithStatement(TreeBuilder& context) 510 template <typename LexerType> 511 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseWithStatement(TreeBuilder& context) 495 512 { 496 513 ASSERT(match(WITH)); … … 514 531 } 515 532 516 template <class TreeBuilder> TreeStatement Parser::parseSwitchStatement(TreeBuilder& context) 533 template <typename LexerType> 534 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseSwitchStatement(TreeBuilder& context) 517 535 { 518 536 ASSERT(match(SWITCH)); … … 541 559 } 542 560 543 template <class TreeBuilder> TreeClauseList Parser::parseSwitchClauses(TreeBuilder& context) 561 template <typename LexerType> 562 template <class TreeBuilder> TreeClauseList Parser<LexerType>::parseSwitchClauses(TreeBuilder& context) 544 563 { 545 564 if (!match(CASE)) … … 568 587 } 569 588 570 template <class TreeBuilder> TreeClause Parser::parseSwitchDefaultClause(TreeBuilder& context) 589 template <typename LexerType> 590 template <class TreeBuilder> TreeClause Parser<LexerType>::parseSwitchDefaultClause(TreeBuilder& context) 571 591 { 572 592 if (!match(DEFAULT)) … … 579 599 } 580 600 581 template <class TreeBuilder> TreeStatement Parser::parseTryStatement(TreeBuilder& context) 601 template <typename LexerType> 602 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseTryStatement(TreeBuilder& context) 582 603 { 583 604 ASSERT(match(TRY)); … … 624 645 } 625 646 626 template <class TreeBuilder> TreeStatement Parser::parseDebuggerStatement(TreeBuilder& context) 647 template <typename LexerType> 648 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseDebuggerStatement(TreeBuilder& context) 627 649 { 628 650 ASSERT(match(DEBUGGER)); … … 636 658 } 637 659 638 template <class TreeBuilder> TreeStatement Parser::parseBlockStatement(TreeBuilder& context) 660 template <typename LexerType> 661 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseBlockStatement(TreeBuilder& context) 639 662 { 640 663 ASSERT(match(OPENBRACE)); … … 652 675 } 653 676 654 template <class TreeBuilder> TreeStatement Parser::parseStatement(TreeBuilder& context, const Identifier*& directive, unsigned* directiveLiteralLength) 677 template <typename LexerType> 678 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseStatement(TreeBuilder& context, const Identifier*& directive, unsigned* directiveLiteralLength) 655 679 { 656 680 DepthManager statementDepth(&m_statementDepth); … … 717 741 } 718 742 719 template <class TreeBuilder> TreeFormalParameterList Parser::parseFormalParameters(TreeBuilder& context) 743 template <typename LexerType> 744 template <class TreeBuilder> TreeFormalParameterList Parser<LexerType>::parseFormalParameters(TreeBuilder& context) 720 745 { 721 746 matchOrFail(IDENT); … … 735 760 } 736 761 737 template <class TreeBuilder> TreeFunctionBody Parser::parseFunctionBody(TreeBuilder& context) 762 template <typename LexerType> 763 template <class TreeBuilder> TreeFunctionBody Parser<LexerType>::parseFunctionBody(TreeBuilder& context) 738 764 { 739 765 if (match(CLOSEBRACE)) … … 746 772 } 747 773 748 template <Parser::FunctionRequirements requirements, bool nameIsInContainingScope, class TreeBuilder> bool Parser::parseFunctionInfo(TreeBuilder& context, const Identifier*& name, TreeFormalParameterList& parameters, TreeFunctionBody& body, int& openBracePos, int& closeBracePos, int& bodyStartLine) 774 template <typename LexerType> 775 template <FunctionRequirements requirements, bool nameIsInContainingScope, class TreeBuilder> bool Parser<LexerType>::parseFunctionInfo(TreeBuilder& context, const Identifier*& name, TreeFormalParameterList& parameters, TreeFunctionBody& body, int& openBracePos, int& closeBracePos, int& bodyStartLine) 749 776 { 750 777 AutoPopScopeRef functionScope(this, pushScope()); … … 819 846 } 820 847 821 template <class TreeBuilder> TreeStatement Parser::parseFunctionDeclaration(TreeBuilder& context) 848 template <typename LexerType> 849 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseFunctionDeclaration(TreeBuilder& context) 822 850 { 823 851 ASSERT(match(FUNCTION)); … … 848 876 }; 849 877 850 template <class TreeBuilder> TreeStatement Parser::parseExpressionOrLabelStatement(TreeBuilder& context) 878 template <typename LexerType> 879 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseExpressionOrLabelStatement(TreeBuilder& context) 851 880 { 852 881 … … 910 939 } 911 940 912 template <class TreeBuilder> TreeStatement Parser::parseExpressionStatement(TreeBuilder& context) 941 template <typename LexerType> 942 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseExpressionStatement(TreeBuilder& context) 913 943 { 914 944 int startLine = tokenLine(); … … 919 949 } 920 950 921 template <class TreeBuilder> TreeStatement Parser::parseIfStatement(TreeBuilder& context) 951 template <typename LexerType> 952 template <class TreeBuilder> TreeStatement Parser<LexerType>::parseIfStatement(TreeBuilder& context) 922 953 { 923 954 ASSERT(match(IF)); … … 996 1027 } 997 1028 998 template <class TreeBuilder> TreeExpression Parser::parseExpression(TreeBuilder& context) 1029 template <typename LexerType> 1030 template <class TreeBuilder> TreeExpression Parser<LexerType>::parseExpression(TreeBuilder& context) 999 1031 { 1000 1032 failIfStackOverflow(); … … 1018 1050 } 1019 1051 1020 1021 template <typename TreeBuilder> TreeExpression Parser ::parseAssignmentExpression(TreeBuilder& context)1052 template <typename LexerType> 1053 template <typename TreeBuilder> TreeExpression Parser<LexerType>::parseAssignmentExpression(TreeBuilder& context) 1022 1054 { 1023 1055 failIfStackOverflow(); … … 1080 1112 } 1081 1113 1082 template <class TreeBuilder> TreeExpression Parser::parseConditionalExpression(TreeBuilder& context) 1114 template <typename LexerType> 1115 template <class TreeBuilder> TreeExpression Parser<LexerType>::parseConditionalExpression(TreeBuilder& context) 1083 1116 { 1084 1117 TreeExpression cond = parseBinaryExpression(context); … … 1102 1135 } 1103 1136 1104 int Parser::isBinaryOperator(JSTokenType token) 1137 template <typename LexerType> 1138 int Parser<LexerType>::isBinaryOperator(JSTokenType token) 1105 1139 { 1106 1140 if (m_allowsIn) … … 1109 1143 } 1110 1144 1111 template <class TreeBuilder> TreeExpression Parser::parseBinaryExpression(TreeBuilder& context) 1145 template <typename LexerType> 1146 template <class TreeBuilder> TreeExpression Parser<LexerType>::parseBinaryExpression(TreeBuilder& context) 1112 1147 { 1113 1148 … … 1153 1188 } 1154 1189 1155 1156 template <bool complete, class TreeBuilder> TreeProperty Parser ::parseProperty(TreeBuilder& context)1190 template <typename LexerType> 1191 template <bool complete, class TreeBuilder> TreeProperty Parser<LexerType>::parseProperty(TreeBuilder& context) 1157 1192 { 1158 1193 bool wasIdent = false; … … 1206 1241 } 1207 1242 1208 template <class TreeBuilder> TreeExpression Parser::parseObjectLiteral(TreeBuilder& context) 1243 template <typename LexerType> 1244 template <class TreeBuilder> TreeExpression Parser<LexerType>::parseObjectLiteral(TreeBuilder& context) 1209 1245 { 1210 1246 int startOffset = m_token.m_data.intValue; … … 1245 1281 } 1246 1282 1247 template <class TreeBuilder> TreeExpression Parser::parseStrictObjectLiteral(TreeBuilder& context) 1283 template <typename LexerType> 1284 template <class TreeBuilder> TreeExpression Parser<LexerType>::parseStrictObjectLiteral(TreeBuilder& context) 1248 1285 { 1249 1286 consumeOrFail(OPENBRACE); … … 1289 1326 } 1290 1327 1291 template <class TreeBuilder> TreeExpression Parser::parseArrayLiteral(TreeBuilder& context) 1328 template <typename LexerType> 1329 template <class TreeBuilder> TreeExpression Parser<LexerType>::parseArrayLiteral(TreeBuilder& context) 1292 1330 { 1293 1331 consumeOrFailWithFlags(OPENBRACKET, TreeBuilder::DontBuildStrings); … … 1331 1369 } 1332 1370 1333 template <class TreeBuilder> TreeExpression Parser::parsePrimaryExpression(TreeBuilder& context) 1371 template <typename LexerType> 1372 template <class TreeBuilder> TreeExpression Parser<LexerType>::parsePrimaryExpression(TreeBuilder& context) 1334 1373 { 1335 1374 failIfStackOverflow(); … … 1409 1448 } 1410 1449 1411 template <class TreeBuilder> TreeArguments Parser::parseArguments(TreeBuilder& context) 1450 template <typename LexerType> 1451 template <class TreeBuilder> TreeArguments Parser<LexerType>::parseArguments(TreeBuilder& context) 1412 1452 { 1413 1453 consumeOrFailWithFlags(OPENPAREN, TreeBuilder::DontBuildStrings); … … 1431 1471 } 1432 1472 1433 template <class TreeBuilder> TreeExpression Parser::parseMemberExpression(TreeBuilder& context) 1473 template <typename LexerType> 1474 template <class TreeBuilder> TreeExpression Parser<LexerType>::parseMemberExpression(TreeBuilder& context) 1434 1475 { 1435 1476 TreeExpression base = 0; … … 1511 1552 } 1512 1553 1513 template <class TreeBuilder> TreeExpression Parser::parseUnaryExpression(TreeBuilder& context) 1554 template <typename LexerType> 1555 template <class TreeBuilder> TreeExpression Parser<LexerType>::parseUnaryExpression(TreeBuilder& context) 1514 1556 { 1515 1557 typename TreeBuilder::UnaryExprContext unaryExprContext(context); … … 1624 1666 } 1625 1667 1668 // Instantiate the two flavors of Parser we need instead of putting most of this file in Parser.h 1669 template class Parser< Lexer<LChar> >; 1670 template class Parser< Lexer<UChar> >; 1671 1626 1672 } // namespace JSC
Note:
See TracChangeset
for help on using the changeset viewer.