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

class A extends core::Object {
  synthetic constructor •() → self::A*
    : super core::Object::•()
    ;
}
class C extends core::Object {
  field self::A* aField = null;
  synthetic constructor •() → self::C*
    : super core::Object::•()
    ;
  set aSetter(self::A* value) → void {}
  method test() → void {
    self::A* aLocal;
    for (final self::A* #t1 in self::f<core::Iterable<self::A*>*>()) {
      aLocal = #t1;
    }
    for (final self::A* #t2 in self::f<core::Iterable<self::A*>*>()) {
      this.{self::C::aField} = #t2;
    }
    for (final self::A* #t3 in self::f<core::Iterable<self::A*>*>()) {
      this.{self::C::aSetter} = #t3;
    }
    for (final self::A* #t4 in self::f<core::Iterable<self::A*>*>()) {
      self::aTopLevel = #t4;
    }
    for (final self::A* #t5 in self::f<core::Iterable<self::A*>*>()) {
      self::aTopLevelSetter = #t5;
    }
  }
}
static field self::A* aTopLevel;
static method f<T extends core::Object* = dynamic>() → self::f::T*
  return null;
static set aTopLevelSetter(self::A* value) → void {}
static method main() → dynamic {}
