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/objects-inl.h" | 7 #include "src/objects-inl.h" |
8 #include "src/parsing/parameter-initializer-rewriter.h" | 8 #include "src/parsing/parameter-initializer-rewriter.h" |
9 #include "src/parsing/parser.h" | 9 #include "src/parsing/parser.h" |
10 | 10 |
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
423 Variable* temp_var = nullptr; | 423 Variable* temp_var = nullptr; |
424 VisitObjectLiteral(node, &temp_var); | 424 VisitObjectLiteral(node, &temp_var); |
425 } | 425 } |
426 | 426 |
427 | 427 |
428 void Parser::PatternRewriter::VisitArrayLiteral(ArrayLiteral* node, | 428 void Parser::PatternRewriter::VisitArrayLiteral(ArrayLiteral* node, |
429 Variable** temp_var) { | 429 Variable** temp_var) { |
430 DCHECK(block_->ignore_completion_value()); | 430 DCHECK(block_->ignore_completion_value()); |
431 | 431 |
432 auto temp = *temp_var = CreateTempVar(current_value_); | 432 auto temp = *temp_var = CreateTempVar(current_value_); |
433 auto iterator = CreateTempVar(factory()->NewGetIterator( | 433 auto iterator = CreateTempVar( |
434 factory()->NewVariableProxy(temp), kNoSourcePosition)); | 434 factory()->NewGetIterator(factory()->NewVariableProxy(temp), |
| 435 IteratorType::kNormal, kNoSourcePosition)); |
435 auto done = | 436 auto done = |
436 CreateTempVar(factory()->NewBooleanLiteral(false, kNoSourcePosition)); | 437 CreateTempVar(factory()->NewBooleanLiteral(false, kNoSourcePosition)); |
437 auto result = CreateTempVar(); | 438 auto result = CreateTempVar(); |
438 auto v = CreateTempVar(); | 439 auto v = CreateTempVar(); |
439 auto completion = CreateTempVar(); | 440 auto completion = CreateTempVar(); |
440 auto nopos = kNoSourcePosition; | 441 auto nopos = kNoSourcePosition; |
441 | 442 |
442 // For the purpose of iterator finalization, we temporarily set block_ to a | 443 // For the purpose of iterator finalization, we temporarily set block_ to a |
443 // new block. In the main body of this function, we write to block_ (both | 444 // new block. In the main body of this function, we write to block_ (both |
444 // explicitly and implicitly via recursion). At the end of the function, we | 445 // explicitly and implicitly via recursion). At the end of the function, we |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 factory()->NewExpressionStatement( | 511 factory()->NewExpressionStatement( |
511 factory()->NewAssignment( | 512 factory()->NewAssignment( |
512 Token::ASSIGN, factory()->NewVariableProxy(done), | 513 Token::ASSIGN, factory()->NewVariableProxy(done), |
513 factory()->NewBooleanLiteral(true, nopos), nopos), | 514 factory()->NewBooleanLiteral(true, nopos), nopos), |
514 nopos), | 515 nopos), |
515 zone()); | 516 zone()); |
516 next_block->statements()->Add( | 517 next_block->statements()->Add( |
517 factory()->NewExpressionStatement( | 518 factory()->NewExpressionStatement( |
518 parser_->BuildIteratorNextResult( | 519 parser_->BuildIteratorNextResult( |
519 factory()->NewVariableProxy(iterator), result, | 520 factory()->NewVariableProxy(iterator), result, |
520 kNoSourcePosition), | 521 IteratorType::kNormal, kNoSourcePosition), |
521 kNoSourcePosition), | 522 kNoSourcePosition), |
522 zone()); | 523 zone()); |
523 next_block->statements()->Add(inner_if, zone()); | 524 next_block->statements()->Add(inner_if, zone()); |
524 | 525 |
525 if_not_done = factory()->NewIfStatement( | 526 if_not_done = factory()->NewIfStatement( |
526 factory()->NewUnaryOperation( | 527 factory()->NewUnaryOperation( |
527 Token::NOT, factory()->NewVariableProxy(done), kNoSourcePosition), | 528 Token::NOT, factory()->NewVariableProxy(done), kNoSourcePosition), |
528 next_block, factory()->NewEmptyStatement(kNoSourcePosition), | 529 next_block, factory()->NewEmptyStatement(kNoSourcePosition), |
529 kNoSourcePosition); | 530 kNoSourcePosition); |
530 } | 531 } |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
581 // done = true; | 582 // done = true; |
582 Statement* set_done = factory()->NewExpressionStatement( | 583 Statement* set_done = factory()->NewExpressionStatement( |
583 factory()->NewAssignment( | 584 factory()->NewAssignment( |
584 Token::ASSIGN, factory()->NewVariableProxy(done), | 585 Token::ASSIGN, factory()->NewVariableProxy(done), |
585 factory()->NewBooleanLiteral(true, nopos), nopos), | 586 factory()->NewBooleanLiteral(true, nopos), nopos), |
586 nopos); | 587 nopos); |
587 | 588 |
588 // result = IteratorNext(iterator); | 589 // result = IteratorNext(iterator); |
589 Statement* get_next = factory()->NewExpressionStatement( | 590 Statement* get_next = factory()->NewExpressionStatement( |
590 parser_->BuildIteratorNextResult(factory()->NewVariableProxy(iterator), | 591 parser_->BuildIteratorNextResult(factory()->NewVariableProxy(iterator), |
591 result, nopos), | 592 result, IteratorType::kNormal, nopos), |
592 nopos); | 593 nopos); |
593 | 594 |
594 // %AppendElement(array, result.value); | 595 // %AppendElement(array, result.value); |
595 Statement* append_element; | 596 Statement* append_element; |
596 { | 597 { |
597 auto args = new (zone()) ZoneList<Expression*>(2, zone()); | 598 auto args = new (zone()) ZoneList<Expression*>(2, zone()); |
598 args->Add(factory()->NewVariableProxy(array), zone()); | 599 args->Add(factory()->NewVariableProxy(array), zone()); |
599 args->Add(factory()->NewProperty( | 600 args->Add(factory()->NewProperty( |
600 factory()->NewVariableProxy(result), | 601 factory()->NewVariableProxy(result), |
601 factory()->NewStringLiteral( | 602 factory()->NewStringLiteral( |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
650 | 651 |
651 block_->statements()->Add(loop, zone()); | 652 block_->statements()->Add(loop, zone()); |
652 RecurseIntoSubpattern(spread->expression(), | 653 RecurseIntoSubpattern(spread->expression(), |
653 factory()->NewVariableProxy(array)); | 654 factory()->NewVariableProxy(array)); |
654 } | 655 } |
655 | 656 |
656 Expression* closing_condition = factory()->NewUnaryOperation( | 657 Expression* closing_condition = factory()->NewUnaryOperation( |
657 Token::NOT, factory()->NewVariableProxy(done), nopos); | 658 Token::NOT, factory()->NewVariableProxy(done), nopos); |
658 | 659 |
659 parser_->FinalizeIteratorUse(scope(), completion, closing_condition, iterator, | 660 parser_->FinalizeIteratorUse(scope(), completion, closing_condition, iterator, |
660 block_, target); | 661 block_, target, IteratorType::kNormal); |
661 block_ = target; | 662 block_ = target; |
662 } | 663 } |
663 | 664 |
664 | 665 |
665 void Parser::PatternRewriter::VisitArrayLiteral(ArrayLiteral* node) { | 666 void Parser::PatternRewriter::VisitArrayLiteral(ArrayLiteral* node) { |
666 Variable* temp_var = nullptr; | 667 Variable* temp_var = nullptr; |
667 VisitArrayLiteral(node, &temp_var); | 668 VisitArrayLiteral(node, &temp_var); |
668 } | 669 } |
669 | 670 |
670 | 671 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
758 NOT_A_PATTERN(TryFinallyStatement) | 759 NOT_A_PATTERN(TryFinallyStatement) |
759 NOT_A_PATTERN(UnaryOperation) | 760 NOT_A_PATTERN(UnaryOperation) |
760 NOT_A_PATTERN(VariableDeclaration) | 761 NOT_A_PATTERN(VariableDeclaration) |
761 NOT_A_PATTERN(WhileStatement) | 762 NOT_A_PATTERN(WhileStatement) |
762 NOT_A_PATTERN(WithStatement) | 763 NOT_A_PATTERN(WithStatement) |
763 NOT_A_PATTERN(Yield) | 764 NOT_A_PATTERN(Yield) |
764 | 765 |
765 #undef NOT_A_PATTERN | 766 #undef NOT_A_PATTERN |
766 } // namespace internal | 767 } // namespace internal |
767 } // namespace v8 | 768 } // namespace v8 |
OLD | NEW |