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

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 {}
