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;
  lowered core::bool #lateLocal#isSet = false;
  function #lateLocal#get() → core::int {
    if(!#lateLocal#isSet) {
      final core::int #t1 = initLateLocal.call(123);
      if(#lateLocal#isSet)
        throw new _in::LateError::localADI("lateLocal");
      #lateLocal = #t1;
      #lateLocal#isSet = true;
    }
    return #lateLocal{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% #t2 = initLateGenericLocal.call(value);
        if(#lateGenericLocal#isSet)
          throw new _in::LateError::localADI("lateGenericLocal");
        #lateGenericLocal = #t2;
        #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}";
}
