library test;
import self as self;
import "dart:core" as core;
import "dart:async" as asy;

import "dart:async";

class A extends core::Object {
  synthetic constructor •() → self::A*
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B*
    : super self::A::•()
    ;
}
static method f<T extends core::Object* = dynamic>() → self::f::T*
  return null;
static method test() → dynamic async {
  core::Iterable<self::A*>* iterable;
  asy::Stream<self::A*>* stream;
  self::A* a;
  self::B* b;
  core::int* i;
  for (final dynamic #t1 in iterable) {
    a = #t1;
  }
  await for (final dynamic #t2 in stream) {
    a = #t2;
  }
  for (final dynamic #t3 in iterable) {
    b = #t3;
  }
  await for (final dynamic #t4 in stream) {
    b = #t4;
  }
  for (final dynamic #t5 in iterable) {
    i = #t5;
  }
  await for (final dynamic #t6 in stream) {
    i = #t6;
  }
  for (final dynamic #t7 in self::f<dynamic>()) {
    a = #t7;
  }
  await for (final dynamic #t8 in self::f<dynamic>()) {
    a = #t8;
  }
}
static method main() → dynamic {}
