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

static method main() → dynamic {
  core::int? lateLocalInit;
  function initLateLocal(core::int value) → core::int {
    return lateLocalInit = value;
  }
  lowered final core::int? #lateLocal;
  function #lateLocal#get() → core::int
    return let final core::int? #t1 = #lateLocal in #t1.==(null) ?{core::int} let final core::int #t2 = initLateLocal.call(123) in #lateLocal.==(null) ?{core::int} #lateLocal = #t2 : throw new _in::LateError::localADI("lateLocal") : #t1{core::int};
  self::expect(null, lateLocalInit);
  self::expect(123, #lateLocal#get.call());
  self::expect(123, lateLocalInit);
  function local<T extends core::Object? = dynamic>(T% value) → Null {
    T? lateGenericLocalInit;
    function initLateGenericLocal(T% value) → T% {
      return lateGenericLocalInit = value;
    }
    lowered final T? #lateGenericLocal;
    lowered core::bool #lateGenericLocal#isSet = false;
    function #lateGenericLocal#get() → T% {
      if(!#lateGenericLocal#isSet) {
        final T% #t3 = initLateGenericLocal.call(value);
        if(#lateGenericLocal#isSet)
          throw new _in::LateError::localADI("lateGenericLocal");
        #lateGenericLocal = #t3;
        #lateGenericLocal#isSet = true;
      }
      return #lateGenericLocal{T%};
    }
    self::expect(null, lateGenericLocalInit);
    self::expect(value, #lateGenericLocal#get.call());
    self::expect(value, lateGenericLocalInit);
  }
  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}";
}
