| 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 #include "src/parsing/parser.h" | 5 #include "src/parsing/parser.h" |
| 6 | 6 |
| 7 #include "src/api.h" | 7 #include "src/api.h" |
| 8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" |
| 9 #include "src/ast/ast-expression-rewriter.h" | 9 #include "src/ast/ast-expression-rewriter.h" |
| 10 #include "src/ast/ast-expression-visitor.h" | 10 #include "src/ast/ast-expression-visitor.h" |
| (...skipping 4761 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4772 Expression* allocation = BuildCreateJSGeneratorObject(pos, kind); | 4772 Expression* allocation = BuildCreateJSGeneratorObject(pos, kind); |
| 4773 VariableProxy* init_proxy = factory()->NewVariableProxy( | 4773 VariableProxy* init_proxy = factory()->NewVariableProxy( |
| 4774 function_state_->generator_object_variable()); | 4774 function_state_->generator_object_variable()); |
| 4775 Assignment* assignment = factory()->NewAssignment( | 4775 Assignment* assignment = factory()->NewAssignment( |
| 4776 Token::INIT, init_proxy, allocation, kNoSourcePosition); | 4776 Token::INIT, init_proxy, allocation, kNoSourcePosition); |
| 4777 VariableProxy* get_proxy = factory()->NewVariableProxy( | 4777 VariableProxy* get_proxy = factory()->NewVariableProxy( |
| 4778 function_state_->generator_object_variable()); | 4778 function_state_->generator_object_variable()); |
| 4779 // The position of the yield is important for reporting the exception | 4779 // The position of the yield is important for reporting the exception |
| 4780 // caused by calling the .throw method on a generator suspended at the | 4780 // caused by calling the .throw method on a generator suspended at the |
| 4781 // initial yield (i.e. right after generator instantiation). | 4781 // initial yield (i.e. right after generator instantiation). |
| 4782 Yield* yield = factory()->NewYield(get_proxy, assignment, | 4782 Yield* yield = |
| 4783 scope_->start_position()); | 4783 factory()->NewYield(get_proxy, assignment, scope_->start_position(), |
| 4784 Yield::kOnExceptionThrow); |
| 4784 try_block->statements()->Add( | 4785 try_block->statements()->Add( |
| 4785 factory()->NewExpressionStatement(yield, kNoSourcePosition), | 4786 factory()->NewExpressionStatement(yield, kNoSourcePosition), |
| 4786 zone()); | 4787 zone()); |
| 4787 } | 4788 } |
| 4788 | 4789 |
| 4789 ParseStatementList(try_block->statements(), Token::RBRACE, CHECK_OK); | 4790 ParseStatementList(try_block->statements(), Token::RBRACE, CHECK_OK); |
| 4790 | 4791 |
| 4791 Statement* final_return = factory()->NewReturnStatement( | 4792 Statement* final_return = factory()->NewReturnStatement( |
| 4792 BuildIteratorResult(nullptr, true), kNoSourcePosition); | 4793 BuildIteratorResult(nullptr, true), kNoSourcePosition); |
| 4793 try_block->statements()->Add(final_return, zone()); | 4794 try_block->statements()->Add(final_return, zone()); |
| (...skipping 932 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5726 Expression* async_function_await = parser_->factory()->NewCallRuntime( | 5727 Expression* async_function_await = parser_->factory()->NewCallRuntime( |
| 5727 Context::ASYNC_FUNCTION_AWAIT_INDEX, async_function_await_args, nopos); | 5728 Context::ASYNC_FUNCTION_AWAIT_INDEX, async_function_await_args, nopos); |
| 5728 // Wrap await to provide a break location between value evaluation and yield. | 5729 // Wrap await to provide a break location between value evaluation and yield. |
| 5729 Expression* await_assignment = factory->NewAssignment( | 5730 Expression* await_assignment = factory->NewAssignment( |
| 5730 Token::ASSIGN, temp_proxy, async_function_await, nopos); | 5731 Token::ASSIGN, temp_proxy, async_function_await, nopos); |
| 5731 do_block->statements()->Add( | 5732 do_block->statements()->Add( |
| 5732 factory->NewExpressionStatement(await_assignment, await_pos), zone()); | 5733 factory->NewExpressionStatement(await_assignment, await_pos), zone()); |
| 5733 Expression* do_expr = factory->NewDoExpression(do_block, temp_var, nopos); | 5734 Expression* do_expr = factory->NewDoExpression(do_block, temp_var, nopos); |
| 5734 | 5735 |
| 5735 generator_object = factory->NewVariableProxy(generator_object_variable); | 5736 generator_object = factory->NewVariableProxy(generator_object_variable); |
| 5736 return factory->NewYield(generator_object, do_expr, nopos); | 5737 return factory->NewYield(generator_object, do_expr, nopos, |
| 5738 Yield::kOnExceptionRethrow); |
| 5737 } | 5739 } |
| 5738 | 5740 |
| 5739 ZoneList<Expression*>* ParserTraits::GetNonPatternList() const { | 5741 ZoneList<Expression*>* ParserTraits::GetNonPatternList() const { |
| 5740 return parser_->function_state_->non_patterns_to_rewrite(); | 5742 return parser_->function_state_->non_patterns_to_rewrite(); |
| 5741 } | 5743 } |
| 5742 | 5744 |
| 5743 | 5745 |
| 5744 ZoneList<typename ParserTraits::Type::ExpressionClassifier::Error>* | 5746 ZoneList<typename ParserTraits::Type::ExpressionClassifier::Error>* |
| 5745 ParserTraits::GetReportedErrorList() const { | 5747 ParserTraits::GetReportedErrorList() const { |
| 5746 return parser_->function_state_->GetReportedErrorList(); | 5748 return parser_->function_state_->GetReportedErrorList(); |
| (...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6339 factory->NewSmiLiteral(JSGeneratorObject::kReturn, nopos); | 6341 factory->NewSmiLiteral(JSGeneratorObject::kReturn, nopos); |
| 6340 Expression* assignment = | 6342 Expression* assignment = |
| 6341 factory->NewAssignment(Token::ASSIGN, mode_proxy, kreturn, nopos); | 6343 factory->NewAssignment(Token::ASSIGN, mode_proxy, kreturn, nopos); |
| 6342 set_mode_return = factory->NewExpressionStatement(assignment, nopos); | 6344 set_mode_return = factory->NewExpressionStatement(assignment, nopos); |
| 6343 } | 6345 } |
| 6344 | 6346 |
| 6345 // Yield(output); | 6347 // Yield(output); |
| 6346 Statement* yield_output; | 6348 Statement* yield_output; |
| 6347 { | 6349 { |
| 6348 Expression* output_proxy = factory->NewVariableProxy(var_output); | 6350 Expression* output_proxy = factory->NewVariableProxy(var_output); |
| 6349 Yield* yield = factory->NewYield(generator, output_proxy, nopos); | 6351 Yield* yield = factory->NewYield(generator, output_proxy, nopos, |
| 6352 Yield::kOnExceptionThrow); |
| 6350 yield_output = factory->NewExpressionStatement(yield, nopos); | 6353 yield_output = factory->NewExpressionStatement(yield, nopos); |
| 6351 } | 6354 } |
| 6352 | 6355 |
| 6353 | 6356 |
| 6354 // mode = kNext; | 6357 // mode = kNext; |
| 6355 Statement* set_mode_next; | 6358 Statement* set_mode_next; |
| 6356 { | 6359 { |
| 6357 Expression* mode_proxy = factory->NewVariableProxy(var_mode); | 6360 Expression* mode_proxy = factory->NewVariableProxy(var_mode); |
| 6358 Expression* knext = factory->NewSmiLiteral(JSGeneratorObject::kNext, nopos); | 6361 Expression* knext = factory->NewSmiLiteral(JSGeneratorObject::kNext, nopos); |
| 6359 Expression* assignment = | 6362 Expression* assignment = |
| (...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6992 | 6995 |
| 6993 #ifdef DEBUG | 6996 #ifdef DEBUG |
| 6994 void Parser::Print(AstNode* node) { | 6997 void Parser::Print(AstNode* node) { |
| 6995 ast_value_factory()->Internalize(Isolate::Current()); | 6998 ast_value_factory()->Internalize(Isolate::Current()); |
| 6996 node->Print(Isolate::Current()); | 6999 node->Print(Isolate::Current()); |
| 6997 } | 7000 } |
| 6998 #endif // DEBUG | 7001 #endif // DEBUG |
| 6999 | 7002 |
| 7000 } // namespace internal | 7003 } // namespace internal |
| 7001 } // namespace v8 | 7004 } // namespace v8 |
| OLD | NEW |