| // 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. |
| // @dart=2.9 |
| /*@testedFeatures=inference*/ |
| library test; |
| |
| import 'dart:async'; |
| |
| abstract class MyStream<T> extends Stream<T> { |
| factory MyStream() => null; |
| } |
| |
| T F<T>() => null; |
| |
| Future f() async { |
| dynamic d; |
| Object o; |
| for (var /*@ type=dynamic */ x in /*@ typeArgs=Iterable<dynamic>* */ F()) {} |
| for (dynamic x in /*@ typeArgs=Iterable<dynamic>* */ F()) {} |
| for (Object x in /*@ typeArgs=Iterable<Object*>* */ F()) {} |
| for (d in /*@ typeArgs=Iterable<dynamic>* */ F()) {} |
| for (o in /*@ typeArgs=Iterable<Object*>* */ F()) {} |
| await for (var /*@ type=dynamic */ x in /*@ typeArgs=Stream<dynamic>* */ F()) {} |
| await for (dynamic x in /*@ typeArgs=Stream<dynamic>* */ F()) {} |
| await for (Object x in /*@ typeArgs=Stream<Object*>* */ F()) {} |
| await for (d in /*@ typeArgs=Stream<dynamic>* */ F()) {} |
| await for (o in /*@ typeArgs=Stream<Object*>* */ F()) {} |
| } |
| |
| Future main() async { |
| for (int x in /*@ typeArgs=int* */ [1, 2, 3]) {} |
| for (num x in /*@ typeArgs=num* */ [1, 2, 3]) {} |
| for (var /*@ type=int* */ x in /*@ typeArgs=int* */ [1, 2, 3]) {} |
| await for (int x in new /*@ typeArgs=int* */ MyStream()) {} |
| await for (var /*@ type=int* */ x in new MyStream<int>()) {} |
| } |