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? #t1) → dynamic {
    #lateLocal#isSet = true;
    return #lateLocal = #t1;
  }
  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? #t2) → dynamic {
      #lateGenericLocal#isSet = true;
      return #lateGenericLocal = #t2;
    }
    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}";
}
