Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Unified Diff: runtime/vm/parser.cc

Issue 11410086: Use iterator, moveNext(), current. (Closed) Base URL: https://dart.googlecode.com/svn/experimental/lib_v2/dart
Patch Set: Address comments. Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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.

Powered by Google App Engine
This is Rietveld 408576698