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(() → core::Null? {
    self::C::s;
  });
  self::expect("lateValue", self::C::s);
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!expected.{core::Object::==}(actual))
    throw "Expected ${expected}, actual ${actual}";
}
static method throws(() → void f) → dynamic {
  try {
    f.call();
  }
  on core::Object catch(final core::Object _) {
    return;
  }
  throw "Expected exception";
}
