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(123){(core::int?) → core::int?};
      if(#lateLocal#isSet)
        throw new _in::LateError::localADI("lateLocal");
      #lateLocal = #t1;
      #lateLocal#isSet = true;
    }
    return #lateLocal;
  }
  self::expect(null, lateLocalInit);
  self::expect(123, #lateLocal#get(){() → core::int?});
  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(value){(T?) → T?};
        if(#lateGenericLocal#isSet)
          throw new _in::LateError::localADI("lateGenericLocal");
        #lateGenericLocal = #t2;
        #lateGenericLocal#isSet = true;
      }
      return #lateGenericLocal;
    }
    self::expect(null, lateGenericLocalInit);
    self::expect(value, #lateGenericLocal#get(){() → T?});
    self::expect(value, lateGenericLocalInit);
  }
  local<core::int?>(null){(core::int?) → Null};
  local<core::int?>(42){(core::int?) → Null};
  local<core::int>(42){(core::int?) → Null};
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}";
}
