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

static method main() → dynamic {
  core::int? lateLocal;
  core::bool #lateLocal#isSet = false;
  function #lateLocal#get() → core::int {
    if(!#lateLocal#isSet) {
      lateLocal = 123;
      #lateLocal#isSet = true;
    }
    return lateLocal{core::int};
  }
  function #lateLocal#set(core::int #t1) → dynamic {
    #lateLocal#isSet = true;
    return lateLocal = #t1;
  }
  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% #t2) → dynamic {
      #lateGenericLocal#isSet = true;
      return lateGenericLocal = #t2;
    }
    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}";
}
