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

static method lateLocalInit() → core::int?
  return 123;
static method main() → dynamic {
  lowered 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 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}";
}
