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

static method main() → dynamic {
  lowered 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 {
    lowered T? #lateGenericLocal;
    lowered 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}";
}
