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 •() → self::C*
    : 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 {}
