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

static method main() → dynamic {
  final core::int? lateLocal;
  function #lateLocal#get() → core::int
    return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'lateLocal' has not been initialized.") : #t1{core::int};
  function #lateLocal#set(core::int #t2) → dynamic
    if(lateLocal.==(null))
      return lateLocal = #t2;
    else
      throw new _in::LateInitializationErrorImpl::•("Local 'lateLocal' has already been initialized.");
  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());
  self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
  function local<T extends core::Object? = dynamic>(T% value) → core::Null? {
    final T? lateGenericLocal;
    core::bool #lateGenericLocal#isSet = false;
    function #lateGenericLocal#get() → T%
      return #lateGenericLocal#isSet ?{T%} lateGenericLocal{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'lateGenericLocal' has not been initialized.");
    function #lateGenericLocal#set(T% #t3) → dynamic
      if(#lateGenericLocal#isSet)
        throw new _in::LateInitializationErrorImpl::•("Local 'lateGenericLocal' has already been initialized.");
      else {
        #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());
    self::throws(() → T% => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
  }
  local.call<core::int?>(null);
  local.call<core::int?>(42);
  local.call<core::int>(42);
}
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}";
}
