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) → 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}";
}
