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

static method main(core::List<core::String> args) → dynamic {
  lowered () →? core::int #recursiveInitLocal;
  function #recursiveInitLocal#get() → () → core::int
    return let final () →? core::int #t1 = #recursiveInitLocal in #t1 == null ?{() → core::int} throw new _in::LateError::localNI("recursiveInitLocal") : #t1{() → core::int};
  function #recursiveInitLocal#set(() → core::int recursiveInitLocal#param) → dynamic
    return #recursiveInitLocal = recursiveInitLocal#param;
  lowered final core::int? #local;
  function #local#get() → core::int
    return let final core::int? #t2 = #local in #t2 == null ?{core::int} let final core::int #t3 = #recursiveInitLocal#get(){() → () → core::int}(){() → core::int} in #local == null ?{core::int} #local = #t3 : throw new _in::LateError::localADI("local") : #t2{core::int};
  core::bool doRecursiveInitLocal = true;
  #recursiveInitLocal#set(() → core::int {
    core::print("Executing initializer");
    if(doRecursiveInitLocal) {
      doRecursiveInitLocal = false;
      core::print("Trigger recursive initialization");
      core::int val = #local#get(){() → core::int};
      core::print("Final local has value ${val}");
      core::print("Returning 4 from initializer");
      return 4;
    }
    core::print("Returning 3 from initializer");
    return 3;
  }){(() → core::int) → dynamic};
  self::throws(() → Null {
    core::int val = #local#get(){() → core::int};
    core::print("Final local has value ${val}");
  }, "Read local");
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}";
}
static method throws(() → dynamic f, core::String message) → dynamic {
  dynamic value;
  try {
    value = f(){() → dynamic};
  }
  on core::Error catch(final core::Error e) {
    core::print(e);
    return;
  }
  throw "${message}: ${value}";
}
