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

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