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::_asyncStackTraceHelper', ArgDesc num-args 1, num-type-args 0, names []
  [30] = Reserved
  [31] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [32] = Reserved
  [33] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [34] = Reserved
  [35] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
  [36] = ICData dynamic target-name 'start', arg-desc CP#35
  [37] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
  [38] = Reserved
  [39] = EndClosureFunctionScope
}
Closure #lib::asyncInFieldInitializer (field)::'<anonymous closure>' (dart:async::Future < dart:core::int > x) -> dart:async::Future < dart:core::Null >
ClosureCode {
  EntryFixed           2, 4
  CheckStack           0
  Push                 FP[-6]
  LoadFieldTOS         CP#1
  PopLocal             r0
  AllocateContext      0, 9
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 0
  Push                 FP[-5]
  PushConstant         CP#3
  PushNull
  PushNull
  PushConstant         CP#4
  AssertAssignable     0, CP#5
  Drop1
  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
  Push                 r0
  LoadContextVar       0, 8
  DirectCall           CP#29, 1
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 8
  DirectCall           CP#31, 1
  StoreContextVar      0, 3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 8
  DirectCall           CP#33, 1
  StoreContextVar      0, 4
  Push                 r0
  LoadContextVar       0, 1
  Push                 r0
  LoadContextVar       0, 8
  DynamicCall          CP#36, 2
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  InterfaceCall        CP#37, 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
  CheckStack           0
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  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
  Push                 r6
  DirectCall           CP#23, 1
  PopLocal             r3
  Push                 r6
  DirectCall           CP#25, 1
  PopLocal             r4
  Push                 r6
  DirectCall           CP#27, 1
  PopLocal             r5
  Push                 r0
  LoadContextVar       0, 0
  Push                 r6
  DynamicCall          CP#30, 2
  Drop1
  Push                 r0
  LoadContextVar       0, 0
  InterfaceCall        CP#31, 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::_asyncStackTraceHelper', ArgDesc num-args 1, num-type-args 0, names []
  [24] = Reserved
  [25] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [26] = Reserved
  [27] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [28] = Reserved
  [29] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
  [30] = ICData dynamic target-name 'start', arg-desc CP#29
  [31] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
  [32] = 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
  CheckStack           0
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  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
  Push                 r0
  LoadContextVar       0, 10
  DirectCall           CP#27, 1
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 10
  DirectCall           CP#29, 1
  StoreContextVar      0, 4
  Push                 r0
  Push                 r0
  LoadContextVar       0, 10
  DirectCall           CP#31, 1
  StoreContextVar      0, 5
  Push                 r0
  LoadContextVar       0, 2
  Push                 r0
  LoadContextVar       0, 10
  DynamicCall          CP#34, 2
  Drop1
  Push                 r0
  LoadContextVar       0, 2
  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: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::_asyncStackTraceHelper', ArgDesc num-args 1, num-type-args 0, names []
  [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] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
  [34] = ICData dynamic target-name 'start', arg-desc CP#33
  [35] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
  [36] = 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
  CheckStack           0
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  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
  Push                 r0
  LoadContextVar       0, 10
  DirectCall           CP#35, 1
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 10
  DirectCall           CP#37, 1
  StoreContextVar      0, 3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 10
  DirectCall           CP#39, 1
  StoreContextVar      0, 4
  Push                 r0
  LoadContextVar       0, 1
  Push                 r0
  LoadContextVar       0, 10
  DynamicCall          CP#42, 2
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  InterfaceCall        CP#43, 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::_asyncStackTraceHelper', ArgDesc num-args 1, num-type-args 0, names []
  [36] = Reserved
  [37] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [38] = Reserved
  [39] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [40] = Reserved
  [41] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
  [42] = ICData dynamic target-name 'start', arg-desc CP#41
  [43] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
  [44] = 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
  CheckStack           0
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  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
  Push                 r0
  LoadContextVar       0, 17
  DirectCall           CP#33, 1
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 17
  DirectCall           CP#35, 1
  StoreContextVar      0, 5
  Push                 r0
  Push                 r0
  LoadContextVar       0, 17
  DirectCall           CP#37, 1
  StoreContextVar      0, 6
  Push                 r0
  LoadContextVar       0, 3
  Push                 r0
  LoadContextVar       0, 17
  DynamicCall          CP#40, 2
  Drop1
  Push                 r0
  LoadContextVar       0, 3
  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] = 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::_asyncStackTraceHelper', ArgDesc num-args 1, num-type-args 0, names []
  [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] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
  [40] = ICData dynamic target-name 'start', arg-desc CP#39
  [41] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
  [42] = 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
  CheckStack           0
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  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::_asyncStackTraceHelper', ArgDesc num-args 1, num-type-args 0, names []
  [30] = Reserved
  [31] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [32] = Reserved
  [33] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [34] = Reserved
  [35] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
  [36] = ICData dynamic target-name 'start', arg-desc CP#35
  [37] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
  [38] = Reserved
  [39] = EndClosureFunctionScope
}
Closure #lib::closure::'nested' () -> dart:async::Future < dart:core::int >
ClosureCode {
  EntryFixed           1, 4
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  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
  Push                 r0
  LoadContextVar       1, 8
  DirectCall           CP#29, 1
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       1, 8
  DirectCall           CP#31, 1
  StoreContextVar      1, 2
  Push                 r0
  Push                 r0
  LoadContextVar       1, 8
  DirectCall           CP#33, 1
  StoreContextVar      1, 3
  Push                 r0
  LoadContextVar       1, 0
  Push                 r0
  LoadContextVar       1, 8
  DynamicCall          CP#36, 2
  Drop1
  Push                 r0
  LoadContextVar       1, 0
  InterfaceCall        CP#37, 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
  CheckStack           0
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  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
  Push                 r0
  LoadContextVar       0, 8
  DirectCall           CP#29, 1
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 8
  DirectCall           CP#31, 1
  StoreContextVar      0, 3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 8
  DirectCall           CP#33, 1
  StoreContextVar      0, 4
  Push                 r0
  LoadContextVar       0, 1
  Push                 r0
  LoadContextVar       0, 8
  DynamicCall          CP#36, 2
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  InterfaceCall        CP#37, 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::_asyncStackTraceHelper', ArgDesc num-args 1, num-type-args 0, names []
  [30] = Reserved
  [31] = DirectCall 'dart:async::_asyncThenWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [32] = Reserved
  [33] = DirectCall 'dart:async::_asyncErrorWrapperHelper', ArgDesc num-args 1, num-type-args 0, names []
  [34] = Reserved
  [35] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
  [36] = ICData dynamic target-name 'start', arg-desc CP#35
  [37] = InterfaceCall 'dart:async::Completer::get:future', ArgDesc num-args 1, num-type-args 0, names []
  [38] = 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
  CheckStack           0
  Push                 r0
  LoadFieldTOS         CP#6
  PopLocal             r4
  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 {}
}
