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

static method lateLocalInit() → core::int?
  return 123;
static method main() → dynamic {
  lowered has-declared-initializer core::int? #lateLocal;
  lowered core::bool #lateLocal#isSet = false;
  function #lateLocal#get() → core::int? {
    if(!#lateLocal#isSet) {
      #lateLocal = self::lateLocalInit();
      #lateLocal#isSet = true;
    }
    return #lateLocal;
  }
  function #lateLocal#set(core::int? lateLocal#param) → dynamic {
    #lateLocal#isSet = true;
    return #lateLocal = lateLocal#param;
  }
  self::expect(123, #lateLocal#get(){() → core::int?});
  self::expect(124, #lateLocal#set(124){(core::int?) → dynamic});
  self::expect(124, #lateLocal#get(){() → core::int?});
  function local<T extends core::Object? = dynamic>(T? value1, T? value2) → Null {
    lowered has-declared-initializer T? #lateGenericLocal;
    lowered core::bool #lateGenericLocal#isSet = false;
    function #lateGenericLocal#get() → T? {
      if(!#lateGenericLocal#isSet) {
        #lateGenericLocal = value1;
        #lateGenericLocal#isSet = true;
      }
      return #lateGenericLocal;
    }
    function #lateGenericLocal#set(T? lateGenericLocal#param) → dynamic {
      #lateGenericLocal#isSet = true;
      return #lateGenericLocal = lateGenericLocal#param;
    }
    self::expect(value1, #lateGenericLocal#get(){() → T?});
    self::expect(value2, #lateGenericLocal#set(value2){(T?) → dynamic});
    self::expect(value2, #lateGenericLocal#get(){() → T?});
  }
  local<core::int?>(null, 0){(core::int?, core::int?) → Null};
  local<core::int?>(0, null){(core::int?, core::int?) → Null};
  local<core::int>(null, 0){(core::int?, core::int?) → Null};
  local<core::int>(0, null){(core::int?, core::int?) → Null};
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}";
}
