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 5767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5778 Token::ASSIGN, input_proxy, factory->NewUndefinedLiteral(nopos), nopos); | 5778 Token::ASSIGN, input_proxy, factory->NewUndefinedLiteral(nopos), nopos); |
5779 initialize_input = factory->NewExpressionStatement(assignment, nopos); | 5779 initialize_input = factory->NewExpressionStatement(assignment, nopos); |
5780 } | 5780 } |
5781 | 5781 |
5782 | 5782 |
5783 // let mode = kNext; | 5783 // let mode = kNext; |
5784 Variable* var_mode = scope->NewTemporary(avfactory->empty_string()); | 5784 Variable* var_mode = scope->NewTemporary(avfactory->empty_string()); |
5785 Statement* initialize_mode; | 5785 Statement* initialize_mode; |
5786 { | 5786 { |
5787 Expression* mode_proxy = factory->NewVariableProxy(var_mode); | 5787 Expression* mode_proxy = factory->NewVariableProxy(var_mode); |
5788 Expression* knext = factory->NewSmiLiteral(JSGeneratorObject::NEXT, nopos); | 5788 Expression* knext = factory->NewSmiLiteral(JSGeneratorObject::kNext, nopos); |
5789 Expression* assignment = | 5789 Expression* assignment = |
5790 factory->NewAssignment(Token::ASSIGN, mode_proxy, knext, nopos); | 5790 factory->NewAssignment(Token::ASSIGN, mode_proxy, knext, nopos); |
5791 initialize_mode = factory->NewExpressionStatement(assignment, nopos); | 5791 initialize_mode = factory->NewExpressionStatement(assignment, nopos); |
5792 } | 5792 } |
5793 | 5793 |
5794 | 5794 |
5795 // let output = undefined; | 5795 // let output = undefined; |
5796 Variable* var_output = scope->NewTemporary(avfactory->empty_string()); | 5796 Variable* var_output = scope->NewTemporary(avfactory->empty_string()); |
5797 Statement* initialize_output; | 5797 Statement* initialize_output; |
5798 { | 5798 { |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5976 if_done = factory->NewIfStatement( | 5976 if_done = factory->NewIfStatement( |
5977 property, break_loop, factory->NewEmptyStatement(nopos), nopos); | 5977 property, break_loop, factory->NewEmptyStatement(nopos), nopos); |
5978 } | 5978 } |
5979 | 5979 |
5980 | 5980 |
5981 // mode = kReturn; | 5981 // mode = kReturn; |
5982 Statement* set_mode_return; | 5982 Statement* set_mode_return; |
5983 { | 5983 { |
5984 Expression* mode_proxy = factory->NewVariableProxy(var_mode); | 5984 Expression* mode_proxy = factory->NewVariableProxy(var_mode); |
5985 Expression* kreturn = | 5985 Expression* kreturn = |
5986 factory->NewSmiLiteral(JSGeneratorObject::RETURN, nopos); | 5986 factory->NewSmiLiteral(JSGeneratorObject::kReturn, nopos); |
5987 Expression* assignment = | 5987 Expression* assignment = |
5988 factory->NewAssignment(Token::ASSIGN, mode_proxy, kreturn, nopos); | 5988 factory->NewAssignment(Token::ASSIGN, mode_proxy, kreturn, nopos); |
5989 set_mode_return = factory->NewExpressionStatement(assignment, nopos); | 5989 set_mode_return = factory->NewExpressionStatement(assignment, nopos); |
5990 } | 5990 } |
5991 | 5991 |
5992 // Yield(output); | 5992 // Yield(output); |
5993 Statement* yield_output; | 5993 Statement* yield_output; |
5994 { | 5994 { |
5995 Expression* output_proxy = factory->NewVariableProxy(var_output); | 5995 Expression* output_proxy = factory->NewVariableProxy(var_output); |
5996 Yield* yield = factory->NewYield(generator, output_proxy, nopos); | 5996 Yield* yield = factory->NewYield(generator, output_proxy, nopos); |
5997 yield_output = factory->NewExpressionStatement(yield, nopos); | 5997 yield_output = factory->NewExpressionStatement(yield, nopos); |
5998 } | 5998 } |
5999 | 5999 |
6000 | 6000 |
6001 // mode = kNext; | 6001 // mode = kNext; |
6002 Statement* set_mode_next; | 6002 Statement* set_mode_next; |
6003 { | 6003 { |
6004 Expression* mode_proxy = factory->NewVariableProxy(var_mode); | 6004 Expression* mode_proxy = factory->NewVariableProxy(var_mode); |
6005 Expression* knext = factory->NewSmiLiteral(JSGeneratorObject::NEXT, nopos); | 6005 Expression* knext = factory->NewSmiLiteral(JSGeneratorObject::kNext, nopos); |
6006 Expression* assignment = | 6006 Expression* assignment = |
6007 factory->NewAssignment(Token::ASSIGN, mode_proxy, knext, nopos); | 6007 factory->NewAssignment(Token::ASSIGN, mode_proxy, knext, nopos); |
6008 set_mode_next = factory->NewExpressionStatement(assignment, nopos); | 6008 set_mode_next = factory->NewExpressionStatement(assignment, nopos); |
6009 } | 6009 } |
6010 | 6010 |
6011 | 6011 |
6012 // mode = kThrow; | 6012 // mode = kThrow; |
6013 Statement* set_mode_throw; | 6013 Statement* set_mode_throw; |
6014 { | 6014 { |
6015 Expression* mode_proxy = factory->NewVariableProxy(var_mode); | 6015 Expression* mode_proxy = factory->NewVariableProxy(var_mode); |
6016 Expression* kthrow = | 6016 Expression* kthrow = |
6017 factory->NewSmiLiteral(JSGeneratorObject::THROW, nopos); | 6017 factory->NewSmiLiteral(JSGeneratorObject::kThrow, nopos); |
6018 Expression* assignment = | 6018 Expression* assignment = |
6019 factory->NewAssignment(Token::ASSIGN, mode_proxy, kthrow, nopos); | 6019 factory->NewAssignment(Token::ASSIGN, mode_proxy, kthrow, nopos); |
6020 set_mode_throw = factory->NewExpressionStatement(assignment, nopos); | 6020 set_mode_throw = factory->NewExpressionStatement(assignment, nopos); |
6021 } | 6021 } |
6022 | 6022 |
6023 | 6023 |
6024 // input = function.sent; | 6024 // input = function.sent; |
6025 Statement* get_input; | 6025 Statement* get_input; |
6026 { | 6026 { |
6027 Expression* function_sent = FunctionSentExpression(scope, factory, nopos); | 6027 Expression* function_sent = FunctionSentExpression(scope, factory, nopos); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6095 case_return->Add(factory->NewBreakStatement(switch_mode, nopos), zone); | 6095 case_return->Add(factory->NewBreakStatement(switch_mode, nopos), zone); |
6096 | 6096 |
6097 auto case_throw = new (zone) ZoneList<Statement*>(5, zone); | 6097 auto case_throw = new (zone) ZoneList<Statement*>(5, zone); |
6098 case_throw->Add(get_throw, zone); | 6098 case_throw->Add(get_throw, zone); |
6099 case_throw->Add(check_throw, zone); | 6099 case_throw->Add(check_throw, zone); |
6100 case_throw->Add(call_throw, zone); | 6100 case_throw->Add(call_throw, zone); |
6101 case_throw->Add(validate_throw_output, zone); | 6101 case_throw->Add(validate_throw_output, zone); |
6102 case_throw->Add(factory->NewBreakStatement(switch_mode, nopos), zone); | 6102 case_throw->Add(factory->NewBreakStatement(switch_mode, nopos), zone); |
6103 | 6103 |
6104 auto cases = new (zone) ZoneList<CaseClause*>(3, zone); | 6104 auto cases = new (zone) ZoneList<CaseClause*>(3, zone); |
6105 Expression* knext = factory->NewSmiLiteral(JSGeneratorObject::NEXT, nopos); | 6105 Expression* knext = factory->NewSmiLiteral(JSGeneratorObject::kNext, nopos); |
6106 Expression* kreturn = | 6106 Expression* kreturn = |
6107 factory->NewSmiLiteral(JSGeneratorObject::RETURN, nopos); | 6107 factory->NewSmiLiteral(JSGeneratorObject::kReturn, nopos); |
6108 Expression* kthrow = | 6108 Expression* kthrow = |
6109 factory->NewSmiLiteral(JSGeneratorObject::THROW, nopos); | 6109 factory->NewSmiLiteral(JSGeneratorObject::kThrow, nopos); |
6110 cases->Add(factory->NewCaseClause(knext, case_next, nopos), zone); | 6110 cases->Add(factory->NewCaseClause(knext, case_next, nopos), zone); |
6111 cases->Add(factory->NewCaseClause(kreturn, case_return, nopos), zone); | 6111 cases->Add(factory->NewCaseClause(kreturn, case_return, nopos), zone); |
6112 cases->Add(factory->NewCaseClause(kthrow, case_throw, nopos), zone); | 6112 cases->Add(factory->NewCaseClause(kthrow, case_throw, nopos), zone); |
6113 | 6113 |
6114 switch_mode->Initialize(factory->NewVariableProxy(var_mode), cases); | 6114 switch_mode->Initialize(factory->NewVariableProxy(var_mode), cases); |
6115 } | 6115 } |
6116 | 6116 |
6117 | 6117 |
6118 // while (true) { ... } | 6118 // while (true) { ... } |
6119 // Already defined earlier: WhileStatement* loop = ... | 6119 // Already defined earlier: WhileStatement* loop = ... |
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6869 try_block, target); | 6869 try_block, target); |
6870 final_loop = target; | 6870 final_loop = target; |
6871 } | 6871 } |
6872 | 6872 |
6873 return final_loop; | 6873 return final_loop; |
6874 } | 6874 } |
6875 | 6875 |
6876 | 6876 |
6877 } // namespace internal | 6877 } // namespace internal |
6878 } // namespace v8 | 6878 } // namespace v8 |
OLD | NEW |