| Index: runtime/vm/parser.cc
 | 
| diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
 | 
| index 9369b9055ea8616c3874fada6c99025c77d7146e..d11536b775f48a4432b98e5783fd348e6293a117 100644
 | 
| --- a/runtime/vm/parser.cc
 | 
| +++ b/runtime/vm/parser.cc
 | 
| @@ -9015,13 +9015,18 @@ AstNode* Parser::ParseForInStatement(TokenPosition forin_pos,
 | 
|      loop_var_name = ExpectIdentifier("variable name expected");
 | 
|    }
 | 
|    ExpectToken(Token::kIN);
 | 
| +
 | 
| +  // Ensure that the block token range contains the call to moveNext and it
 | 
| +  // also starts the block at a different token position than the following
 | 
| +  // loop block. Both blocks can allocate contexts and if they have a matching
 | 
| +  // token position range, it can be an issue (cf. bug 26941).
 | 
| +  OpenBlock();  // Implicit block around while loop.
 | 
| +
 | 
|    const TokenPosition collection_pos = TokenPos();
 | 
|    AstNode* collection_expr =
 | 
|        ParseAwaitableExpr(kAllowConst, kConsumeCascades, NULL);
 | 
|    ExpectToken(Token::kRPAREN);
 | 
|  
 | 
| -  OpenBlock();  // Implicit block around while loop.
 | 
| -
 | 
|    // Generate implicit iterator variable and add to scope.
 | 
|    // We could set the type of the implicit iterator variable to Iterator<T>
 | 
|    // where T is the type of the for loop variable. However, the type error
 | 
| 
 |