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

class C extends core::Object {
  static field dynamic staticField = null;
  field dynamic instanceField = null;
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  static set staticSetter(dynamic x) → void {}
  set instanceSetter(dynamic x) → void {}
  method test() → void {
    dynamic localVar;
    for (final dynamic #t1 in <dynamic>[]) {
      self::topLevel = #t1;
    }
    for (final dynamic #t2 in <dynamic>[]) {
      self::topLevelSetter = #t2;
    }
    for (final dynamic #t3 in <dynamic>[]) {
      self::C::staticField = #t3;
    }
    for (final dynamic #t4 in <dynamic>[]) {
      self::C::staticSetter = #t4;
    }
    for (final dynamic #t5 in <dynamic>[]) {
      this.{self::C::instanceField} = #t5;
    }
    for (final dynamic #t6 in <dynamic>[]) {
      this.{self::C::instanceSetter} = #t6;
    }
    for (final dynamic #t7 in <dynamic>[]) {
      localVar = #t7;
    }
  }
}
static field dynamic topLevel;
static set topLevelSetter(dynamic x) → void {}
static method main() → dynamic {}
