| Index: runtime/vm/parser.cc
|
| diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
|
| index ec9000e71b6dcae5ff87d044d598bfcb3e8f32d9..32610c2d18e010d1cf7469092f61e2112a4b6ae0 100644
|
| --- a/runtime/vm/parser.cc
|
| +++ b/runtime/vm/parser.cc
|
| @@ -5828,20 +5828,21 @@ AstNode* Parser::ParseForInStatement(intptr_t forin_pos,
|
| current_block_->scope->AddVariable(iterator_var);
|
|
|
| // Generate initialization of iterator variable.
|
| - const String& iterator_method_name =
|
| + const String& iterator_getter_name =
|
| String::ZoneHandle(Symbols::GetIterator());
|
| ArgumentListNode* no_args = new ArgumentListNode(collection_pos);
|
| - AstNode* get_iterator = new InstanceCallNode(
|
| - collection_pos, collection_expr, iterator_method_name, no_args);
|
| + AstNode* get_iterator = new InstanceGetterNode(
|
| + collection_pos, collection_expr, iterator_getter_name);
|
| AstNode* iterator_init =
|
| new StoreLocalNode(collection_pos, iterator_var, get_iterator);
|
| current_block_->statements->Add(iterator_init);
|
|
|
| // Generate while loop condition.
|
| - AstNode* iterator_has_next = new InstanceGetterNode(
|
| + AstNode* iterator_moveNext = new InstanceCallNode(
|
| collection_pos,
|
| new LoadLocalNode(collection_pos, iterator_var),
|
| - String::ZoneHandle(Symbols::HasNext()));
|
| + String::ZoneHandle(Symbols::MoveNext()),
|
| + no_args);
|
|
|
| // Parse the for loop body. Ideally, we would use ParseNestedStatement()
|
| // here, but that does not work well because we have to insert an implicit
|
| @@ -5850,11 +5851,10 @@ AstNode* Parser::ParseForInStatement(intptr_t forin_pos,
|
| OpenLoopBlock();
|
| current_block_->scope->AddLabel(label);
|
|
|
| - AstNode* iterator_next = new InstanceCallNode(
|
| + AstNode* iterator_current = new InstanceGetterNode(
|
| collection_pos,
|
| new LoadLocalNode(collection_pos, iterator_var),
|
| - String::ZoneHandle(Symbols::Next()),
|
| - no_args);
|
| + String::ZoneHandle(Symbols::Current()));
|
|
|
| // Generate assignment of next iterator value to loop variable.
|
| AstNode* loop_var_assignment = NULL;
|
| @@ -5862,13 +5862,13 @@ AstNode* Parser::ParseForInStatement(intptr_t forin_pos,
|
| // The for loop declares a new variable. Add it to the loop body scope.
|
| current_block_->scope->AddVariable(loop_var);
|
| loop_var_assignment =
|
| - new StoreLocalNode(loop_var_pos, loop_var, iterator_next);
|
| + new StoreLocalNode(loop_var_pos, loop_var, iterator_current);
|
| } else {
|
| AstNode* loop_var_primary =
|
| ResolveIdent(loop_var_pos, *loop_var_name, false);
|
| ASSERT(!loop_var_primary->IsPrimaryNode());
|
| loop_var_assignment =
|
| - CreateAssignmentNode(loop_var_primary, iterator_next);
|
| + CreateAssignmentNode(loop_var_primary, iterator_current);
|
| if (loop_var_assignment == NULL) {
|
| ErrorMsg(loop_var_pos, "variable or field '%s' is not assignable",
|
| loop_var_name->ToCString());
|
| @@ -5891,7 +5891,7 @@ AstNode* Parser::ParseForInStatement(intptr_t forin_pos,
|
| SequenceNode* for_loop_statement = CloseBlock();
|
|
|
| AstNode* while_statement =
|
| - new WhileNode(forin_pos, label, iterator_has_next, for_loop_statement);
|
| + new WhileNode(forin_pos, label, iterator_moveNext, for_loop_statement);
|
| current_block_->statements->Add(while_statement);
|
|
|
| return CloseBlock(); // Implicit block around while loop.
|
|
|