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{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;
    }
    final T? lateGenericLocal;
    core::bool #lateGenericLocal#isSet = false;
    function #lateGenericLocal#get() → T% {
      if(!#lateGenericLocal#isSet) {
        lateGenericLocal = initLateGenericLocal.call(value);
        #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}";
}
