| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_PARSING_PREPARSER_H | 5 #ifndef V8_PARSING_PREPARSER_H |
| 6 #define V8_PARSING_PREPARSER_H | 6 #define V8_PARSING_PREPARSER_H |
| 7 | 7 |
| 8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" |
| 9 #include "src/ast/scopes.h" | 9 #include "src/ast/scopes.h" |
| 10 #include "src/parsing/parser-base.h" | 10 #include "src/parsing/parser-base.h" |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 | 116 |
| 117 explicit PreParserIdentifier(Type type) : type_(type), string_(nullptr) {} | 117 explicit PreParserIdentifier(Type type) : type_(type), string_(nullptr) {} |
| 118 Type type_; | 118 Type type_; |
| 119 // Only non-nullptr when PreParser.track_unresolved_variables_ is true. | 119 // Only non-nullptr when PreParser.track_unresolved_variables_ is true. |
| 120 const AstRawString* string_; | 120 const AstRawString* string_; |
| 121 friend class PreParserExpression; | 121 friend class PreParserExpression; |
| 122 friend class PreParser; | 122 friend class PreParser; |
| 123 friend class PreParserFactory; | 123 friend class PreParserFactory; |
| 124 }; | 124 }; |
| 125 | 125 |
| 126 | 126 class PreParserStatement; |
| 127 class PreParserExpression { | 127 class PreParserExpression { |
| 128 public: | 128 public: |
| 129 PreParserExpression() | 129 PreParserExpression() |
| 130 : code_(TypeField::encode(kEmpty)), variables_(nullptr) {} | 130 : code_(TypeField::encode(kEmpty)), variables_(nullptr) {} |
| 131 | 131 |
| 132 static PreParserExpression Empty() { return PreParserExpression(); } | 132 static PreParserExpression Empty() { return PreParserExpression(); } |
| 133 | 133 |
| 134 static PreParserExpression Default( | 134 static PreParserExpression Default( |
| 135 ZoneList<VariableProxy*>* variables = nullptr) { | 135 ZoneList<VariableProxy*>* variables = nullptr) { |
| 136 return PreParserExpression(TypeField::encode(kExpression), variables); | 136 return PreParserExpression(TypeField::encode(kExpression), variables); |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 // and PreParser. | 330 // and PreParser. |
| 331 PreParserExpression* operator->() { return this; } | 331 PreParserExpression* operator->() { return this; } |
| 332 | 332 |
| 333 // More dummy implementations of things PreParser doesn't need to track: | 333 // More dummy implementations of things PreParser doesn't need to track: |
| 334 void set_index(int index) {} // For YieldExpressions | 334 void set_index(int index) {} // For YieldExpressions |
| 335 void SetShouldEagerCompile() {} | 335 void SetShouldEagerCompile() {} |
| 336 void set_should_be_used_once_hint() {} | 336 void set_should_be_used_once_hint() {} |
| 337 | 337 |
| 338 int position() const { return kNoSourcePosition; } | 338 int position() const { return kNoSourcePosition; } |
| 339 void set_function_token_position(int position) {} | 339 void set_function_token_position(int position) {} |
| 340 void set_parameter_init_block(PreParserStatement block); |
| 340 | 341 |
| 341 private: | 342 private: |
| 342 enum Type { | 343 enum Type { |
| 343 kEmpty, | 344 kEmpty, |
| 344 kExpression, | 345 kExpression, |
| 345 kIdentifierExpression, | 346 kIdentifierExpression, |
| 346 kStringLiteralExpression, | 347 kStringLiteralExpression, |
| 347 kSpreadExpression, | 348 kSpreadExpression, |
| 348 kObjectLiteralExpression, | 349 kObjectLiteralExpression, |
| 349 kArrayLiteralExpression | 350 kArrayLiteralExpression |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 527 kJumpStatement, | 528 kJumpStatement, |
| 528 kStringLiteralExpressionStatement, | 529 kStringLiteralExpressionStatement, |
| 529 kUseStrictExpressionStatement, | 530 kUseStrictExpressionStatement, |
| 530 kUseAsmExpressionStatement, | 531 kUseAsmExpressionStatement, |
| 531 }; | 532 }; |
| 532 | 533 |
| 533 explicit PreParserStatement(Type code) : code_(code) {} | 534 explicit PreParserStatement(Type code) : code_(code) {} |
| 534 Type code_; | 535 Type code_; |
| 535 }; | 536 }; |
| 536 | 537 |
| 538 V8_INLINE void PreParserExpression::set_parameter_init_block( |
| 539 PreParserStatement block) {} |
| 537 | 540 |
| 538 class PreParserFactory { | 541 class PreParserFactory { |
| 539 public: | 542 public: |
| 540 explicit PreParserFactory(AstValueFactory* ast_value_factory) | 543 explicit PreParserFactory(AstValueFactory* ast_value_factory) |
| 541 : ast_value_factory_(ast_value_factory), | 544 : ast_value_factory_(ast_value_factory), |
| 542 zone_(ast_value_factory->zone()) {} | 545 zone_(ast_value_factory->zone()) {} |
| 543 | 546 |
| 544 void set_zone(Zone* zone) { zone_ = zone; } | 547 void set_zone(Zone* zone) { zone_ = zone; } |
| 545 | 548 |
| 546 PreParserExpression NewStringLiteral(PreParserIdentifier identifier, | 549 PreParserExpression NewStringLiteral(PreParserIdentifier identifier, |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 626 return expression; | 629 return expression; |
| 627 } | 630 } |
| 628 PreParserExpression NewAssignment(Token::Value op, | 631 PreParserExpression NewAssignment(Token::Value op, |
| 629 PreParserExpression left, | 632 PreParserExpression left, |
| 630 PreParserExpression right, | 633 PreParserExpression right, |
| 631 int pos) { | 634 int pos) { |
| 632 // Identifiers need to be tracked since this might be a parameter with a | 635 // Identifiers need to be tracked since this might be a parameter with a |
| 633 // default value inside an arrow function parameter list. | 636 // default value inside an arrow function parameter list. |
| 634 return PreParserExpression::Assignment(left.variables_); | 637 return PreParserExpression::Assignment(left.variables_); |
| 635 } | 638 } |
| 636 PreParserExpression NewYield(PreParserExpression generator_object, | 639 PreParserExpression NewYield(PreParserExpression expression, int pos, |
| 637 PreParserExpression expression, int pos, | 640 Yield::OnException on_exception, |
| 638 Yield::OnException on_exception) { | 641 Yield::YieldType type) { |
| 639 return PreParserExpression::Default(); | 642 return PreParserExpression::Default(); |
| 640 } | 643 } |
| 641 PreParserExpression NewConditional(PreParserExpression condition, | 644 PreParserExpression NewConditional(PreParserExpression condition, |
| 642 PreParserExpression then_expression, | 645 PreParserExpression then_expression, |
| 643 PreParserExpression else_expression, | 646 PreParserExpression else_expression, |
| 644 int pos) { | 647 int pos) { |
| 645 return PreParserExpression::Default(); | 648 return PreParserExpression::Default(); |
| 646 } | 649 } |
| 647 PreParserExpression NewCountOperation(Token::Value op, | 650 PreParserExpression NewCountOperation(Token::Value op, |
| 648 bool is_prefix, | 651 bool is_prefix, |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1002 V8_INLINE PreParserExpression | 1005 V8_INLINE PreParserExpression |
| 1003 RewriteAwaitExpression(PreParserExpression value, int pos) { | 1006 RewriteAwaitExpression(PreParserExpression value, int pos) { |
| 1004 return value; | 1007 return value; |
| 1005 } | 1008 } |
| 1006 V8_INLINE void PrepareAsyncFunctionBody(PreParserStatementList body, | 1009 V8_INLINE void PrepareAsyncFunctionBody(PreParserStatementList body, |
| 1007 FunctionKind kind, int pos) {} | 1010 FunctionKind kind, int pos) {} |
| 1008 V8_INLINE void RewriteAsyncFunctionBody(PreParserStatementList body, | 1011 V8_INLINE void RewriteAsyncFunctionBody(PreParserStatementList body, |
| 1009 PreParserStatement block, | 1012 PreParserStatement block, |
| 1010 PreParserExpression return_value, | 1013 PreParserExpression return_value, |
| 1011 bool* ok) {} | 1014 bool* ok) {} |
| 1012 V8_INLINE PreParserExpression RewriteYieldStar(PreParserExpression generator, | 1015 V8_INLINE PreParserExpression RewriteYieldStar(PreParserExpression expression, |
| 1013 PreParserExpression expression, | |
| 1014 int pos) { | 1016 int pos) { |
| 1015 return PreParserExpression::Default(); | 1017 return PreParserExpression::Default(); |
| 1016 } | 1018 } |
| 1017 V8_INLINE void RewriteNonPattern(bool* ok) { ValidateExpression(ok); } | 1019 V8_INLINE void RewriteNonPattern(bool* ok) { ValidateExpression(ok); } |
| 1018 | 1020 |
| 1019 void DeclareAndInitializeVariables( | 1021 void DeclareAndInitializeVariables( |
| 1020 PreParserStatement block, | 1022 PreParserStatement block, |
| 1021 const DeclarationDescriptor* declaration_descriptor, | 1023 const DeclarationDescriptor* declaration_descriptor, |
| 1022 const DeclarationParsingResult::Declaration* declaration, | 1024 const DeclarationParsingResult::Declaration* declaration, |
| 1023 ZoneList<const AstRawString*>* names, bool* ok); | 1025 ZoneList<const AstRawString*>* names, bool* ok); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1066 V8_INLINE PreParserStatement RewriteTryStatement( | 1068 V8_INLINE PreParserStatement RewriteTryStatement( |
| 1067 PreParserStatement try_block, PreParserStatement catch_block, | 1069 PreParserStatement try_block, PreParserStatement catch_block, |
| 1068 PreParserStatement finally_block, const CatchInfo& catch_info, int pos) { | 1070 PreParserStatement finally_block, const CatchInfo& catch_info, int pos) { |
| 1069 return PreParserStatement::Default(); | 1071 return PreParserStatement::Default(); |
| 1070 } | 1072 } |
| 1071 | 1073 |
| 1072 V8_INLINE void ParseAndRewriteGeneratorFunctionBody( | 1074 V8_INLINE void ParseAndRewriteGeneratorFunctionBody( |
| 1073 int pos, FunctionKind kind, PreParserStatementList body, bool* ok) { | 1075 int pos, FunctionKind kind, PreParserStatementList body, bool* ok) { |
| 1074 ParseStatementList(body, Token::RBRACE, ok); | 1076 ParseStatementList(body, Token::RBRACE, ok); |
| 1075 } | 1077 } |
| 1076 V8_INLINE void CreateFunctionNameAssignment( | 1078 V8_INLINE void CreateFunctionNameVariable( |
| 1077 PreParserIdentifier function_name, int pos, | 1079 PreParserIdentifier function_name, int pos, |
| 1078 FunctionLiteral::FunctionType function_type, | 1080 FunctionLiteral::FunctionType function_type, |
| 1079 DeclarationScope* function_scope, PreParserStatementList result, | 1081 DeclarationScope* function_scope) {} |
| 1080 int index) {} | |
| 1081 | 1082 |
| 1082 V8_INLINE PreParserExpression RewriteDoExpression(PreParserStatement body, | 1083 V8_INLINE PreParserExpression RewriteDoExpression(PreParserStatement body, |
| 1083 int pos, bool* ok) { | 1084 int pos, bool* ok) { |
| 1084 return PreParserExpression::Default(); | 1085 return PreParserExpression::Default(); |
| 1085 } | 1086 } |
| 1086 | 1087 |
| 1087 // TODO(nikolaos): The preparser currently does not keep track of labels | 1088 // TODO(nikolaos): The preparser currently does not keep track of labels |
| 1088 // and targets. | 1089 // and targets. |
| 1089 V8_INLINE PreParserStatement LookupBreakTarget(PreParserIdentifier label, | 1090 V8_INLINE PreParserStatement LookupBreakTarget(PreParserIdentifier label, |
| 1090 bool* ok) { | 1091 bool* ok) { |
| (...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1524 NewV8Intrinsic(PreParserIdentifier name, PreParserExpressionList arguments, | 1525 NewV8Intrinsic(PreParserIdentifier name, PreParserExpressionList arguments, |
| 1525 int pos, bool* ok) { | 1526 int pos, bool* ok) { |
| 1526 return PreParserExpression::Default(); | 1527 return PreParserExpression::Default(); |
| 1527 } | 1528 } |
| 1528 | 1529 |
| 1529 V8_INLINE PreParserStatement NewThrowStatement(PreParserExpression exception, | 1530 V8_INLINE PreParserStatement NewThrowStatement(PreParserExpression exception, |
| 1530 int pos) { | 1531 int pos) { |
| 1531 return PreParserStatement::Jump(); | 1532 return PreParserStatement::Jump(); |
| 1532 } | 1533 } |
| 1533 | 1534 |
| 1534 V8_INLINE void AddParameterInitializationBlock( | |
| 1535 const PreParserFormalParameters& parameters, PreParserStatementList body, | |
| 1536 bool is_async, bool* ok) {} | |
| 1537 | |
| 1538 V8_INLINE void AddFormalParameter(PreParserFormalParameters* parameters, | 1535 V8_INLINE void AddFormalParameter(PreParserFormalParameters* parameters, |
| 1539 PreParserExpression pattern, | 1536 PreParserExpression pattern, |
| 1540 PreParserExpression initializer, | 1537 PreParserExpression initializer, |
| 1541 int initializer_end_position, | 1538 int initializer_end_position, |
| 1542 bool is_rest) { | 1539 bool is_rest) { |
| 1543 if (track_unresolved_variables_) { | 1540 if (track_unresolved_variables_) { |
| 1544 DCHECK(FLAG_lazy_inner_functions); | 1541 DCHECK(FLAG_lazy_inner_functions); |
| 1545 parameters->params.Add(new (zone()) | 1542 parameters->params.Add(new (zone()) |
| 1546 PreParserFormalParameters::Parameter(pattern)); | 1543 PreParserFormalParameters::Parameter(pattern)); |
| 1547 } | 1544 } |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1651 function_state_->NextMaterializedLiteralIndex(); | 1648 function_state_->NextMaterializedLiteralIndex(); |
| 1652 function_state_->NextMaterializedLiteralIndex(); | 1649 function_state_->NextMaterializedLiteralIndex(); |
| 1653 } | 1650 } |
| 1654 return EmptyExpression(); | 1651 return EmptyExpression(); |
| 1655 } | 1652 } |
| 1656 | 1653 |
| 1657 } // namespace internal | 1654 } // namespace internal |
| 1658 } // namespace v8 | 1655 } // namespace v8 |
| 1659 | 1656 |
| 1660 #endif // V8_PARSING_PREPARSER_H | 1657 #endif // V8_PARSING_PREPARSER_H |
| OLD | NEW |