| 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_PARSER_H_ | 5 #ifndef V8_PARSER_H_ |
| 6 #define V8_PARSER_H_ | 6 #define V8_PARSER_H_ |
| 7 | 7 |
| 8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
| 9 #include "src/ast.h" | 9 #include "src/ast.h" |
| 10 #include "src/compiler.h" // TODO(titzer): remove this include dependency | 10 #include "src/compiler.h" // TODO(titzer): remove this include dependency |
| (...skipping 1009 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1020 Scanner::Location bindings_loc; | 1020 Scanner::Location bindings_loc; |
| 1021 }; | 1021 }; |
| 1022 | 1022 |
| 1023 class PatternRewriter : private AstVisitor { | 1023 class PatternRewriter : private AstVisitor { |
| 1024 public: | 1024 public: |
| 1025 static void DeclareAndInitializeVariables( | 1025 static void DeclareAndInitializeVariables( |
| 1026 Block* block, const DeclarationDescriptor* declaration_descriptor, | 1026 Block* block, const DeclarationDescriptor* declaration_descriptor, |
| 1027 const DeclarationParsingResult::Declaration* declaration, | 1027 const DeclarationParsingResult::Declaration* declaration, |
| 1028 ZoneList<const AstRawString*>* names, bool* ok); | 1028 ZoneList<const AstRawString*>* names, bool* ok); |
| 1029 | 1029 |
| 1030 static Variable* RewriteDestructuringAssignment(Parser* parser, |
| 1031 Block* block, |
| 1032 Expression* pattern, |
| 1033 Expression* value, |
| 1034 Variable* result, bool* ok); |
| 1035 |
| 1030 void set_initializer_position(int pos) { initializer_position_ = pos; } | 1036 void set_initializer_position(int pos) { initializer_position_ = pos; } |
| 1031 | 1037 |
| 1032 private: | 1038 private: |
| 1033 PatternRewriter() {} | 1039 PatternRewriter() {} |
| 1034 | 1040 |
| 1035 #define DECLARE_VISIT(type) void Visit##type(v8::internal::type* node) override; | 1041 #define DECLARE_VISIT(type) void Visit##type(v8::internal::type* node) override; |
| 1036 // Visiting functions for AST nodes make this an AstVisitor. | 1042 // Visiting functions for AST nodes make this an AstVisitor. |
| 1037 AST_NODE_LIST(DECLARE_VISIT) | 1043 AST_NODE_LIST(DECLARE_VISIT) |
| 1038 #undef DECLARE_VISIT | 1044 #undef DECLARE_VISIT |
| 1039 virtual void Visit(AstNode* node) override; | 1045 virtual void Visit(AstNode* node) override; |
| 1040 | 1046 |
| 1047 enum PatternContext { BINDING = 0, INITIALIZER, ASSIGNMENT }; |
| 1048 |
| 1049 PatternContext context() const { return context_; } |
| 1050 void set_context(PatternContext ctx) { context_ = ctx; } |
| 1051 |
| 1041 void RecurseIntoSubpattern(AstNode* pattern, Expression* value) { | 1052 void RecurseIntoSubpattern(AstNode* pattern, Expression* value) { |
| 1042 Expression* old_value = current_value_; | 1053 Expression* old_value = current_value_; |
| 1043 current_value_ = value; | 1054 current_value_ = value; |
| 1044 pattern->Accept(this); | 1055 pattern->Accept(this); |
| 1045 current_value_ = old_value; | 1056 current_value_ = old_value; |
| 1046 } | 1057 } |
| 1047 | 1058 |
| 1048 Variable* CreateTempVar(Expression* value = nullptr); | 1059 Variable* CreateTempVar(Expression* value = nullptr); |
| 1049 | 1060 |
| 1050 AstNodeFactory* factory() const { return descriptor_->parser->factory(); } | 1061 AstNodeFactory* factory() const { return parser_->factory(); } |
| 1062 Parser* parser() const { return parser_; } |
| 1063 Scope* parser_scope() const { return parser_->scope_; } |
| 1051 AstValueFactory* ast_value_factory() const { | 1064 AstValueFactory* ast_value_factory() const { |
| 1052 return descriptor_->parser->ast_value_factory(); | 1065 return parser_->ast_value_factory(); |
| 1053 } | 1066 } |
| 1054 bool inside_with() const { return descriptor_->parser->inside_with(); } | 1067 bool inside_with() const { return parser_->inside_with(); } |
| 1055 Zone* zone() const { return descriptor_->parser->zone(); } | 1068 Zone* zone() const { return parser_->zone(); } |
| 1056 | 1069 |
| 1070 Parser* parser_; |
| 1071 PatternContext context_; |
| 1057 Expression* pattern_; | 1072 Expression* pattern_; |
| 1058 int initializer_position_; | 1073 int initializer_position_; |
| 1059 Block* block_; | 1074 Block* block_; |
| 1060 const DeclarationDescriptor* descriptor_; | 1075 const DeclarationDescriptor* descriptor_; |
| 1061 ZoneList<const AstRawString*>* names_; | 1076 ZoneList<const AstRawString*>* names_; |
| 1062 Expression* current_value_; | 1077 Expression* current_value_; |
| 1063 bool* ok_; | 1078 bool* ok_; |
| 1079 Variable* rhs_; |
| 1064 }; | 1080 }; |
| 1065 | 1081 |
| 1066 | 1082 |
| 1067 void ParseVariableDeclarations(VariableDeclarationContext var_context, | 1083 void ParseVariableDeclarations(VariableDeclarationContext var_context, |
| 1068 DeclarationParsingResult* parsing_result, | 1084 DeclarationParsingResult* parsing_result, |
| 1069 bool* ok); | 1085 bool* ok); |
| 1070 Statement* ParseExpressionOrLabelledStatement( | 1086 Statement* ParseExpressionOrLabelledStatement( |
| 1071 ZoneList<const AstRawString*>* labels, bool* ok); | 1087 ZoneList<const AstRawString*>* labels, bool* ok); |
| 1072 IfStatement* ParseIfStatement(ZoneList<const AstRawString*>* labels, | 1088 IfStatement* ParseIfStatement(ZoneList<const AstRawString*>* labels, |
| 1073 bool* ok); | 1089 bool* ok); |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1397 inline Expression* ParserTraits::RewriteDestructuringAssignment( | 1413 inline Expression* ParserTraits::RewriteDestructuringAssignment( |
| 1398 Expression* expr) { | 1414 Expression* expr) { |
| 1399 return parser_->DesugarDestructuringAssignment(expr); | 1415 return parser_->DesugarDestructuringAssignment(expr); |
| 1400 } | 1416 } |
| 1401 | 1417 |
| 1402 | 1418 |
| 1403 } // namespace internal | 1419 } // namespace internal |
| 1404 } // namespace v8 | 1420 } // namespace v8 |
| 1405 | 1421 |
| 1406 #endif // V8_PARSER_H_ | 1422 #endif // V8_PARSER_H_ |
| OLD | NEW |