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

class Uninitialized extends core::Object {
  field core::int x;
  synthetic constructor •() → void
    ;
}
class PartiallyInitialized extends core::Object {
  field core::int x;
  constructor •(core::int x) → void
    ;
  constructor noInitializer() → void
    ;
}
class Initialized extends core::Object {
  field core::int x;
  constructor •(core::int x) → void
    ;
}
class Forwarding extends core::Object {
  field core::int x;
  constructor initialize(core::int x) → void
    ;
  constructor •(core::int arg) → void
    ;
}
static field core::int uninitializedTopLevel;
static field core::int initializedTopLevel;
static method main() → dynamic
  ;
