| // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| /*member: main:[null|powerset={null}]*/ |
| main() { |
| forInDirect(); |
| forInReturn(); |
| forInReturnMulti(); |
| forInReturnNonNull(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // For-in loop directly on a list literal. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: forInDirect:[null|powerset={null}]*/ |
| forInDirect() { |
| /*iterator: Container([exact=JSExtendableArray|powerset={I}{G}{M}], element: [exact=JSUInt31|powerset={I}{O}{N}], length: 3, powerset: {I}{G}{M})*/ |
| /*current: [exact=ArrayIterator|powerset={N}{O}{N}]*/ |
| /*moveNext: [exact=ArrayIterator|powerset={N}{O}{N}]*/ |
| for (var a in [1, 2, 3]) { |
| print(a); |
| } |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Return element from a for-in loop on a list literal. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: forInReturn:[null|subclass=JSInt|powerset={null}{I}{O}{N}]*/ |
| forInReturn() { |
| /*iterator: Container([exact=JSExtendableArray|powerset={I}{G}{M}], element: [exact=JSUInt31|powerset={I}{O}{N}], length: 3, powerset: {I}{G}{M})*/ |
| /*current: [exact=ArrayIterator|powerset={N}{O}{N}]*/ |
| /*moveNext: [exact=ArrayIterator|powerset={N}{O}{N}]*/ |
| for (var a in [1, 2, 3]) { |
| // TODO(johnniwinther): We should know the type of [a] here. |
| return a; |
| } |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Return element from a for-in loop on known list type. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: _forInReturn:[null|subclass=Object|powerset={null}{IN}{GFUO}{IMN}]*/ |
| _forInReturn( |
| /*Container([exact=JSExtendableArray|powerset={I}{G}{M}], element: [exact=JSUInt31|powerset={I}{O}{N}], length: null, powerset: {I}{G}{M})*/ list, |
| ) { |
| /*iterator: Container([exact=JSExtendableArray|powerset={I}{G}{M}], element: [exact=JSUInt31|powerset={I}{O}{N}], length: null, powerset: {I}{G}{M})*/ |
| /*current: [exact=ArrayIterator|powerset={N}{O}{N}]*/ |
| /*moveNext: [exact=ArrayIterator|powerset={N}{O}{N}]*/ |
| for (var a in list) { |
| // TODO(johnniwinther): We should know the type of [a] here. |
| return a; |
| } |
| } |
| |
| /*member: forInReturnMulti:[null|powerset={null}]*/ |
| forInReturnMulti() { |
| _forInReturn([1, 2]); |
| _forInReturn([1, 2, 3]); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Sequentially refine that an element is not null and return it from a for-in |
| // loop on known list type. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: forInReturnNonNull:[subclass=JSInt|powerset={I}{O}{N}]*/ |
| forInReturnNonNull() { |
| /*iterator: Container([exact=JSExtendableArray|powerset={I}{G}{M}], element: [exact=JSUInt31|powerset={I}{O}{N}], length: 3, powerset: {I}{G}{M})*/ |
| /*current: [exact=ArrayIterator|powerset={N}{O}{N}]*/ |
| /*moveNext: [exact=ArrayIterator|powerset={N}{O}{N}]*/ |
| for (var a in [1, 2, 3]) { |
| // TODO(johnniwinther): We should know the type of [a] here. Even if [a] has |
| // type `dynamic`. |
| a. /*[subclass=JSInt|powerset={I}{O}{N}]*/ isEven; |
| a. /*[subclass=JSInt|powerset={I}{O}{N}]*/ isEven; |
| return a; |
| } |
| return 0; |
| } |