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

static method main() → dynamic {
  core::int? lateLocal;
  function #lateLocal#get() → core::int
    return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
  function #lateLocal#set(core::int #t2) → dynamic
    return lateLocal = #t2;
  self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
  self::expect(123, #lateLocal#set.call(123));
  self::expect(123, #lateLocal#get.call());
  function local<T extends core::Object? = dynamic>(T% value) → Null {
    T? lateGenericLocal;
    core::bool #lateGenericLocal#isSet = false;
    function #lateGenericLocal#get() → T%
      return #lateGenericLocal#isSet ?{T%} lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
    function #lateGenericLocal#set(T% #t3) → dynamic {
      #lateGenericLocal#isSet = true;
      return lateGenericLocal = #t3;
    }
    self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
    self::expect(value, #lateGenericLocal#set.call(value));
    self::expect(value, #lateGenericLocal#get.call());
  }
  local.call<core::int?>(null);
  local.call<core::int?>(0);
  local.call<core::int>(0);
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!expected.{core::Object::==}(actual))
    throw "Expected ${expected}, actual ${actual}";
}
static method throws(() → dynamic f, core::String message) → dynamic {
  dynamic value;
  try {
    value = f.call();
  }
  on core::LateInitializationError catch(final core::LateInitializationError e) {
    core::print(e);
    return;
  }
  throw "${message}: ${value}";
}
