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;
  function #lateLocal#get() → core::int
    return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} lateLocal = initLateLocal.call(123) : #t1{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) → 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{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}";
}
