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

class A extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → void
    : 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 self::A #t1 in iterable) {
    a = #t1;
  }
  await for (final self::A #t2 in stream) {
    a = #t2;
  }
  for (final self::A #t3 in iterable) {
    b = #t3;
  }
  await for (final self::A #t4 in stream) {
    b = #t4;
  }
  for (final self::A #t5 in iterable) {
    i = #t5;
  }
  await for (final self::A #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 {}
