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

class C extends core::Object {
  static field core::String? _#s = null;
  static field core::bool _#s#isSet = false;
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  static get s() → core::String? {
    if(!self::C::_#s#isSet) {
      self::C::_#s = self::init("lateValue");
      self::C::_#s#isSet = true;
    }
    return self::C::_#s;
  }
  static set s(core::String? #t1) → void {
    self::C::_#s#isSet = true;
    self::C::_#s = #t1;
  }
}
static field core::bool _called = false;
static method init(core::String val) → core::String {
  if(!self::_called) {
    self::_called = true;
    throw core::Exception::•();
  }
  return val;
}
static method main() → dynamic {
  self::throws(() → void {
    self::C::s;
  });
  self::expect("lateValue", self::C::s);
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}";
}
static method throws(() → void f) → dynamic {
  try {
    f(){() → void};
  }
  on core::Object catch(final core::Object _) {
    return;
  }
  throw "Expected exception";
}
