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 has-declared-initializer 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 has-declared-initializer 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}";
}
