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? s#param) → void {
    self::C::_#s#isSet = true;
    self::C::_#s = s#param;
  }
}
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";
}
