Chromium Code Reviews| Index: src/parsing/parser.cc |
| diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc |
| index 5c6f1aa8f433229e9426c96f236d748684af70cc..794acd206194ec4b0695bbacf5ee32906e82dadc 100644 |
| --- a/src/parsing/parser.cc |
| +++ b/src/parsing/parser.cc |
| @@ -5667,45 +5667,6 @@ Expression* Parser::RewriteSpreads(ArrayLiteral* lit) { |
| Variable* each = |
| scope_->NewTemporary(ast_value_factory()->dot_for_string()); |
| Expression* subject = spread->expression(); |
| - Variable* iterator = |
| - scope_->NewTemporary(ast_value_factory()->dot_iterator_string()); |
| - Variable* element = |
| - scope_->NewTemporary(ast_value_factory()->dot_result_string()); |
| - // iterator = subject[Symbol.iterator]() |
| - Expression* assign_iterator = factory()->NewAssignment( |
| - Token::ASSIGN, factory()->NewVariableProxy(iterator), |
| - GetIterator(subject, factory(), spread->expression_position()), |
|
nickie
2016/02/29 08:43:38
The only reason I can see that this may not be equ
|
| - subject->position()); |
| - // !%_IsJSReceiver(element = iterator.next()) && |
| - // %ThrowIteratorResultNotAnObject(element) |
| - Expression* next_element; |
| - { |
| - // element = iterator.next() |
| - Expression* iterator_proxy = factory()->NewVariableProxy(iterator); |
| - next_element = BuildIteratorNextResult(iterator_proxy, element, |
| - spread->expression_position()); |
|
nickie
2016/02/29 08:43:38
Same here, InitializeForEachStatement uses a "hack
|
| - } |
| - // element.done |
| - Expression* element_done; |
| - { |
| - Expression* done_literal = factory()->NewStringLiteral( |
| - ast_value_factory()->done_string(), RelocInfo::kNoPosition); |
| - Expression* element_proxy = factory()->NewVariableProxy(element); |
| - element_done = factory()->NewProperty(element_proxy, done_literal, |
| - RelocInfo::kNoPosition); |
| - } |
| - // each = element.value |
| - Expression* assign_each; |
| - { |
| - Expression* value_literal = factory()->NewStringLiteral( |
| - ast_value_factory()->value_string(), RelocInfo::kNoPosition); |
| - Expression* element_proxy = factory()->NewVariableProxy(element); |
| - Expression* element_value = factory()->NewProperty( |
| - element_proxy, value_literal, RelocInfo::kNoPosition); |
| - assign_each = factory()->NewAssignment( |
| - Token::ASSIGN, factory()->NewVariableProxy(each), element_value, |
| - RelocInfo::kNoPosition); |
| - } |
| // %AppendElement($R, each) |
| Statement* append_body; |
| { |
| @@ -5722,11 +5683,9 @@ Expression* Parser::RewriteSpreads(ArrayLiteral* lit) { |
| // for (each of spread) %AppendElement($R, each) |
| ForEachStatement* loop = factory()->NewForEachStatement( |
| ForEachStatement::ITERATE, nullptr, RelocInfo::kNoPosition); |
| - ForOfStatement* for_of = loop->AsForOfStatement(); |
| - for_of->Initialize(factory()->NewVariableProxy(each), subject, |
| - append_body, iterator, assign_iterator, next_element, |
| - element_done, assign_each); |
| - do_block->statements()->Add(for_of, zone()); |
| + InitializeForEachStatement(loop, factory()->NewVariableProxy(each), |
| + subject, append_body, false); |
| + do_block->statements()->Add(loop, zone()); |
| } |
| } |
| // Now, rewind the original array literal to truncate everything from the |