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

static method main() → dynamic {
  core::bool b = false;
  final core::int? lateLocal;
  function #lateLocal#get() → core::int
    return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} throw new _in::LateError::localNI("lateLocal") : #t1{core::int};
  function #lateLocal#set(core::int #t2) → dynamic
    if(lateLocal.==(null))
      return lateLocal = #t2;
    else
      throw new _in::LateError::localAI("lateLocal");
  if(b) {
    #lateLocal#set.call(123);
  }
  self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
  if(!b) {
    self::expect(123, #lateLocal#set.call(123));
    self::expect(123, #lateLocal#get.call());
  }
  self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
  function local<T extends core::Object? = dynamic>(T% value) → Null {
    final 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% #t3) → dynamic
      if(#lateGenericLocal#isSet)
        throw new _in::LateError::localAI("lateGenericLocal");
      else {
        #lateGenericLocal#isSet = true;
        return lateGenericLocal = #t3;
      }
    if(b) {
      #lateGenericLocal#set.call(value);
    }
    self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
    if(!b) {
      self::expect(value, #lateGenericLocal#set.call(value));
      self::expect(value, #lateGenericLocal#get.call());
    }
    self::throws(() → T% => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
  }
  local.call<core::int?>(null);
  local.call<core::int?>(42);
  local.call<core::int>(42);
}
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}";
}
