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

static method main() → dynamic {
  core::int? lateLocal;
  function #lateLocal#get() → core::int
    return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} lateLocal = 123 : #t1{core::int};
  function #lateLocal#set(core::int #t2) → dynamic
    return lateLocal = #t2;
  self::expect(123, #lateLocal#get.call());
  self::expect(124, #lateLocal#set.call(124));
  self::expect(124, #lateLocal#get.call());
  function local<T extends core::Object? = dynamic>(T% value1, T% value2) → Null {
    T? lateGenericLocal;
    core::bool #lateGenericLocal#isSet = false;
    function #lateGenericLocal#get() → T% {
      if(!#lateGenericLocal#isSet) {
        lateGenericLocal = value1;
        #lateGenericLocal#isSet = true;
      }
      return lateGenericLocal{T%};
    }
    function #lateGenericLocal#set(T% #t3) → dynamic {
      #lateGenericLocal#isSet = true;
      return lateGenericLocal = #t3;
    }
    self::expect(value1, #lateGenericLocal#get.call());
    self::expect(value2, #lateGenericLocal#set.call(value2));
    self::expect(value2, #lateGenericLocal#get.call());
  }
  local.call<core::int?>(null, 0);
  local.call<core::int?>(0, null);
  local.call<core::int>(0, 42);
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!expected.{core::Object::==}(actual))
    throw "Expected ${expected}, actual ${actual}";
}
