library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;

class C extends core::Object {
  static field dynamic _#s = null;
  static field core::bool _#s#isSet = false;
  field dynamic _#C#v = null;
  field core::bool _#C#v#isSet = false;
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  static get s() → dynamic
    return self::C::_#s#isSet ?{dynamic} self::C::_#s : throw new _in::LateError::fieldNI("s");
  static set s(dynamic #t1) → void
    if(self::C::_#s#isSet)
      throw new _in::LateError::fieldAI("s");
    else {
      self::C::_#s#isSet = true;
      self::C::_#s = #t1;
    }
  get v() → dynamic
    return this.{self::C::_#C#v#isSet} ?{dynamic} this.{self::C::_#C#v} : throw new _in::LateError::fieldNI("v");
  set v(dynamic #t2) → void
    if(this.{self::C::_#C#v#isSet})
      throw new _in::LateError::fieldAI("v");
    else {
      this.{self::C::_#C#v#isSet} = true;
      this.{self::C::_#C#v} = #t2;
    }
}
static field dynamic _#g = null;
static field core::bool _#g#isSet = false;
static get g() → dynamic
  return self::_#g#isSet ?{dynamic} self::_#g : throw new _in::LateError::fieldNI("g");
static set g(dynamic #t3) → void
  if(self::_#g#isSet)
    throw new _in::LateError::fieldAI("g");
  else {
    self::_#g#isSet = true;
    self::_#g = #t3;
  }
static method main() → dynamic {
  final dynamic l;
  core::bool #l#isSet = false;
  function #l#get() → dynamic
    return #l#isSet ?{dynamic} l : throw new _in::LateError::localNI("l");
  function #l#set(dynamic #t4) → dynamic
    if(#l#isSet)
      throw new _in::LateError::localAI("l");
    else {
      #l#isSet = true;
      return l = #t4;
    }
  self::g = "Lily";
  self::C::s = "was";
  self::C c = new self::C::•();
  c.{self::C::v} = "here";
  #l#set.call("Run, Forrest, run");
  self::expect("Lily", self::g);
  self::expect("was", self::C::s);
  self::expect("here", c.{self::C::v});
  self::expect("Run, Forrest, run", #l#get.call());
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!expected.{core::Object::==}(actual))
    throw "Expected ${expected}, actual ${actual}";
}
