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

static method main() → dynamic {
  core::int? lateLocal;
  core::bool #lateLocal#isSet = false;
  function #lateLocal#get() → core::int
    return #lateLocal#isSet ?{core::int} lateLocal{core::int} : throw new _in::LateError::localNI("lateLocal");
  function #lateLocal#set(core::int #t1) → dynamic {
    #lateLocal#isSet = true;
    return lateLocal = #t1;
  }
  self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
  self::expect(123, #lateLocal#set.call(123));
  self::expect(123, #lateLocal#get.call());
  function local<T extends core::Object? = dynamic>(T% value) → Null {
    T? lateGenericLocal;
    core::bool #lateGenericLocal#isSet = false;
    function #lateGenericLocal#get() → T%
      return #lateGenericLocal#isSet ?{T%} lateGenericLocal{T%} : throw new _in::LateError::localNI("lateGenericLocal");
    function #lateGenericLocal#set(T% #t2) → dynamic {
      #lateGenericLocal#isSet = true;
      return lateGenericLocal = #t2;
    }
    self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
    self::expect(value, #lateGenericLocal#set.call(value));
    self::expect(value, #lateGenericLocal#get.call());
  }
  local.call<core::int?>(null);
  local.call<core::int?>(0);
  local.call<core::int>(0);
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!expected.{core::Object::==}(actual))
    throw "Expected ${expected}, actual ${actual}";
}
static method throws(() → dynamic f, core::String message) → dynamic {
  dynamic value;
  try {
    value = f.call();
  }
  on core::LateInitializationError catch(final core::LateInitializationError e) {
    core::print(e);
    return;
  }
  throw "${message}: ${value}";
}
