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