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;
  lowered core::bool #recursiveInitLocal#isSet = false;
  function #recursiveInitLocal#get() → () → core::int
    return #recursiveInitLocal#isSet ?{() → core::int} #recursiveInitLocal{() → core::int} : throw new _in::LateError::localNI("recursiveInitLocal");
  function #recursiveInitLocal#set(() → core::int recursiveInitLocal#param) → dynamic {
    #recursiveInitLocal#isSet = true;
    return #recursiveInitLocal = recursiveInitLocal#param;
  }
  lowered final has-declared-initializer core::int? #local;
  lowered core::bool #local#isSet = false;
  function #local#get() → core::int {
    if(!#local#isSet) {
      final core::int #t1 = #recursiveInitLocal#get(){() → () → core::int}(){() → core::int};
      if(#local#isSet)
        throw new _in::LateError::localADI("local");
      #local = #t1;
      #local#isSet = true;
    }
    return #local{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}";
}
