Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/parser.h" | 5 #include "vm/parser.h" |
| 6 #include "vm/flags.h" | 6 #include "vm/flags.h" |
| 7 | 7 |
| 8 #ifndef DART_PRECOMPILED_RUNTIME | 8 #ifndef DART_PRECOMPILED_RUNTIME |
| 9 | 9 |
| 10 #include "lib/invocation_mirror.h" | 10 #include "lib/invocation_mirror.h" |
| (...skipping 9010 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 9021 // The case without a type is handled above, so require a type here. | 9021 // The case without a type is handled above, so require a type here. |
| 9022 // Delay creation of the local variable until we know its actual | 9022 // Delay creation of the local variable until we know its actual |
| 9023 // position, which is inside the loop body. | 9023 // position, which is inside the loop body. |
| 9024 new_loop_var = true; | 9024 new_loop_var = true; |
| 9025 loop_var_type = ParseConstFinalVarOrType( | 9025 loop_var_type = ParseConstFinalVarOrType( |
| 9026 I->type_checks() ? ClassFinalizer::kCanonicalize : | 9026 I->type_checks() ? ClassFinalizer::kCanonicalize : |
| 9027 ClassFinalizer::kIgnore); | 9027 ClassFinalizer::kIgnore); |
| 9028 loop_var_name = ExpectIdentifier("variable name expected"); | 9028 loop_var_name = ExpectIdentifier("variable name expected"); |
| 9029 } | 9029 } |
| 9030 ExpectToken(Token::kIN); | 9030 ExpectToken(Token::kIN); |
| 9031 | |
| 9032 OpenBlock(); // Implicit block around while loop. | |
|
hausner
2016/07/29 17:59:35
Maybe add a comment that explains why we open a bl
regis
2016/07/29 21:31:47
Done.
| |
| 9033 | |
| 9031 const TokenPosition collection_pos = TokenPos(); | 9034 const TokenPosition collection_pos = TokenPos(); |
| 9032 AstNode* collection_expr = | 9035 AstNode* collection_expr = |
| 9033 ParseAwaitableExpr(kAllowConst, kConsumeCascades, NULL); | 9036 ParseAwaitableExpr(kAllowConst, kConsumeCascades, NULL); |
| 9034 ExpectToken(Token::kRPAREN); | 9037 ExpectToken(Token::kRPAREN); |
| 9035 | 9038 |
| 9036 OpenBlock(); // Implicit block around while loop. | |
| 9037 | |
| 9038 // Generate implicit iterator variable and add to scope. | 9039 // Generate implicit iterator variable and add to scope. |
| 9039 // We could set the type of the implicit iterator variable to Iterator<T> | 9040 // We could set the type of the implicit iterator variable to Iterator<T> |
| 9040 // where T is the type of the for loop variable. However, the type error | 9041 // where T is the type of the for loop variable. However, the type error |
| 9041 // would refer to the compiler generated iterator and could confuse the user. | 9042 // would refer to the compiler generated iterator and could confuse the user. |
| 9042 // It is better to leave the iterator untyped and postpone the type error | 9043 // It is better to leave the iterator untyped and postpone the type error |
| 9043 // until the loop variable is assigned to. | 9044 // until the loop variable is assigned to. |
| 9044 const AbstractType& iterator_type = Object::dynamic_type(); | 9045 const AbstractType& iterator_type = Object::dynamic_type(); |
| 9045 LocalVariable* iterator_var = new(Z) LocalVariable( | 9046 LocalVariable* iterator_var = new(Z) LocalVariable( |
| 9046 collection_pos, Symbols::ForInIter(), iterator_type); | 9047 collection_pos, Symbols::ForInIter(), iterator_type); |
| 9047 current_block_->scope->AddVariable(iterator_var); | 9048 current_block_->scope->AddVariable(iterator_var); |
| (...skipping 5612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 14660 const ArgumentListNode& function_args, | 14661 const ArgumentListNode& function_args, |
| 14661 const LocalVariable* temp_for_last_arg, | 14662 const LocalVariable* temp_for_last_arg, |
| 14662 bool is_super_invocation) { | 14663 bool is_super_invocation) { |
| 14663 UNREACHABLE(); | 14664 UNREACHABLE(); |
| 14664 return NULL; | 14665 return NULL; |
| 14665 } | 14666 } |
| 14666 | 14667 |
| 14667 } // namespace dart | 14668 } // namespace dart |
| 14668 | 14669 |
| 14669 #endif // DART_PRECOMPILED_RUNTIME | 14670 #endif // DART_PRECOMPILED_RUNTIME |
| OLD | NEW |