| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 #include "src/ast/ast.h" | 5 #include "src/ast/ast.h" |
| 6 #include "src/messages.h" | 6 #include "src/messages.h" |
| 7 #include "src/parsing/parameter-initializer-rewriter.h" | 7 #include "src/parsing/parameter-initializer-rewriter.h" |
| 8 #include "src/parsing/parser.h" | 8 #include "src/parsing/parser.h" |
| 9 | 9 |
| 10 namespace v8 { | 10 namespace v8 { |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 | 321 |
| 322 | 322 |
| 323 void Parser::PatternRewriter::VisitRewritableExpression( | 323 void Parser::PatternRewriter::VisitRewritableExpression( |
| 324 RewritableExpression* node) { | 324 RewritableExpression* node) { |
| 325 // If this is not a destructuring assignment... | 325 // If this is not a destructuring assignment... |
| 326 if (!IsAssignmentContext() || !node->expression()->IsAssignment()) { | 326 if (!IsAssignmentContext() || !node->expression()->IsAssignment()) { |
| 327 // Mark the node as rewritten to prevent redundant rewriting, and | 327 // Mark the node as rewritten to prevent redundant rewriting, and |
| 328 // perform BindingPattern rewriting | 328 // perform BindingPattern rewriting |
| 329 DCHECK(!node->is_rewritten()); | 329 DCHECK(!node->is_rewritten()); |
| 330 node->Rewrite(node->expression()); | 330 node->Rewrite(node->expression()); |
| 331 return node->expression()->Accept(this); | 331 return Visit(node->expression()); |
| 332 } | 332 } |
| 333 | 333 |
| 334 if (node->is_rewritten()) return; | 334 if (node->is_rewritten()) return; |
| 335 DCHECK(IsAssignmentContext()); | 335 DCHECK(IsAssignmentContext()); |
| 336 Assignment* assign = node->expression()->AsAssignment(); | 336 Assignment* assign = node->expression()->AsAssignment(); |
| 337 DCHECK_NOT_NULL(assign); | 337 DCHECK_NOT_NULL(assign); |
| 338 DCHECK_EQ(Token::ASSIGN, assign->op()); | 338 DCHECK_EQ(Token::ASSIGN, assign->op()); |
| 339 | 339 |
| 340 auto initializer = assign->value(); | 340 auto initializer = assign->value(); |
| 341 auto value = initializer; | 341 auto value = initializer; |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 723 Assignment* assignment = | 723 Assignment* assignment = |
| 724 factory()->NewAssignment(Token::ASSIGN, node, value, node->position()); | 724 factory()->NewAssignment(Token::ASSIGN, node, value, node->position()); |
| 725 | 725 |
| 726 block_->statements()->Add( | 726 block_->statements()->Add( |
| 727 factory()->NewExpressionStatement(assignment, kNoSourcePosition), zone()); | 727 factory()->NewExpressionStatement(assignment, kNoSourcePosition), zone()); |
| 728 } | 728 } |
| 729 | 729 |
| 730 | 730 |
| 731 // =============== UNREACHABLE ============================= | 731 // =============== UNREACHABLE ============================= |
| 732 | 732 |
| 733 void Parser::PatternRewriter::Visit(AstNode* node) { UNREACHABLE(); } | |
| 734 | |
| 735 #define NOT_A_PATTERN(Node) \ | 733 #define NOT_A_PATTERN(Node) \ |
| 736 void Parser::PatternRewriter::Visit##Node(v8::internal::Node*) { \ | 734 void Parser::PatternRewriter::Visit##Node(v8::internal::Node*) { \ |
| 737 UNREACHABLE(); \ | 735 UNREACHABLE(); \ |
| 738 } | 736 } |
| 739 | 737 |
| 740 NOT_A_PATTERN(BinaryOperation) | 738 NOT_A_PATTERN(BinaryOperation) |
| 741 NOT_A_PATTERN(Block) | 739 NOT_A_PATTERN(Block) |
| 742 NOT_A_PATTERN(BreakStatement) | 740 NOT_A_PATTERN(BreakStatement) |
| 743 NOT_A_PATTERN(Call) | 741 NOT_A_PATTERN(Call) |
| 744 NOT_A_PATTERN(CallNew) | 742 NOT_A_PATTERN(CallNew) |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 777 NOT_A_PATTERN(TryFinallyStatement) | 775 NOT_A_PATTERN(TryFinallyStatement) |
| 778 NOT_A_PATTERN(UnaryOperation) | 776 NOT_A_PATTERN(UnaryOperation) |
| 779 NOT_A_PATTERN(VariableDeclaration) | 777 NOT_A_PATTERN(VariableDeclaration) |
| 780 NOT_A_PATTERN(WhileStatement) | 778 NOT_A_PATTERN(WhileStatement) |
| 781 NOT_A_PATTERN(WithStatement) | 779 NOT_A_PATTERN(WithStatement) |
| 782 NOT_A_PATTERN(Yield) | 780 NOT_A_PATTERN(Yield) |
| 783 | 781 |
| 784 #undef NOT_A_PATTERN | 782 #undef NOT_A_PATTERN |
| 785 } // namespace internal | 783 } // namespace internal |
| 786 } // namespace v8 | 784 } // namespace v8 |
| OLD | NEW |