| 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 3094 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3105 scope_); | 3105 scope_); |
| 3106 auto block = | 3106 auto block = |
| 3107 factory()->NewBlock(nullptr, 2, false, RelocInfo::kNoPosition); | 3107 factory()->NewBlock(nullptr, 2, false, RelocInfo::kNoPosition); |
| 3108 block->statements()->Add(factory()->NewExpressionStatement( | 3108 block->statements()->Add(factory()->NewExpressionStatement( |
| 3109 assign_each, RelocInfo::kNoPosition), | 3109 assign_each, RelocInfo::kNoPosition), |
| 3110 zone()); | 3110 zone()); |
| 3111 block->statements()->Add(body, zone()); | 3111 block->statements()->Add(body, zone()); |
| 3112 body = block; | 3112 body = block; |
| 3113 each = factory()->NewVariableProxy(temp); | 3113 each = factory()->NewVariableProxy(temp); |
| 3114 } | 3114 } |
| 3115 stmt->Initialize(each, subject, body); | 3115 stmt->AsForInStatement()->Initialize(each, subject, body); |
| 3116 } | 3116 } |
| 3117 } | 3117 } |
| 3118 | 3118 |
| 3119 void Parser::InitializeForOfStatement(ForOfStatement* for_of, Expression* each, | 3119 void Parser::InitializeForOfStatement(ForOfStatement* for_of, Expression* each, |
| 3120 Expression* iterable, Statement* body, | 3120 Expression* iterable, Statement* body, |
| 3121 int next_result_pos) { | 3121 int next_result_pos) { |
| 3122 Variable* iterator = | 3122 Variable* iterator = |
| 3123 scope_->NewTemporary(ast_value_factory()->dot_iterator_string()); | 3123 scope_->NewTemporary(ast_value_factory()->dot_iterator_string()); |
| 3124 Variable* result = | 3124 Variable* result = |
| 3125 scope_->NewTemporary(ast_value_factory()->dot_result_string()); | 3125 scope_->NewTemporary(ast_value_factory()->dot_result_string()); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3162 Expression* result_value = factory()->NewProperty( | 3162 Expression* result_value = factory()->NewProperty( |
| 3163 result_proxy, value_literal, RelocInfo::kNoPosition); | 3163 result_proxy, value_literal, RelocInfo::kNoPosition); |
| 3164 assign_each = factory()->NewAssignment(Token::ASSIGN, each, result_value, | 3164 assign_each = factory()->NewAssignment(Token::ASSIGN, each, result_value, |
| 3165 RelocInfo::kNoPosition); | 3165 RelocInfo::kNoPosition); |
| 3166 if (each->IsArrayLiteral() || each->IsObjectLiteral()) { | 3166 if (each->IsArrayLiteral() || each->IsObjectLiteral()) { |
| 3167 assign_each = PatternRewriter::RewriteDestructuringAssignment( | 3167 assign_each = PatternRewriter::RewriteDestructuringAssignment( |
| 3168 this, assign_each->AsAssignment(), scope_); | 3168 this, assign_each->AsAssignment(), scope_); |
| 3169 } | 3169 } |
| 3170 } | 3170 } |
| 3171 | 3171 |
| 3172 for_of->Initialize(each, iterable, body, iterator, assign_iterator, | 3172 for_of->Initialize(body, iterator, assign_iterator, next_result, result_done, |
| 3173 next_result, result_done, assign_each); | 3173 assign_each); |
| 3174 } | 3174 } |
| 3175 | 3175 |
| 3176 Statement* Parser::DesugarLexicalBindingsInForStatement( | 3176 Statement* Parser::DesugarLexicalBindingsInForStatement( |
| 3177 Scope* inner_scope, VariableMode mode, ZoneList<const AstRawString*>* names, | 3177 Scope* inner_scope, VariableMode mode, ZoneList<const AstRawString*>* names, |
| 3178 ForStatement* loop, Statement* init, Expression* cond, Statement* next, | 3178 ForStatement* loop, Statement* init, Expression* cond, Statement* next, |
| 3179 Statement* body, bool* ok) { | 3179 Statement* body, bool* ok) { |
| 3180 // ES6 13.7.4.8 specifies that on each loop iteration the let variables are | 3180 // ES6 13.7.4.8 specifies that on each loop iteration the let variables are |
| 3181 // copied into a new environment. Moreover, the "next" statement must be | 3181 // copied into a new environment. Moreover, the "next" statement must be |
| 3182 // evaluated not in the environment of the just completed iteration but in | 3182 // evaluated not in the environment of the just completed iteration but in |
| 3183 // that of the upcoming one. We achieve this with the following desugaring. | 3183 // that of the upcoming one. We achieve this with the following desugaring. |
| (...skipping 3632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6816 try_block, target); | 6816 try_block, target); |
| 6817 final_loop = target; | 6817 final_loop = target; |
| 6818 } | 6818 } |
| 6819 | 6819 |
| 6820 return final_loop; | 6820 return final_loop; |
| 6821 } | 6821 } |
| 6822 | 6822 |
| 6823 | 6823 |
| 6824 } // namespace internal | 6824 } // namespace internal |
| 6825 } // namespace v8 | 6825 } // namespace v8 |
| OLD | NEW |