main = #lib::main;
 [@vm.bytecode=
BytecodeMetadata {
Bytecode (version: stable)
Main library: #lib
Library '#lib'
    name '#lib'
    script '#lib'

Class '', script = '#lib'

Field 'asyncInFieldInitializer', type = FunctionType (dart:async::Future < dart:core::int >) -> dart:async::Future < dart:core::Null >, getter = 'get:asyncInFieldInitializer', reflectable, static
    initializer
Bytecode {
  Entry                3
  CheckStack           0
  AllocateClosure      CP#0
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#20
  Push                 r2
  PushNull
  StoreFieldTOS        CP#22
  Push                 r2
  PushConstant         CP#24
  StoreFieldTOS        CP#25
  Push                 r2
  PushConstant         CP#0
  StoreFieldTOS        CP#27
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#1
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = Type dart:async::Future < dart:core::int >
  [4] = ObjectRef 'x'
  [5] = SubtypeTestCache
  [6] = Class dart:async::_AsyncAwaitCompleter
  [7] = ObjectRef < dart:core::Null >
  [8] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [9] = Reserved
  [10] = ClosureFunction 1
  [11] = ObjectRef null
  [12] = DirectCall 'dart:async::_awaitHelper', ArgDesc num-args 4, num-type-args 0, names []
  [13] = Reserved
  [14] = DirectCall 'dart:async::_completeOnAsyncReturn', ArgDesc num-args 2, num-type-args 0, names []
  [15] = Reserved
  [16] = Type dynamic
  [17] = InterfaceCall 'dart:async::Completer::completeError', ArgDesc num-args 3, num-type-args 0, names []
  [18] = Reserved
  [19] = EndClosureFunctionScope
  [20] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [21] = Reserved
  [22] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [23] = Reserved
  [24] = EmptyTypeArguments
  [25] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [26] = Reserved
  [27] = InstanceField dart:core::_Closure::_function (field)
  [28] = Reserved
  [29] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [30] = Reserved
  [31] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [32] = Reserved
  [33] = DynamicCall 'start', ArgDesc num-args 2, num-type-args 0, names []
  [34] = Reserved
  [35] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
  [36] = Reserved
  [37] = EndClosureFunctionScope
}
Closure #lib::asyncInFieldInitializer (field)::'<anonymous closure>' async (dart:async::Future < dart:core::int > x) -> dart:async::Future < dart:core::Null >
ClosureCode {
  EntryFixed           2, 4
  Push                 FP[-6]
  LoadFieldTOS         CP#1
  PopLocal             r0
  CheckStack           0
  AllocateContext      0, 9
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 0
  JumpIfUnchecked      L1
  Push                 FP[-5]
  PushConstant         CP#3
  PushNull
  PushNull
  PushConstant         CP#4
  AssertAssignable     0, CP#5
  Drop1
L1:
  Push                 r0
  PushConstant         CP#7
  PushConstant         CP#6
  AllocateT
  StoreLocal           r2
  Push                 r2
  DirectCall           CP#8, 1
  Drop1
  StoreContextVar      0, 1
  Push                 r0
  PushNull
  StoreContextVar      0, 2
  PushNull
  PopLocal             r3
  Push                 r0
  PushNull
  StoreContextVar      0, 3
  Push                 r0
  PushNull
  StoreContextVar      0, 4
  Push                 r0
  PushInt              0
  StoreContextVar      0, 5
  Push                 r0
  PushNull
  StoreContextVar      0, 6
  Push                 r0
  PushNull
  StoreContextVar      0, 7
  Push                 r0
  AllocateClosure      CP#10
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#20
  Push                 r2
  PushNull
  StoreFieldTOS        CP#22
  Push                 r2
  PushConstant         CP#24
  StoreFieldTOS        CP#25
  Push                 r2
  PushConstant         CP#10
  StoreFieldTOS        CP#27
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#1
  StoreContextVar      0, 8
  PushNull
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 8
  DirectCall           CP#29, 1
  StoreContextVar      0, 3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 8
  DirectCall           CP#31, 1
  StoreContextVar      0, 4
  Push                 r0
  LoadContextVar       0, 1
  Push                 r0
  LoadContextVar       0, 8
  DynamicCall          CP#33, 2
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  InterfaceCall        CP#35, 1
  ReturnTOS
}

Closure #lib::asyncInFieldInitializer (field)::Closure/0::':async_op' ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
ClosureCode {
  EntryOptional        1, 3, 0
  LoadConstant         r1, CP#11
  LoadConstant         r2, CP#11
  LoadConstant         r3, CP#11
  Frame                6
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  CheckStack           0
  Push                 r4
  LoadContextVar       0, 5
  StoreLocal           r5
  PushInt              0
  JumpIfNeStrict       L1
  Push                 r4
  Push                 r4
  StoreContextVar      0, 7
Try #0 start:
  Push                 r4
  PushInt              1
  StoreContextVar      0, 5
  Push                 r4
  Push                 r4
  StoreContextVar      0, 6
  Push                 r4
  LoadContextVar       0, 0
  Push                 r4
  LoadContextVar       0, 3
  Push                 r4
  LoadContextVar       0, 4
  Push                 r4
  LoadContextVar       0, 8
  DirectCall           CP#12, 4
  PopLocal             r8
  PushNull
  ReturnTOS
L4:
  Push                 r2
  JumpIfNull           L2
  Push                 r2
  Push                 r3
  Throw                1
L2:
  Push                 r1
  Drop1
  Push                 r4
  LoadContextVar       0, 1
  Push                 r4
  LoadContextVar       0, 2
  DirectCall           CP#14, 2
  Drop1
  PushNull
  ReturnTOS
Try #0 end:
Try #0 handler:
  SetFrame             10
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  Push                 r4
  LoadContextVar       0, 7
  PopLocal             r4
  MoveSpecial          exception, r6
  MoveSpecial          stackTrace, r7
  Push                 r6
  PopLocal             r8
  Push                 r7
  PopLocal             r9
  Push                 r4
  LoadContextVar       0, 1
  Push                 r8
  Push                 r9
  InterfaceCall        CP#17, 3
  Drop1
  Jump                 L3
L3:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       0, 6
  PopLocal             r4
  Jump                 L4
}


Function 'foo', static, reflectable, async
    parameters [] (required: 0)
    return-type dart:async::Future < dart:core::int >

Bytecode {
  Entry                7
  CheckStack           0
  AllocateContext      0, 4
  PopLocal             r0
  Push                 r0
  PushConstant         CP#1
  PushConstant         CP#0
  AllocateT
  StoreLocal           r2
  Push                 r2
  DirectCall           CP#2, 1
  Drop1
  StoreContextVar      0, 0
  Push                 r0
  PushNull
  StoreContextVar      0, 1
  PushNull
  PopLocal             r3
  PushNull
  PopLocal             r4
  PushNull
  PopLocal             r5
  Push                 r0
  PushInt              0
  StoreContextVar      0, 2
  Push                 r0
  PushNull
  StoreContextVar      0, 3
  AllocateClosure      CP#4
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#14
  Push                 r2
  PushNull
  StoreFieldTOS        CP#16
  Push                 r2
  PushConstant         CP#18
  StoreFieldTOS        CP#19
  Push                 r2
  PushConstant         CP#4
  StoreFieldTOS        CP#21
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#6
  PopLocal             r6
  PushNull
  PopLocal             r3
  Push                 r6
  DirectCall           CP#23, 1
  PopLocal             r4
  Push                 r6
  DirectCall           CP#25, 1
  PopLocal             r5
  Push                 r0
  LoadContextVar       0, 0
  Push                 r6
  DynamicCall          CP#27, 2
  Drop1
  Push                 r0
  LoadContextVar       0, 0
  InterfaceCall        CP#29, 1
  ReturnTOS
}
ConstantPool {
  [0] = Class dart:async::_AsyncAwaitCompleter
  [1] = ObjectRef < dart:core::int >
  [2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
  [4] = ClosureFunction 0
  [5] = ObjectRef null
  [6] = InstanceField dart:core::_Closure::_context (field)
  [7] = Reserved
  [8] = DirectCall 'dart:async::_completeOnAsyncReturn', ArgDesc num-args 2, num-type-args 0, names []
  [9] = Reserved
  [10] = Type dynamic
  [11] = InterfaceCall 'dart:async::Completer::completeError', ArgDesc num-args 3, num-type-args 0, names []
  [12] = Reserved
  [13] = EndClosureFunctionScope
  [14] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [15] = Reserved
  [16] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [17] = Reserved
  [18] = EmptyTypeArguments
  [19] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [20] = Reserved
  [21] = InstanceField dart:core::_Closure::_function (field)
  [22] = Reserved
  [23] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [24] = Reserved
  [25] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [26] = Reserved
  [27] = DynamicCall 'start', ArgDesc num-args 2, num-type-args 0, names []
  [28] = Reserved
  [29] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
  [30] = Reserved
}
Closure #lib::foo::':async_op' ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
ClosureCode {
  EntryOptional        1, 3, 0
  LoadConstant         r1, CP#5
  LoadConstant         r2, CP#5
  LoadConstant         r3, CP#5
  Frame                6
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  CheckStack           0
  Push                 r4
  LoadContextVar       0, 2
  StoreLocal           r5
  PushInt              0
  JumpIfNeStrict       L1
  Push                 r4
  PopLocal             r6
Try #0 start:
  Push                 r4
  PushInt              42
  StoreContextVar      0, 1
  Jump                 L2
L2:
  Push                 r4
  LoadContextVar       0, 0
  Push                 r4
  LoadContextVar       0, 1
  DirectCall           CP#8, 2
  Drop1
  PushNull
  ReturnTOS
Try #0 end:
Try #0 handler:
  SetFrame             10
  Push                 r6
  PopLocal             r4
  MoveSpecial          exception, r6
  MoveSpecial          stackTrace, r7
  Push                 r6
  PopLocal             r8
  Push                 r7
  PopLocal             r9
  Push                 r4
  LoadContextVar       0, 0
  Push                 r8
  Push                 r9
  InterfaceCall        CP#11, 3
  Drop1
  Jump                 L3
L3:
  PushNull
  ReturnTOS
L1:
  Trap
}


Function 'simpleAsyncAwait', static, reflectable, async
    parameters [dart:async::Future < dart:core::int > 'a', dart:async::Future < dart:core::int > 'b'] (required: 2)
    return-type dart:async::Future < dart:core::int >

Bytecode {
  Entry                4
  CheckStack           0
  AllocateContext      0, 11
  PopLocal             r0
  Push                 r0
  Push                 FP[-6]
  StoreContextVar      0, 0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 1
  Push                 r0
  PushConstant         CP#1
  PushConstant         CP#0
  AllocateT
  StoreLocal           r2
  Push                 r2
  DirectCall           CP#2, 1
  Drop1
  StoreContextVar      0, 2
  Push                 r0
  PushNull
  StoreContextVar      0, 3
  PushNull
  PopLocal             r3
  Push                 r0
  PushNull
  StoreContextVar      0, 4
  Push                 r0
  PushNull
  StoreContextVar      0, 5
  Push                 r0
  PushInt              0
  StoreContextVar      0, 6
  Push                 r0
  PushNull
  StoreContextVar      0, 7
  Push                 r0
  PushNull
  StoreContextVar      0, 8
  Push                 r0
  PushNull
  StoreContextVar      0, 9
  Push                 r0
  AllocateClosure      CP#4
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#18
  Push                 r2
  PushNull
  StoreFieldTOS        CP#20
  Push                 r2
  PushConstant         CP#22
  StoreFieldTOS        CP#23
  Push                 r2
  PushConstant         CP#4
  StoreFieldTOS        CP#25
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#6
  StoreContextVar      0, 10
  PushNull
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 10
  DirectCall           CP#27, 1
  StoreContextVar      0, 4
  Push                 r0
  Push                 r0
  LoadContextVar       0, 10
  DirectCall           CP#29, 1
  StoreContextVar      0, 5
  Push                 r0
  LoadContextVar       0, 2
  Push                 r0
  LoadContextVar       0, 10
  DynamicCall          CP#31, 2
  Drop1
  Push                 r0
  LoadContextVar       0, 2
  InterfaceCall        CP#33, 1
  ReturnTOS
}
ConstantPool {
  [0] = Class dart:async::_AsyncAwaitCompleter
  [1] = ObjectRef < dart:core::int >
  [2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
  [4] = ClosureFunction 0
  [5] = ObjectRef null
  [6] = InstanceField dart:core::_Closure::_context (field)
  [7] = Reserved
  [8] = DirectCall 'dart:async::_awaitHelper', ArgDesc num-args 4, num-type-args 0, names []
  [9] = Reserved
  [10] = InterfaceCall 'dart:core::num::+', ArgDesc num-args 2, num-type-args 0, names []
  [11] = Reserved
  [12] = DirectCall 'dart:async::_completeOnAsyncReturn', ArgDesc num-args 2, num-type-args 0, names []
  [13] = Reserved
  [14] = Type dynamic
  [15] = InterfaceCall 'dart:async::Completer::completeError', ArgDesc num-args 3, num-type-args 0, names []
  [16] = Reserved
  [17] = EndClosureFunctionScope
  [18] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [19] = Reserved
  [20] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [21] = Reserved
  [22] = EmptyTypeArguments
  [23] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [24] = Reserved
  [25] = InstanceField dart:core::_Closure::_function (field)
  [26] = Reserved
  [27] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [28] = Reserved
  [29] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [30] = Reserved
  [31] = DynamicCall 'start', ArgDesc num-args 2, num-type-args 0, names []
  [32] = Reserved
  [33] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
  [34] = Reserved
}
Closure #lib::simpleAsyncAwait::':async_op' ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
ClosureCode {
  EntryOptional        1, 3, 0
  LoadConstant         r1, CP#5
  LoadConstant         r2, CP#5
  LoadConstant         r3, CP#5
  Frame                6
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  CheckStack           0
  Push                 r4
  LoadContextVar       0, 6
  StoreLocal           r5
  PushInt              0
  JumpIfNeStrict       L1
  Push                 r4
  Push                 r4
  StoreContextVar      0, 8
Try #0 start:
  Push                 r4
  PushInt              1
  StoreContextVar      0, 6
  Push                 r4
  Push                 r4
  StoreContextVar      0, 7
  Push                 r4
  LoadContextVar       0, 0
  Push                 r4
  LoadContextVar       0, 4
  Push                 r4
  LoadContextVar       0, 5
  Push                 r4
  LoadContextVar       0, 10
  DirectCall           CP#8, 4
  PopLocal             r8
  PushNull
  ReturnTOS
L6:
  Push                 r2
  JumpIfNull           L2
  Push                 r2
  Push                 r3
  Throw                1
L2:
  Push                 r4
  Push                 r1
  StoreContextVar      0, 9
  Push                 r4
  PushInt              2
  StoreContextVar      0, 6
  Push                 r4
  Push                 r4
  StoreContextVar      0, 7
  Push                 r4
  LoadContextVar       0, 1
  Push                 r4
  LoadContextVar       0, 4
  Push                 r4
  LoadContextVar       0, 5
  Push                 r4
  LoadContextVar       0, 10
  DirectCall           CP#8, 4
  PopLocal             r9
  PushNull
  ReturnTOS
L7:
  Push                 r2
  JumpIfNull           L3
  Push                 r2
  Push                 r3
  Throw                1
L3:
  Push                 r4
  Push                 r4
  LoadContextVar       0, 9
  Push                 r1
  InterfaceCall        CP#10, 2
  StoreContextVar      0, 3
  Jump                 L4
L4:
  Push                 r4
  LoadContextVar       0, 2
  Push                 r4
  LoadContextVar       0, 3
  DirectCall           CP#12, 2
  Drop1
  PushNull
  ReturnTOS
Try #0 end:
Try #0 handler:
  SetFrame             10
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  Push                 r4
  LoadContextVar       0, 8
  PopLocal             r4
  MoveSpecial          exception, r6
  MoveSpecial          stackTrace, r7
  Push                 r6
  PopLocal             r8
  Push                 r7
  PopLocal             r9
  Push                 r4
  LoadContextVar       0, 2
  Push                 r8
  Push                 r9
  InterfaceCall        CP#15, 3
  Drop1
  Jump                 L5
L5:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       0, 7
  PopLocal             r4
  Push                 r5
  PushInt              1
  JumpIfEqStrict       L6
  Jump                 L7
}


Function 'loops', static, reflectable, async
    parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
    return-type dart:async::Future < dart:core::int >

Bytecode {
  Entry                4
  CheckStack           0
  AllocateContext      0, 11
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 0
  Push                 r0
  PushConstant         CP#1
  PushConstant         CP#0
  AllocateT
  StoreLocal           r2
  Push                 r2
  DirectCall           CP#2, 1
  Drop1
  StoreContextVar      0, 1
  Push                 r0
  PushNull
  StoreContextVar      0, 2
  PushNull
  PopLocal             r3
  Push                 r0
  PushNull
  StoreContextVar      0, 3
  Push                 r0
  PushNull
  StoreContextVar      0, 4
  Push                 r0
  PushInt              0
  StoreContextVar      0, 5
  Push                 r0
  PushNull
  StoreContextVar      0, 6
  Push                 r0
  PushNull
  StoreContextVar      0, 7
  Push                 r0
  PushNull
  StoreContextVar      0, 8
  Push                 r0
  PushNull
  StoreContextVar      0, 9
  Push                 r0
  AllocateClosure      CP#4
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#26
  Push                 r2
  PushNull
  StoreFieldTOS        CP#28
  Push                 r2
  PushConstant         CP#30
  StoreFieldTOS        CP#31
  Push                 r2
  PushConstant         CP#4
  StoreFieldTOS        CP#33
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#6
  StoreContextVar      0, 10
  PushNull
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 10
  DirectCall           CP#35, 1
  StoreContextVar      0, 3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 10
  DirectCall           CP#37, 1
  StoreContextVar      0, 4
  Push                 r0
  LoadContextVar       0, 1
  Push                 r0
  LoadContextVar       0, 10
  DynamicCall          CP#39, 2
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  InterfaceCall        CP#41, 1
  ReturnTOS
}
ConstantPool {
  [0] = Class dart:async::_AsyncAwaitCompleter
  [1] = ObjectRef < dart:core::int >
  [2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
  [4] = ClosureFunction 0
  [5] = ObjectRef null
  [6] = InstanceField dart:core::_Closure::_context (field)
  [7] = Reserved
  [8] = InterfaceCall 'dart:core::Iterable::get:iterator', ArgDesc num-args 1, num-type-args 0, names []
  [9] = Reserved
  [10] = InterfaceCall 'dart:core::Iterator::moveNext', ArgDesc num-args 1, num-type-args 0, names []
  [11] = Reserved
  [12] = InterfaceCall 'dart:core::Iterator::get:current', ArgDesc num-args 1, num-type-args 0, names []
  [13] = Reserved
  [14] = DirectCall '#lib::foo', ArgDesc num-args 0, num-type-args 0, names []
  [15] = Reserved
  [16] = DirectCall 'dart:async::_awaitHelper', ArgDesc num-args 4, num-type-args 0, names []
  [17] = Reserved
  [18] = InterfaceCall 'dart:core::num::+', ArgDesc num-args 2, num-type-args 0, names []
  [19] = Reserved
  [20] = DirectCall 'dart:async::_completeOnAsyncReturn', ArgDesc num-args 2, num-type-args 0, names []
  [21] = Reserved
  [22] = Type dynamic
  [23] = InterfaceCall 'dart:async::Completer::completeError', ArgDesc num-args 3, num-type-args 0, names []
  [24] = Reserved
  [25] = EndClosureFunctionScope
  [26] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [27] = Reserved
  [28] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [29] = Reserved
  [30] = EmptyTypeArguments
  [31] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [32] = Reserved
  [33] = InstanceField dart:core::_Closure::_function (field)
  [34] = Reserved
  [35] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [36] = Reserved
  [37] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [38] = Reserved
  [39] = DynamicCall 'start', ArgDesc num-args 2, num-type-args 0, names []
  [40] = Reserved
  [41] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
  [42] = Reserved
}
Closure #lib::loops::':async_op' ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
ClosureCode {
  EntryOptional        1, 3, 0
  LoadConstant         r1, CP#5
  LoadConstant         r2, CP#5
  LoadConstant         r3, CP#5
  Frame                7
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  CheckStack           0
  Push                 r4
  LoadContextVar       0, 5
  StoreLocal           r5
  PushInt              0
  JumpIfNeStrict       L1
  Push                 r4
  Push                 r4
  StoreContextVar      0, 7
Try #0 start:
  AllocateContext      1, 1
  StoreLocal           r5
  Push                 r5
  Push                 r4
  StoreContextParent
  PopLocal             r4
  Push                 r4
  PushInt              0
  StoreContextVar      1, 0
  AllocateContext      2, 2
  StoreLocal           r5
  Push                 r5
  Push                 r4
  StoreContextParent
  PopLocal             r4
  Push                 r4
  PushInt              0
  StoreContextVar      2, 0
L6:
  CheckStack           1
  Push                 r4
  LoadContextVar       2, 0
  PushInt              10
  CompareIntLt
  JumpIfFalse          L2
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextVar       0, 0
  InterfaceCall        CP#8, 1
  PopLocal             r8
  Push                 r4
  Push                 r8
  StoreContextVar      2, 1
L5:
  CheckStack           2
  Push                 r4
  LoadContextVar       2, 1
  StoreLocal           r8
  InterfaceCall        CP#10, 1
  JumpIfFalse          L3
  AllocateContext      3, 1
  StoreLocal           r5
  Push                 r5
  Push                 r4
  StoreContextParent
  PopLocal             r4
  Push                 r4
  Push                 r8
  InterfaceCall        CP#12, 1
  StoreContextVar      3, 0
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextVar       1, 0
  StoreContextVar      0, 9
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  Push                 r4
  LoadContextParent
  LoadContextVar       2, 0
  Push                 r4
  LoadContextVar       3, 0
  AddInt
  StoreContextVar      0, 8
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  PushInt              1
  StoreContextVar      0, 5
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  Push                 r4
  StoreContextVar      0, 6
  DirectCall           CP#14, 0
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       0, 3
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       0, 4
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       0, 10
  DirectCall           CP#16, 4
  PopLocal             r10
  PushNull
  ReturnTOS
L11:
  Push                 r2
  JumpIfNull           L4
  Push                 r2
  Push                 r3
  Throw                1
L4:
  Push                 r4
  LoadContextParent
  LoadContextParent
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       0, 9
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       0, 8
  Push                 r1
  InterfaceCall        CP#18, 2
  InterfaceCall        CP#18, 2
  StoreContextVar      1, 0
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L5
L3:
  Push                 r4
  CloneContext         2, 2
  PopLocal             r4
  Push                 r4
  Push                 r4
  LoadContextVar       2, 0
  PushInt              1
  AddInt
  StoreLocal           r8
  StoreContextVar      2, 0
  Push                 r8
  Drop1
  Jump                 L6
L2:
  Push                 r4
  LoadContextParent
  PopLocal             r4
  PushInt              0
  PopLocal             r8
L8:
  CheckStack           1
  Push                 r8
  PushInt              10
  CompareIntLt
  JumpIfFalse          L7
  Push                 r4
  Push                 r4
  LoadContextVar       1, 0
  Push                 r8
  AddInt
  StoreContextVar      1, 0
  Push                 r8
  PushInt              1
  AddInt
  StoreLocal           r8
  Drop1
  Jump                 L8
L7:
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       1, 0
  StoreContextVar      0, 2
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L9
L9:
  Push                 r4
  LoadContextVar       0, 1
  Push                 r4
  LoadContextVar       0, 2
  DirectCall           CP#20, 2
  Drop1
  PushNull
  ReturnTOS
Try #0 end:
Try #0 handler:
  SetFrame             11
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  Push                 r4
  LoadContextVar       0, 7
  PopLocal             r4
  MoveSpecial          exception, r6
  MoveSpecial          stackTrace, r7
  Push                 r6
  PopLocal             r8
  Push                 r7
  PopLocal             r9
  Push                 r4
  LoadContextVar       0, 1
  Push                 r8
  Push                 r9
  InterfaceCall        CP#23, 3
  Drop1
  Jump                 L10
L10:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       0, 6
  PopLocal             r4
  Jump                 L11
}


Function 'tryCatchRethrow', static, reflectable, async
    parameters [dart:async::Future < dart:core::int > 'a', dart:async::Future < dart:core::int > 'b', dart:async::Future < dart:core::int > 'c'] (required: 3)
    return-type dart:async::Future < dart:core::int >

Bytecode {
  Entry                4
  CheckStack           0
  AllocateContext      0, 18
  PopLocal             r0
  Push                 r0
  Push                 FP[-7]
  StoreContextVar      0, 0
  Push                 r0
  Push                 FP[-6]
  StoreContextVar      0, 1
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 2
  Push                 r0
  PushConstant         CP#1
  PushConstant         CP#0
  AllocateT
  StoreLocal           r2
  Push                 r2
  DirectCall           CP#2, 1
  Drop1
  StoreContextVar      0, 3
  Push                 r0
  PushNull
  StoreContextVar      0, 4
  PushNull
  PopLocal             r3
  Push                 r0
  PushNull
  StoreContextVar      0, 5
  Push                 r0
  PushNull
  StoreContextVar      0, 6
  Push                 r0
  PushInt              0
  StoreContextVar      0, 7
  Push                 r0
  PushNull
  StoreContextVar      0, 8
  Push                 r0
  PushNull
  StoreContextVar      0, 9
  Push                 r0
  PushNull
  StoreContextVar      0, 10
  Push                 r0
  PushNull
  StoreContextVar      0, 11
  Push                 r0
  PushNull
  StoreContextVar      0, 12
  Push                 r0
  PushNull
  StoreContextVar      0, 13
  Push                 r0
  PushNull
  StoreContextVar      0, 14
  Push                 r0
  PushNull
  StoreContextVar      0, 15
  Push                 r0
  PushNull
  StoreContextVar      0, 16
  Push                 r0
  AllocateClosure      CP#4
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#24
  Push                 r2
  PushNull
  StoreFieldTOS        CP#26
  Push                 r2
  PushConstant         CP#28
  StoreFieldTOS        CP#29
  Push                 r2
  PushConstant         CP#4
  StoreFieldTOS        CP#31
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#6
  StoreContextVar      0, 17
  PushNull
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 17
  DirectCall           CP#33, 1
  StoreContextVar      0, 5
  Push                 r0
  Push                 r0
  LoadContextVar       0, 17
  DirectCall           CP#35, 1
  StoreContextVar      0, 6
  Push                 r0
  LoadContextVar       0, 3
  Push                 r0
  LoadContextVar       0, 17
  DynamicCall          CP#37, 2
  Drop1
  Push                 r0
  LoadContextVar       0, 3
  InterfaceCall        CP#39, 1
  ReturnTOS
}
ConstantPool {
  [0] = Class dart:async::_AsyncAwaitCompleter
  [1] = ObjectRef < dart:core::int >
  [2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
  [4] = ClosureFunction 0
  [5] = ObjectRef null
  [6] = InstanceField dart:core::_Closure::_context (field)
  [7] = Reserved
  [8] = DirectCall 'dart:async::_awaitHelper', ArgDesc num-args 4, num-type-args 0, names []
  [9] = Reserved
  [10] = InterfaceCall 'dart:core::num::+', ArgDesc num-args 2, num-type-args 0, names []
  [11] = Reserved
  [12] = Type dynamic
  [13] = Type dart:core::Error
  [14] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
  [15] = Reserved
  [16] = ObjectRef 'fin'
  [17] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [18] = Reserved
  [19] = DirectCall 'dart:async::_completeOnAsyncReturn', ArgDesc num-args 2, num-type-args 0, names []
  [20] = Reserved
  [21] = InterfaceCall 'dart:async::Completer::completeError', ArgDesc num-args 3, num-type-args 0, names []
  [22] = Reserved
  [23] = EndClosureFunctionScope
  [24] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [25] = Reserved
  [26] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [27] = Reserved
  [28] = EmptyTypeArguments
  [29] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [30] = Reserved
  [31] = InstanceField dart:core::_Closure::_function (field)
  [32] = Reserved
  [33] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [34] = Reserved
  [35] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [36] = Reserved
  [37] = DynamicCall 'start', ArgDesc num-args 2, num-type-args 0, names []
  [38] = Reserved
  [39] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
  [40] = Reserved
}
Closure #lib::tryCatchRethrow::':async_op' ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
ClosureCode {
  EntryOptional        1, 3, 0
  LoadConstant         r1, CP#5
  LoadConstant         r2, CP#5
  LoadConstant         r3, CP#5
  Frame                10
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  CheckStack           0
  Push                 r4
  LoadContextVar       0, 7
  StoreLocal           r5
  PushInt              0
  JumpIfNeStrict       L1
  Push                 r4
  Push                 r4
  StoreContextVar      0, 9
Try #0 start:
  AllocateContext      1, 2
  StoreLocal           r5
  Push                 r5
  Push                 r4
  StoreContextParent
  PopLocal             r4
  Push                 r4
  PushInt              1
  StoreContextVar      1, 0
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      0, 10
Try #1 start:
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      0, 11
Try #2 start:
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       1, 0
  StoreContextVar      0, 14
  Push                 r4
  LoadContextParent
  PushInt              1
  StoreContextVar      0, 7
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      0, 8
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 0
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 5
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 6
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 17
  DirectCall           CP#8, 4
  PopLocal             r13
  PushNull
  ReturnTOS
L13:
  Push                 r2
  JumpIfNull           L2
  Push                 r2
  Push                 r3
  Throw                1
L2:
  Push                 r4
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 14
  Push                 r1
  InterfaceCall        CP#10, 2
  StoreContextVar      1, 0
  Jump                 L3
Try #2 end:
Try #2 handler:
  SetFrame             14
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  Push                 r4
  LoadContextVar       0, 11
  PopLocal             r4
  MoveSpecial          exception, r10
  MoveSpecial          stackTrace, r11
  Push                 r4
  LoadContextParent
  Push                 r10
  StoreContextVar      0, 12
  Push                 r4
  LoadContextParent
  Push                 r11
  StoreContextVar      0, 13
  Push                 r4
  Push                 r10
  StoreContextVar      1, 1
  Push                 r4
  LoadContextVar       1, 1
  PushConstant         CP#13
  InterfaceCall        CP#14, 2
  JumpIfFalse          L4
  Push                 r4
  LoadContextParent
  PushInt              42
  StoreContextVar      0, 4
  Jump                 L5
L4:
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       1, 0
  StoreContextVar      0, 15
  Push                 r4
  LoadContextParent
  PushInt              2
  StoreContextVar      0, 7
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      0, 8
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 1
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 5
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 6
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 17
  DirectCall           CP#8, 4
  PopLocal             r13
  PushNull
  ReturnTOS
L14:
  Push                 r2
  JumpIfNull           L6
  Push                 r2
  Push                 r3
  Throw                1
L6:
  Push                 r4
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 15
  Push                 r1
  InterfaceCall        CP#10, 2
  StoreContextVar      1, 0
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 12
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 13
  Throw                1
L3:
  Jump                 L7
Try #1 end:
Try #1 handler:
  SetFrame             14
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  Push                 r4
  LoadContextVar       0, 10
  PopLocal             r4
  MoveSpecial          exception, r8
  MoveSpecial          stackTrace, r9
  Push                 r4
  LoadContextParent
  Push                 r8
  StoreContextVar      0, 12
  Push                 r4
  LoadContextParent
  Push                 r9
  StoreContextVar      0, 13
  PushConstant         CP#16
  DirectCall           CP#17, 1
  Drop1
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       1, 0
  StoreContextVar      0, 16
  Push                 r4
  LoadContextParent
  PushInt              3
  StoreContextVar      0, 7
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      0, 8
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 2
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 5
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 6
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 17
  DirectCall           CP#8, 4
  PopLocal             r12
  PushNull
  ReturnTOS
L15:
  Push                 r2
  JumpIfNull           L8
  Push                 r2
  Push                 r3
  Throw                1
L8:
  Push                 r4
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 16
  Push                 r1
  InterfaceCall        CP#10, 2
  StoreContextVar      1, 0
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       1, 0
  StoreContextVar      0, 4
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L9
L5:
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  Push                 r4
  LoadContextVar       0, 10
  PopLocal             r4
  PushConstant         CP#16
  DirectCall           CP#17, 1
  Drop1
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       1, 0
  StoreContextVar      0, 16
  Push                 r4
  LoadContextParent
  PushInt              4
  StoreContextVar      0, 7
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      0, 8
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 2
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 5
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 6
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 17
  DirectCall           CP#8, 4
  PopLocal             r12
  PushNull
  ReturnTOS
L16:
  Push                 r2
  JumpIfNull           L10
  Push                 r2
  Push                 r3
  Throw                1
L10:
  Push                 r4
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 16
  Push                 r1
  InterfaceCall        CP#10, 2
  StoreContextVar      1, 0
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       1, 0
  StoreContextVar      0, 4
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L9
L7:
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  Push                 r4
  LoadContextVar       0, 10
  PopLocal             r4
  PushConstant         CP#16
  DirectCall           CP#17, 1
  Drop1
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       1, 0
  StoreContextVar      0, 16
  Push                 r4
  LoadContextParent
  PushInt              5
  StoreContextVar      0, 7
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      0, 8
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 2
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 5
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 6
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 17
  DirectCall           CP#8, 4
  PopLocal             r12
  PushNull
  ReturnTOS
L17:
  Push                 r2
  JumpIfNull           L11
  Push                 r2
  Push                 r3
  Throw                1
L11:
  Push                 r4
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 16
  Push                 r1
  InterfaceCall        CP#10, 2
  StoreContextVar      1, 0
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       1, 0
  StoreContextVar      0, 4
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L9
L9:
  Push                 r4
  LoadContextVar       0, 3
  Push                 r4
  LoadContextVar       0, 4
  DirectCall           CP#19, 2
  Drop1
  PushNull
  ReturnTOS
Try #0 end:
Try #0 handler:
  SetFrame             14
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  Push                 r4
  LoadContextVar       0, 9
  PopLocal             r4
  MoveSpecial          exception, r6
  MoveSpecial          stackTrace, r7
  Push                 r6
  PopLocal             r8
  Push                 r7
  PopLocal             r9
  Push                 r4
  LoadContextVar       0, 3
  Push                 r8
  Push                 r9
  InterfaceCall        CP#21, 3
  Drop1
  Jump                 L12
L12:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       0, 8
  PopLocal             r4
  Push                 r5
  PushInt              1
  JumpIfEqStrict       L13
  Push                 r5
  PushInt              2
  JumpIfEqStrict       L14
  Push                 r5
  PushInt              3
  JumpIfEqStrict       L15
  Push                 r5
  PushInt              4
  JumpIfEqStrict       L16
  Jump                 L17
}


Function 'closure', static, reflectable, debuggable
    parameters [dart:async::Future < dart:core::int > 'a'] (required: 1)
    return-type dynamic

Bytecode {
  Entry                4
  CheckStack           0
  AllocateContext      0, 2
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 0
  Push                 r0
  PushInt              3
  StoreContextVar      0, 1
  AllocateClosure      CP#0
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#20
  Push                 r3
  PushNull
  StoreFieldTOS        CP#22
  Push                 r3
  PushConstant         CP#24
  StoreFieldTOS        CP#25
  Push                 r3
  PushConstant         CP#0
  StoreFieldTOS        CP#27
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r2
  Push                 r2
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = Class dart:async::_AsyncAwaitCompleter
  [4] = ObjectRef < dart:core::int >
  [5] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [6] = Reserved
  [7] = ClosureFunction 1
  [8] = ObjectRef null
  [9] = DirectCall 'dart:async::_awaitHelper', ArgDesc num-args 4, num-type-args 0, names []
  [10] = Reserved
  [11] = Type dynamic
  [12] = ObjectRef 'fin'
  [13] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [14] = Reserved
  [15] = DirectCall 'dart:async::_completeOnAsyncReturn', ArgDesc num-args 2, num-type-args 0, names []
  [16] = Reserved
  [17] = InterfaceCall 'dart:async::Completer::completeError', ArgDesc num-args 3, num-type-args 0, names []
  [18] = Reserved
  [19] = EndClosureFunctionScope
  [20] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [21] = Reserved
  [22] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [23] = Reserved
  [24] = EmptyTypeArguments
  [25] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [26] = Reserved
  [27] = InstanceField dart:core::_Closure::_function (field)
  [28] = Reserved
  [29] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [30] = Reserved
  [31] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [32] = Reserved
  [33] = DynamicCall 'start', ArgDesc num-args 2, num-type-args 0, names []
  [34] = Reserved
  [35] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
  [36] = Reserved
  [37] = EndClosureFunctionScope
}
Closure #lib::closure::'nested' async () -> dart:async::Future < dart:core::int >
ClosureCode {
  EntryFixed           1, 4
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  CheckStack           0
  AllocateContext      1, 9
  StoreLocal           r1
  Push                 r1
  Push                 r0
  StoreContextParent
  PopLocal             r0
  Push                 r0
  PushConstant         CP#4
  PushConstant         CP#3
  AllocateT
  StoreLocal           r2
  Push                 r2
  DirectCall           CP#5, 1
  Drop1
  StoreContextVar      1, 0
  Push                 r0
  PushNull
  StoreContextVar      1, 1
  PushNull
  PopLocal             r3
  Push                 r0
  PushNull
  StoreContextVar      1, 2
  Push                 r0
  PushNull
  StoreContextVar      1, 3
  Push                 r0
  PushInt              0
  StoreContextVar      1, 4
  Push                 r0
  PushNull
  StoreContextVar      1, 5
  Push                 r0
  PushNull
  StoreContextVar      1, 6
  Push                 r0
  PushNull
  StoreContextVar      1, 7
  Push                 r0
  AllocateClosure      CP#7
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#20
  Push                 r2
  PushNull
  StoreFieldTOS        CP#22
  Push                 r2
  PushConstant         CP#24
  StoreFieldTOS        CP#25
  Push                 r2
  PushConstant         CP#7
  StoreFieldTOS        CP#27
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#1
  StoreContextVar      1, 8
  PushNull
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       1, 8
  DirectCall           CP#29, 1
  StoreContextVar      1, 2
  Push                 r0
  Push                 r0
  LoadContextVar       1, 8
  DirectCall           CP#31, 1
  StoreContextVar      1, 3
  Push                 r0
  LoadContextVar       1, 0
  Push                 r0
  LoadContextVar       1, 8
  DynamicCall          CP#33, 2
  Drop1
  Push                 r0
  LoadContextVar       1, 0
  InterfaceCall        CP#35, 1
  ReturnTOS
}

Closure #lib::closure::Closure/0::':async_op' ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
ClosureCode {
  EntryOptional        1, 3, 0
  LoadConstant         r1, CP#8
  LoadConstant         r2, CP#8
  LoadConstant         r3, CP#8
  Frame                8
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  CheckStack           0
  Push                 r4
  LoadContextVar       1, 4
  StoreLocal           r5
  PushInt              0
  JumpIfNeStrict       L1
  Push                 r4
  Push                 r4
  StoreContextVar      1, 6
Try #0 start:
  AllocateContext      2, 1
  StoreLocal           r5
  Push                 r5
  Push                 r4
  StoreContextParent
  PopLocal             r4
  Push                 r4
  PushInt              4
  StoreContextVar      2, 0
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      1, 7
Try #1 start:
  Push                 r4
  LoadContextParent
  LoadContextParent
  PushInt              5
  StoreContextVar      0, 1
  Push                 r4
  LoadContextParent
  PushInt              1
  StoreContextVar      1, 4
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      1, 5
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextVar       0, 0
  Push                 r4
  LoadContextParent
  LoadContextVar       1, 2
  Push                 r4
  LoadContextParent
  LoadContextVar       1, 3
  Push                 r4
  LoadContextParent
  LoadContextVar       1, 8
  DirectCall           CP#9, 4
  PopLocal             r11
  PushNull
  ReturnTOS
L6:
  Push                 r2
  JumpIfNull           L2
  Push                 r2
  Push                 r3
  Throw                1
L2:
  Push                 r4
  Push                 r1
  StoreContextVar      2, 0
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextVar       0, 1
  Push                 r4
  LoadContextVar       2, 0
  AddInt
  StoreContextVar      1, 1
  Jump                 L3
Try #1 end:
Try #1 handler:
  SetFrame             12
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  Push                 r4
  LoadContextVar       1, 7
  PopLocal             r4
  MoveSpecial          exception, r8
  MoveSpecial          stackTrace, r9
  PushConstant         CP#12
  DirectCall           CP#13, 1
  Drop1
  Push                 r8
  Push                 r9
  Throw                1
L3:
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  Push                 r4
  LoadContextVar       1, 7
  PopLocal             r4
  PushConstant         CP#12
  DirectCall           CP#13, 1
  Drop1
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L4
L4:
  Push                 r4
  LoadContextVar       1, 0
  Push                 r4
  LoadContextVar       1, 1
  DirectCall           CP#15, 2
  Drop1
  PushNull
  ReturnTOS
Try #0 end:
Try #0 handler:
  SetFrame             12
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  Push                 r4
  LoadContextVar       1, 6
  PopLocal             r4
  MoveSpecial          exception, r6
  MoveSpecial          stackTrace, r7
  Push                 r6
  PopLocal             r8
  Push                 r7
  PopLocal             r9
  Push                 r4
  LoadContextVar       1, 0
  Push                 r8
  Push                 r9
  InterfaceCall        CP#17, 3
  Drop1
  Jump                 L5
L5:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       1, 5
  PopLocal             r4
  Jump                 L6
}


Function 'testAssert', static, reflectable, async
    parameters [dart:async::Future < dart:core::int > 'a'] (required: 1)
    return-type dart:async::Future < dart:core::int >

Bytecode {
  Entry                4
  CheckStack           0
  AllocateContext      0, 9
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 0
  Push                 r0
  PushConstant         CP#1
  PushConstant         CP#0
  AllocateT
  StoreLocal           r2
  Push                 r2
  DirectCall           CP#2, 1
  Drop1
  StoreContextVar      0, 1
  Push                 r0
  PushNull
  StoreContextVar      0, 2
  PushNull
  PopLocal             r3
  Push                 r0
  PushNull
  StoreContextVar      0, 3
  Push                 r0
  PushNull
  StoreContextVar      0, 4
  Push                 r0
  PushInt              0
  StoreContextVar      0, 5
  Push                 r0
  PushNull
  StoreContextVar      0, 6
  Push                 r0
  PushNull
  StoreContextVar      0, 7
  Push                 r0
  AllocateClosure      CP#4
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#20
  Push                 r2
  PushNull
  StoreFieldTOS        CP#22
  Push                 r2
  PushConstant         CP#24
  StoreFieldTOS        CP#25
  Push                 r2
  PushConstant         CP#4
  StoreFieldTOS        CP#27
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#6
  StoreContextVar      0, 8
  PushNull
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 8
  DirectCall           CP#29, 1
  StoreContextVar      0, 3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 8
  DirectCall           CP#31, 1
  StoreContextVar      0, 4
  Push                 r0
  LoadContextVar       0, 1
  Push                 r0
  LoadContextVar       0, 8
  DynamicCall          CP#33, 2
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  InterfaceCall        CP#35, 1
  ReturnTOS
}
ConstantPool {
  [0] = Class dart:async::_AsyncAwaitCompleter
  [1] = ObjectRef < dart:core::int >
  [2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
  [4] = ClosureFunction 0
  [5] = ObjectRef null
  [6] = InstanceField dart:core::_Closure::_context (field)
  [7] = Reserved
  [8] = DirectCall 'dart:async::_awaitHelper', ArgDesc num-args 4, num-type-args 0, names []
  [9] = Reserved
  [10] = InterfaceCall 'dart:core::num::==', ArgDesc num-args 2, num-type-args 0, names []
  [11] = Reserved
  [12] = DirectCall 'dart:core::_AssertionError::_throwNew', ArgDesc num-args 3, num-type-args 0, names []
  [13] = Reserved
  [14] = DirectCall 'dart:async::_completeOnAsyncReturn', ArgDesc num-args 2, num-type-args 0, names []
  [15] = Reserved
  [16] = Type dynamic
  [17] = InterfaceCall 'dart:async::Completer::completeError', ArgDesc num-args 3, num-type-args 0, names []
  [18] = Reserved
  [19] = EndClosureFunctionScope
  [20] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [21] = Reserved
  [22] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [23] = Reserved
  [24] = EmptyTypeArguments
  [25] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [26] = Reserved
  [27] = InstanceField dart:core::_Closure::_function (field)
  [28] = Reserved
  [29] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [30] = Reserved
  [31] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [32] = Reserved
  [33] = DynamicCall 'start', ArgDesc num-args 2, num-type-args 0, names []
  [34] = Reserved
  [35] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
  [36] = Reserved
}
Closure #lib::testAssert::':async_op' ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
ClosureCode {
  EntryOptional        1, 3, 0
  LoadConstant         r1, CP#5
  LoadConstant         r2, CP#5
  LoadConstant         r3, CP#5
  Frame                6
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  CheckStack           0
  Push                 r4
  LoadContextVar       0, 5
  StoreLocal           r5
  PushInt              0
  JumpIfNeStrict       L1
  Push                 r4
  Push                 r4
  StoreContextVar      0, 7
Try #0 start:
  JumpIfNoAsserts      L2
  Push                 r4
  PushInt              1
  StoreContextVar      0, 5
  Push                 r4
  Push                 r4
  StoreContextVar      0, 6
  Push                 r4
  LoadContextVar       0, 0
  Push                 r4
  LoadContextVar       0, 3
  Push                 r4
  LoadContextVar       0, 4
  Push                 r4
  LoadContextVar       0, 8
  DirectCall           CP#8, 4
  PopLocal             r8
  PushNull
  ReturnTOS
L6:
  Push                 r2
  JumpIfNull           L3
  Push                 r2
  Push                 r3
  Throw                1
L3:
  JumpIfNoAsserts      L2
  Push                 r1
  PushInt              42
  InterfaceCall        CP#10, 2
  AssertBoolean        0
  JumpIfTrue           L2
  PushInt              0
  PushInt              0
  PushNull
  DirectCall           CP#12, 3
  Drop1
L2:
  Push                 r4
  PushInt              7
  StoreContextVar      0, 2
  Jump                 L4
L4:
  Push                 r4
  LoadContextVar       0, 1
  Push                 r4
  LoadContextVar       0, 2
  DirectCall           CP#14, 2
  Drop1
  PushNull
  ReturnTOS
Try #0 end:
Try #0 handler:
  SetFrame             10
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  Push                 r4
  LoadContextVar       0, 7
  PopLocal             r4
  MoveSpecial          exception, r6
  MoveSpecial          stackTrace, r7
  Push                 r6
  PopLocal             r8
  Push                 r7
  PopLocal             r9
  Push                 r4
  LoadContextVar       0, 1
  Push                 r8
  Push                 r9
  InterfaceCall        CP#17, 3
  Drop1
  Jump                 L5
L5:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       0, 6
  PopLocal             r4
  Jump                 L6
}


Function 'main', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type dynamic

Bytecode {
  Entry                0
  CheckStack           0
  PushNull
  ReturnTOS
}
ConstantPool {
}


}
]library #lib from "#lib" as #lib {

  import "dart:async";

  static field (dart.async::Future<dart.core::int*>*) →* dart.async::Future<dart.core::Null?>* asyncInFieldInitializer = (dart.async::Future<dart.core::int*>* x) → dart.async::Future<dart.core::Null?>* /* originally async */ {
    final dart.async::_AsyncAwaitCompleter<dart.core::Null?>* :async_completer = new dart.async::_AsyncAwaitCompleter::•<dart.core::Null?>();
    dart.async::FutureOr<dart.core::Null?>* :return_value;
    dynamic :async_stack_trace;
    dynamic :async_op_then;
    dynamic :async_op_error;
    dynamic :await_jump_var = 0;
    dynamic :await_ctx_var;
    dynamic :saved_try_context_var0;
    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
      try {
        #L1:
        {
          [yield] let dynamic #t1 = dart.async::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
          :result;
        }
        dart.async::_completeOnAsyncReturn(:async_completer, :return_value);
        return;
      }
      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
        :async_completer.{dart.async::Completer::completeError}(:exception, :stack_trace);
      }
    :async_stack_trace = dart.async::_asyncStackTraceHelper(:async_op);
    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
    :async_completer.start(:async_op);
    return :async_completer.{dart.async::Completer::future};
  };
  static method foo() → dart.async::Future<dart.core::int*>* /* originally async */ {
    final dart.async::_AsyncAwaitCompleter<dart.core::int*>* :async_completer = new dart.async::_AsyncAwaitCompleter::•<dart.core::int*>();
    dart.async::FutureOr<dart.core::int*>* :return_value;
    dynamic :async_stack_trace;
    dynamic :async_op_then;
    dynamic :async_op_error;
    dynamic :await_jump_var = 0;
    dynamic :await_ctx_var;
    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
      try {
        #L2:
        {
          :return_value = 42;
          break #L2;
        }
        dart.async::_completeOnAsyncReturn(:async_completer, :return_value);
        return;
      }
      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
        :async_completer.{dart.async::Completer::completeError}(:exception, :stack_trace);
      }
    :async_stack_trace = dart.async::_asyncStackTraceHelper(:async_op);
    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
    :async_completer.start(:async_op);
    return :async_completer.{dart.async::Completer::future};
  }
  static method simpleAsyncAwait(dart.async::Future<dart.core::int*>* a, dart.async::Future<dart.core::int*>* b) → dart.async::Future<dart.core::int*>* /* originally async */ {
    final dart.async::_AsyncAwaitCompleter<dart.core::int*>* :async_completer = new dart.async::_AsyncAwaitCompleter::•<dart.core::int*>();
    dart.async::FutureOr<dart.core::int*>* :return_value;
    dynamic :async_stack_trace;
    dynamic :async_op_then;
    dynamic :async_op_error;
    dynamic :await_jump_var = 0;
    dynamic :await_ctx_var;
    dynamic :saved_try_context_var0;
    dynamic :async_temporary_0;
    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
      try {
        #L3:
        {
          [yield] let dynamic #t2 = dart.async::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
          :async_temporary_0 = :result;
          [yield] let dynamic #t3 = dart.async::_awaitHelper(b, :async_op_then, :async_op_error, :async_op) in null;
          :return_value = :async_temporary_0.{dart.core::num::+}(:result);
          break #L3;
        }
        dart.async::_completeOnAsyncReturn(:async_completer, :return_value);
        return;
      }
      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
        :async_completer.{dart.async::Completer::completeError}(:exception, :stack_trace);
      }
    :async_stack_trace = dart.async::_asyncStackTraceHelper(:async_op);
    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
    :async_completer.start(:async_op);
    return :async_completer.{dart.async::Completer::future};
  }
  static method loops(dart.core::List<dart.core::int*>* list) → dart.async::Future<dart.core::int*>* /* originally async */ {
    final dart.async::_AsyncAwaitCompleter<dart.core::int*>* :async_completer = new dart.async::_AsyncAwaitCompleter::•<dart.core::int*>();
    dart.async::FutureOr<dart.core::int*>* :return_value;
    dynamic :async_stack_trace;
    dynamic :async_op_then;
    dynamic :async_op_error;
    dynamic :await_jump_var = 0;
    dynamic :await_ctx_var;
    dynamic :saved_try_context_var0;
    dynamic :async_temporary_0;
    dynamic :async_temporary_1;
    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
      try {
        #L4:
        {
          dart.core::int* sum = 0;
          for (dart.core::int* i = 0; i.{dart.core::num::<}(10); i = i.{dart.core::num::+}(1)) {
            for (dart.core::int* j in list) {
              :async_temporary_1 = sum;
              :async_temporary_0 = i.{dart.core::num::+}(j);
              [yield] let dynamic #t4 = dart.async::_awaitHelper(#lib::foo(), :async_op_then, :async_op_error, :async_op) in null;
              sum = :async_temporary_1.{dart.core::num::+}(:async_temporary_0.{dart.core::num::+}(:result));
            }
          }
          for (dart.core::int* k = 0; k.{dart.core::num::<}(10); k = k.{dart.core::num::+}(1)) {
            sum = sum.{dart.core::num::+}(k);
          }
          :return_value = sum;
          break #L4;
        }
        dart.async::_completeOnAsyncReturn(:async_completer, :return_value);
        return;
      }
      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
        :async_completer.{dart.async::Completer::completeError}(:exception, :stack_trace);
      }
    :async_stack_trace = dart.async::_asyncStackTraceHelper(:async_op);
    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
    :async_completer.start(:async_op);
    return :async_completer.{dart.async::Completer::future};
  }
  static method tryCatchRethrow(dart.async::Future<dart.core::int*>* a, dart.async::Future<dart.core::int*>* b, dart.async::Future<dart.core::int*>* c) → dart.async::Future<dart.core::int*>* /* originally async */ {
    final dart.async::_AsyncAwaitCompleter<dart.core::int*>* :async_completer = new dart.async::_AsyncAwaitCompleter::•<dart.core::int*>();
    dart.async::FutureOr<dart.core::int*>* :return_value;
    dynamic :async_stack_trace;
    dynamic :async_op_then;
    dynamic :async_op_error;
    dynamic :await_jump_var = 0;
    dynamic :await_ctx_var;
    dynamic :saved_try_context_var0;
    dynamic :saved_try_context_var1;
    dynamic :saved_try_context_var2;
    dynamic :exception0;
    dynamic :stack_trace0;
    dynamic :async_temporary_0;
    dynamic :async_temporary_1;
    dynamic :async_temporary_2;
    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
      try {
        #L5:
        {
          dart.core::int* x = 1;
          try
            try {
              :async_temporary_0 = x;
              [yield] let dynamic #t5 = dart.async::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
              x = :async_temporary_0.{dart.core::num::+}(:result);
            }
            on dynamic catch(final dynamic e) {
              if(e is dart.core::Error*) {
                :return_value = 42;
                break #L5;
              }
              :async_temporary_1 = x;
              [yield] let dynamic #t6 = dart.async::_awaitHelper(b, :async_op_then, :async_op_error, :async_op) in null;
              x = :async_temporary_1.{dart.core::num::+}(:result);
              rethrow;
            }
          finally {
            dart.core::print("fin");
            :async_temporary_2 = x;
            [yield] let dynamic #t7 = dart.async::_awaitHelper(c, :async_op_then, :async_op_error, :async_op) in null;
            x = :async_temporary_2.{dart.core::num::+}(:result);
            :return_value = x;
            break #L5;
          }
        }
        dart.async::_completeOnAsyncReturn(:async_completer, :return_value);
        return;
      }
      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
        :async_completer.{dart.async::Completer::completeError}(:exception, :stack_trace);
      }
    :async_stack_trace = dart.async::_asyncStackTraceHelper(:async_op);
    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
    :async_completer.start(:async_op);
    return :async_completer.{dart.async::Completer::future};
  }
  static method closure(dart.async::Future<dart.core::int*>* a) → dynamic {
    dart.core::int* x = 3;
    function nested() → dart.async::Future<dart.core::int*>* /* originally async */ {
      final dart.async::_AsyncAwaitCompleter<dart.core::int*>* :async_completer = new dart.async::_AsyncAwaitCompleter::•<dart.core::int*>();
      dart.async::FutureOr<dart.core::int*>* :return_value;
      dynamic :async_stack_trace;
      dynamic :async_op_then;
      dynamic :async_op_error;
      dynamic :await_jump_var = 0;
      dynamic :await_ctx_var;
      dynamic :saved_try_context_var0;
      dynamic :saved_try_context_var1;
      function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
        try {
          #L6:
          {
            dart.core::int* y = 4;
            try {
              x = 5;
              [yield] let dynamic #t8 = dart.async::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
              y = :result;
              :return_value = x.{dart.core::num::+}(y);
              break #L6;
            }
            finally {
              dart.core::print("fin");
            }
          }
          dart.async::_completeOnAsyncReturn(:async_completer, :return_value);
          return;
        }
        on dynamic catch(dynamic :exception, dynamic :stack_trace) {
          :async_completer.{dart.async::Completer::completeError}(:exception, :stack_trace);
        }
      :async_stack_trace = dart.async::_asyncStackTraceHelper(:async_op);
      :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
      :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
      :async_completer.start(:async_op);
      return :async_completer.{dart.async::Completer::future};
    }
    return nested;
  }
  static method testAssert(dart.async::Future<dart.core::int*>* a) → dart.async::Future<dart.core::int*>* /* originally async */ {
    final dart.async::_AsyncAwaitCompleter<dart.core::int*>* :async_completer = new dart.async::_AsyncAwaitCompleter::•<dart.core::int*>();
    dart.async::FutureOr<dart.core::int*>* :return_value;
    dynamic :async_stack_trace;
    dynamic :async_op_then;
    dynamic :async_op_error;
    dynamic :await_jump_var = 0;
    dynamic :await_ctx_var;
    dynamic :saved_try_context_var0;
    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
      try {
        #L7:
        {
          assert {
            [yield] let dynamic #t9 = dart.async::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
            assert(:result.{dart.core::num::==}(42));
          }
          :return_value = 7;
          break #L7;
        }
        dart.async::_completeOnAsyncReturn(:async_completer, :return_value);
        return;
      }
      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
        :async_completer.{dart.async::Completer::completeError}(:exception, :stack_trace);
      }
    :async_stack_trace = dart.async::_asyncStackTraceHelper(:async_op);
    :async_op_then = dart.async::_asyncThenWrapperHelper(:async_op);
    :async_op_error = dart.async::_asyncErrorWrapperHelper(:async_op);
    :async_completer.start(:async_op);
    return :async_completer.{dart.async::Completer::future};
  }
  static method main() → dynamic {}
}
