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 has-declared-initializer 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}";
}
