library #lib;
import self as self;
import "dart:async" as asy;
import "dart:core" as core;

[@vm.bytecode=
Bytecode {
  Entry                3
  CheckStack           0
  Allocate             CP#21
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#22
  Push                 r2
  PushNull
  StoreFieldTOS        CP#24
  Push                 r2
  PushConstant         CP#26
  StoreFieldTOS        CP#27
  Push                 r2
  PushConstant         CP#0
  StoreFieldTOS        CP#29
  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] = String 'x'
  [5] = SubtypeTestCache
  [6] = Class dart:async::_AsyncAwaitCompleter
  [7] = TypeArgumentsForInstanceAllocation dart:async::_AsyncAwaitCompleter [dart:core::Null]
  [8] = ArgDesc num-args 1, num-type-args 0, names []
  [9] = StaticICData target 'dart:async::_AsyncAwaitCompleter::'' (constructor)', arg-desc CP#8
  [10] = ClosureFunction 1
  [11] = Null
  [12] = ArgDesc num-args 4, num-type-args 0, names []
  [13] = StaticICData target 'dart:async::_awaitHelper', arg-desc CP#12
  [14] = ArgDesc num-args 2, num-type-args 0, names []
  [15] = StaticICData target 'dart:async::_completeOnAsyncReturn', arg-desc CP#14
  [16] = Type dynamic
  [17] = ArgDesc num-args 3, num-type-args 0, names []
  [18] = InterfaceCall target-name 'completeError', arg-desc CP#17
  [19] = Reserved
  [20] = EndClosureFunctionScope
  [21] = Class dart:core::_Closure
  [22] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [23] = Reserved
  [24] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [25] = Reserved
  [26] = EmptyTypeArguments
  [27] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [28] = Reserved
  [29] = InstanceField dart:core::_Closure::_function (field)
  [30] = Reserved
  [31] = StaticICData target 'dart:async::_asyncStackTraceHelper', arg-desc CP#8
  [32] = StaticICData target 'dart:async::_asyncThenWrapperHelper', arg-desc CP#8
  [33] = StaticICData target 'dart:async::_asyncErrorWrapperHelper', arg-desc CP#8
  [34] = ICData dynamic target-name 'start', arg-desc CP#14
  [35] = InterfaceCall get target-name 'get:future', arg-desc CP#8
  [36] = Reserved
  [37] = EndClosureFunctionScope
}
Closure #lib::asyncInFieldInitializer (field)::<anonymous closure> (dart:async::Future < dart:core::int > x) -> dart:async::Future < dart:core::Null >
ClosureBytecode {
  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
  PushConstant         CP#9
  IndirectStaticCall   1, CP#8
  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
  Allocate             CP#21
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#22
  Push                 r2
  PushNull
  StoreFieldTOS        CP#24
  Push                 r2
  PushConstant         CP#26
  StoreFieldTOS        CP#27
  Push                 r2
  PushConstant         CP#10
  StoreFieldTOS        CP#29
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#1
  StoreContextVar      0, 8
  Push                 r0
  LoadContextVar       0, 8
  PushConstant         CP#31
  IndirectStaticCall   1, CP#8
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 8
  PushConstant         CP#32
  IndirectStaticCall   1, CP#8
  StoreContextVar      0, 3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 8
  PushConstant         CP#33
  IndirectStaticCall   1, CP#8
  StoreContextVar      0, 4
  Push                 r0
  LoadContextVar       0, 1
  Push                 r0
  LoadContextVar       0, 8
  DynamicCall          2, CP#34
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  InterfaceCall        1, CP#35
  ReturnTOS

}

Closure #lib::asyncInFieldInitializer (field)::Closure/0:::async_op ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
ClosureBytecode {
  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
  PushConstant         CP#13
  IndirectStaticCall   4, CP#12
  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
  PushConstant         CP#15
  IndirectStaticCall   2, CP#14
  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        3, CP#18
  Drop1
  Jump                 L3
L3:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       0, 6
  PopLocal             r4
  Jump                 L4

}
]static field (asy::Future<core::int>) → asy::Future<core::Null> asyncInFieldInitializer = (asy::Future<core::int> x) → asy::Future<core::Null> /* originally async */ {
  final asy::_AsyncAwaitCompleter<core::Null> :async_completer = new asy::_AsyncAwaitCompleter::•<core::Null>();
  asy::FutureOr<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 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
        :result;
      }
      asy::_completeOnAsyncReturn(:async_completer, :return_value);
      return;
    }
    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
    }
  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
  :async_completer.start(:async_op);
  return :async_completer.{asy::Completer::future};
};
[@vm.bytecode=
Bytecode {
  Entry                7
  CheckStack           0
  AllocateContext      0, 4
  PopLocal             r0
  Push                 r0
  PushConstant         CP#1
  PushConstant         CP#0
  AllocateT
  StoreLocal           r2
  Push                 r2
  PushConstant         CP#3
  IndirectStaticCall   1, CP#2
  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
  Allocate             CP#15
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#16
  Push                 r2
  PushNull
  StoreFieldTOS        CP#18
  Push                 r2
  PushConstant         CP#20
  StoreFieldTOS        CP#21
  Push                 r2
  PushConstant         CP#4
  StoreFieldTOS        CP#23
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#6
  PopLocal             r6
  Push                 r6
  PushConstant         CP#25
  IndirectStaticCall   1, CP#2
  PopLocal             r3
  Push                 r6
  PushConstant         CP#26
  IndirectStaticCall   1, CP#2
  PopLocal             r4
  Push                 r6
  PushConstant         CP#27
  IndirectStaticCall   1, CP#2
  PopLocal             r5
  Push                 r0
  LoadContextVar       0, 0
  Push                 r6
  DynamicCall          2, CP#28
  Drop1
  Push                 r0
  LoadContextVar       0, 0
  InterfaceCall        1, CP#29
  ReturnTOS
}
ConstantPool {
  [0] = Class dart:async::_AsyncAwaitCompleter
  [1] = TypeArgumentsForInstanceAllocation dart:async::_AsyncAwaitCompleter [dart:core::int]
  [2] = ArgDesc num-args 1, num-type-args 0, names []
  [3] = StaticICData target 'dart:async::_AsyncAwaitCompleter::'' (constructor)', arg-desc CP#2
  [4] = ClosureFunction 0
  [5] = Null
  [6] = InstanceField dart:core::_Closure::_context (field)
  [7] = Reserved
  [8] = ArgDesc num-args 2, num-type-args 0, names []
  [9] = StaticICData target 'dart:async::_completeOnAsyncReturn', arg-desc CP#8
  [10] = Type dynamic
  [11] = ArgDesc num-args 3, num-type-args 0, names []
  [12] = InterfaceCall target-name 'completeError', arg-desc CP#11
  [13] = Reserved
  [14] = EndClosureFunctionScope
  [15] = Class dart:core::_Closure
  [16] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [17] = Reserved
  [18] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [19] = Reserved
  [20] = EmptyTypeArguments
  [21] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [22] = Reserved
  [23] = InstanceField dart:core::_Closure::_function (field)
  [24] = Reserved
  [25] = StaticICData target 'dart:async::_asyncStackTraceHelper', arg-desc CP#2
  [26] = StaticICData target 'dart:async::_asyncThenWrapperHelper', arg-desc CP#2
  [27] = StaticICData target 'dart:async::_asyncErrorWrapperHelper', arg-desc CP#2
  [28] = ICData dynamic target-name 'start', arg-desc CP#8
  [29] = InterfaceCall get target-name 'get:future', arg-desc CP#2
  [30] = Reserved
}
Closure #lib::foo:::async_op ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
ClosureBytecode {
  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
  PushConstant         CP#9
  IndirectStaticCall   2, CP#8
  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        3, CP#12
  Drop1
  Jump                 L3
L3:
  PushNull
  ReturnTOS
L1:
  Trap

}
]static method foo() → asy::Future<core::int> /* originally async */ {
  final asy::_AsyncAwaitCompleter<core::int> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int>();
  asy::FutureOr<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;
      }
      asy::_completeOnAsyncReturn(:async_completer, :return_value);
      return;
    }
    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
    }
  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
  :async_completer.start(:async_op);
  return :async_completer.{asy::Completer::future};
}
[@vm.bytecode=
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
  PushConstant         CP#3
  IndirectStaticCall   1, CP#2
  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
  Allocate             CP#20
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#21
  Push                 r2
  PushNull
  StoreFieldTOS        CP#23
  Push                 r2
  PushConstant         CP#25
  StoreFieldTOS        CP#26
  Push                 r2
  PushConstant         CP#4
  StoreFieldTOS        CP#28
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#6
  StoreContextVar      0, 10
  Push                 r0
  LoadContextVar       0, 10
  PushConstant         CP#30
  IndirectStaticCall   1, CP#2
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 10
  PushConstant         CP#31
  IndirectStaticCall   1, CP#2
  StoreContextVar      0, 4
  Push                 r0
  Push                 r0
  LoadContextVar       0, 10
  PushConstant         CP#32
  IndirectStaticCall   1, CP#2
  StoreContextVar      0, 5
  Push                 r0
  LoadContextVar       0, 2
  Push                 r0
  LoadContextVar       0, 10
  DynamicCall          2, CP#33
  Drop1
  Push                 r0
  LoadContextVar       0, 2
  InterfaceCall        1, CP#34
  ReturnTOS
}
ConstantPool {
  [0] = Class dart:async::_AsyncAwaitCompleter
  [1] = TypeArgumentsForInstanceAllocation dart:async::_AsyncAwaitCompleter [dart:core::int]
  [2] = ArgDesc num-args 1, num-type-args 0, names []
  [3] = StaticICData target 'dart:async::_AsyncAwaitCompleter::'' (constructor)', arg-desc CP#2
  [4] = ClosureFunction 0
  [5] = Null
  [6] = InstanceField dart:core::_Closure::_context (field)
  [7] = Reserved
  [8] = ArgDesc num-args 4, num-type-args 0, names []
  [9] = StaticICData target 'dart:async::_awaitHelper', arg-desc CP#8
  [10] = StaticICData target 'dart:async::_awaitHelper', arg-desc CP#8
  [11] = ArgDesc num-args 2, num-type-args 0, names []
  [12] = InterfaceCall target-name '+', arg-desc CP#11
  [13] = Reserved
  [14] = StaticICData target 'dart:async::_completeOnAsyncReturn', arg-desc CP#11
  [15] = Type dynamic
  [16] = ArgDesc num-args 3, num-type-args 0, names []
  [17] = InterfaceCall target-name 'completeError', arg-desc CP#16
  [18] = Reserved
  [19] = EndClosureFunctionScope
  [20] = Class dart:core::_Closure
  [21] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [22] = Reserved
  [23] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [24] = Reserved
  [25] = EmptyTypeArguments
  [26] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [27] = Reserved
  [28] = InstanceField dart:core::_Closure::_function (field)
  [29] = Reserved
  [30] = StaticICData target 'dart:async::_asyncStackTraceHelper', arg-desc CP#2
  [31] = StaticICData target 'dart:async::_asyncThenWrapperHelper', arg-desc CP#2
  [32] = StaticICData target 'dart:async::_asyncErrorWrapperHelper', arg-desc CP#2
  [33] = ICData dynamic target-name 'start', arg-desc CP#11
  [34] = InterfaceCall get target-name 'get:future', arg-desc CP#2
  [35] = Reserved
}
Closure #lib::simpleAsyncAwait:::async_op ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
ClosureBytecode {
  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
  PushConstant         CP#9
  IndirectStaticCall   4, CP#8
  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
  PushConstant         CP#10
  IndirectStaticCall   4, CP#8
  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        2, CP#12
  StoreContextVar      0, 3
  Jump                 L4
L4:
  Push                 r4
  LoadContextVar       0, 2
  Push                 r4
  LoadContextVar       0, 3
  PushConstant         CP#14
  IndirectStaticCall   2, CP#11
  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        3, CP#17
  Drop1
  Jump                 L5
L5:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       0, 7
  PopLocal             r4
  Push                 r5
  PushInt              1
  JumpIfEqStrict       L6
  Jump                 L7

}
]static method simpleAsyncAwait(asy::Future<core::int> a, asy::Future<core::int> b) → asy::Future<core::int> /* originally async */ {
  final asy::_AsyncAwaitCompleter<core::int> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int>();
  asy::FutureOr<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 = asy::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
        :async_temporary_0 = :result;
        [yield] let dynamic #t3 = asy::_awaitHelper(b, :async_op_then, :async_op_error, :async_op) in null;
        :return_value = :async_temporary_0.{core::num::+}(:result);
        break #L3;
      }
      asy::_completeOnAsyncReturn(:async_completer, :return_value);
      return;
    }
    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
    }
  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
  :async_completer.start(:async_op);
  return :async_completer.{asy::Completer::future};
}
[@vm.bytecode=
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
  PushConstant         CP#3
  IndirectStaticCall   1, CP#2
  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
  Allocate             CP#27
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#28
  Push                 r2
  PushNull
  StoreFieldTOS        CP#30
  Push                 r2
  PushConstant         CP#32
  StoreFieldTOS        CP#33
  Push                 r2
  PushConstant         CP#4
  StoreFieldTOS        CP#35
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#6
  StoreContextVar      0, 10
  Push                 r0
  LoadContextVar       0, 10
  PushConstant         CP#37
  IndirectStaticCall   1, CP#2
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 10
  PushConstant         CP#38
  IndirectStaticCall   1, CP#2
  StoreContextVar      0, 3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 10
  PushConstant         CP#39
  IndirectStaticCall   1, CP#2
  StoreContextVar      0, 4
  Push                 r0
  LoadContextVar       0, 1
  Push                 r0
  LoadContextVar       0, 10
  DynamicCall          2, CP#40
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  InterfaceCall        1, CP#41
  ReturnTOS
}
ConstantPool {
  [0] = Class dart:async::_AsyncAwaitCompleter
  [1] = TypeArgumentsForInstanceAllocation dart:async::_AsyncAwaitCompleter [dart:core::int]
  [2] = ArgDesc num-args 1, num-type-args 0, names []
  [3] = StaticICData target 'dart:async::_AsyncAwaitCompleter::'' (constructor)', arg-desc CP#2
  [4] = ClosureFunction 0
  [5] = Null
  [6] = InstanceField dart:core::_Closure::_context (field)
  [7] = Reserved
  [8] = InterfaceCall get target-name 'get:iterator', arg-desc CP#2
  [9] = Reserved
  [10] = InterfaceCall target-name 'moveNext', arg-desc CP#2
  [11] = Reserved
  [12] = InterfaceCall get target-name 'get:current', arg-desc CP#2
  [13] = Reserved
  [14] = ArgDesc num-args 0, num-type-args 0, names []
  [15] = StaticICData target '#lib::foo', arg-desc CP#14
  [16] = ArgDesc num-args 4, num-type-args 0, names []
  [17] = StaticICData target 'dart:async::_awaitHelper', arg-desc CP#16
  [18] = ArgDesc num-args 2, num-type-args 0, names []
  [19] = InterfaceCall target-name '+', arg-desc CP#18
  [20] = Reserved
  [21] = StaticICData target 'dart:async::_completeOnAsyncReturn', arg-desc CP#18
  [22] = Type dynamic
  [23] = ArgDesc num-args 3, num-type-args 0, names []
  [24] = InterfaceCall target-name 'completeError', arg-desc CP#23
  [25] = Reserved
  [26] = EndClosureFunctionScope
  [27] = Class dart:core::_Closure
  [28] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [29] = Reserved
  [30] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [31] = Reserved
  [32] = EmptyTypeArguments
  [33] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [34] = Reserved
  [35] = InstanceField dart:core::_Closure::_function (field)
  [36] = Reserved
  [37] = StaticICData target 'dart:async::_asyncStackTraceHelper', arg-desc CP#2
  [38] = StaticICData target 'dart:async::_asyncThenWrapperHelper', arg-desc CP#2
  [39] = StaticICData target 'dart:async::_asyncErrorWrapperHelper', arg-desc CP#2
  [40] = ICData dynamic target-name 'start', arg-desc CP#18
  [41] = InterfaceCall get target-name 'get:future', arg-desc CP#2
  [42] = Reserved
}
Closure #lib::loops:::async_op ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
ClosureBytecode {
  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        1, CP#8
  PopLocal             r8
  Push                 r4
  Push                 r8
  StoreContextVar      2, 1
L5:
  CheckStack           2
  Push                 r4
  LoadContextVar       2, 1
  StoreLocal           r8
  InterfaceCall        1, CP#10
  JumpIfFalse          L3
  AllocateContext      3, 1
  StoreLocal           r5
  Push                 r5
  Push                 r4
  StoreContextParent
  PopLocal             r4
  Push                 r4
  Push                 r8
  InterfaceCall        1, CP#12
  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
  PushConstant         CP#15
  IndirectStaticCall   0, CP#14
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       0, 3
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       0, 4
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       0, 10
  PushConstant         CP#17
  IndirectStaticCall   4, CP#16
  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        2, CP#19
  InterfaceCall        2, CP#19
  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
  PushConstant         CP#21
  IndirectStaticCall   2, CP#18
  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        3, CP#24
  Drop1
  Jump                 L10
L10:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       0, 6
  PopLocal             r4
  Jump                 L11

}
]static method loops(core::List<core::int> list) → asy::Future<core::int> /* originally async */ {
  final asy::_AsyncAwaitCompleter<core::int> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int>();
  asy::FutureOr<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:
      {
        core::int sum = 0;
        for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
          for (core::int j in list) {
            :async_temporary_1 = sum;
            :async_temporary_0 = i.{core::num::+}(j);
            [yield] let dynamic #t4 = asy::_awaitHelper(self::foo(), :async_op_then, :async_op_error, :async_op) in null;
            sum = :async_temporary_1.{core::num::+}(:async_temporary_0.{core::num::+}(:result));
          }
        }
        for (core::int k = 0; k.{core::num::<}(10); k = k.{core::num::+}(1)) {
          sum = sum.{core::num::+}(k);
        }
        :return_value = sum;
        break #L4;
      }
      asy::_completeOnAsyncReturn(:async_completer, :return_value);
      return;
    }
    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
    }
  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
  :async_completer.start(:async_op);
  return :async_completer.{asy::Completer::future};
}
[@vm.bytecode=
Bytecode {
  Entry                4
  CheckStack           0
  AllocateContext      0, 16
  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
  PushConstant         CP#3
  IndirectStaticCall   1, CP#2
  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
  Allocate             CP#30
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#31
  Push                 r2
  PushNull
  StoreFieldTOS        CP#33
  Push                 r2
  PushConstant         CP#35
  StoreFieldTOS        CP#36
  Push                 r2
  PushConstant         CP#4
  StoreFieldTOS        CP#38
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#6
  StoreContextVar      0, 15
  Push                 r0
  LoadContextVar       0, 15
  PushConstant         CP#40
  IndirectStaticCall   1, CP#2
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 15
  PushConstant         CP#41
  IndirectStaticCall   1, CP#2
  StoreContextVar      0, 5
  Push                 r0
  Push                 r0
  LoadContextVar       0, 15
  PushConstant         CP#42
  IndirectStaticCall   1, CP#2
  StoreContextVar      0, 6
  Push                 r0
  LoadContextVar       0, 3
  Push                 r0
  LoadContextVar       0, 15
  DynamicCall          2, CP#43
  Drop1
  Push                 r0
  LoadContextVar       0, 3
  InterfaceCall        1, CP#44
  ReturnTOS
}
ConstantPool {
  [0] = Class dart:async::_AsyncAwaitCompleter
  [1] = TypeArgumentsForInstanceAllocation dart:async::_AsyncAwaitCompleter [dart:core::int]
  [2] = ArgDesc num-args 1, num-type-args 0, names []
  [3] = StaticICData target 'dart:async::_AsyncAwaitCompleter::'' (constructor)', arg-desc CP#2
  [4] = ClosureFunction 0
  [5] = Null
  [6] = InstanceField dart:core::_Closure::_context (field)
  [7] = Reserved
  [8] = ArgDesc num-args 4, num-type-args 0, names []
  [9] = StaticICData target 'dart:async::_awaitHelper', arg-desc CP#8
  [10] = ArgDesc num-args 2, num-type-args 0, names []
  [11] = InterfaceCall target-name '+', arg-desc CP#10
  [12] = Reserved
  [13] = Type dynamic
  [14] = Type dart:core::Error
  [15] = InterfaceCall target-name '_simpleInstanceOf', arg-desc CP#10
  [16] = Reserved
  [17] = StaticICData target 'dart:async::_awaitHelper', arg-desc CP#8
  [18] = String 'fin'
  [19] = StaticICData target 'dart:core::print', arg-desc CP#2
  [20] = StaticICData target 'dart:async::_awaitHelper', arg-desc CP#8
  [21] = StaticICData target 'dart:core::print', arg-desc CP#2
  [22] = StaticICData target 'dart:async::_awaitHelper', arg-desc CP#8
  [23] = StaticICData target 'dart:core::print', arg-desc CP#2
  [24] = StaticICData target 'dart:async::_awaitHelper', arg-desc CP#8
  [25] = StaticICData target 'dart:async::_completeOnAsyncReturn', arg-desc CP#10
  [26] = ArgDesc num-args 3, num-type-args 0, names []
  [27] = InterfaceCall target-name 'completeError', arg-desc CP#26
  [28] = Reserved
  [29] = EndClosureFunctionScope
  [30] = Class dart:core::_Closure
  [31] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [32] = Reserved
  [33] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [34] = Reserved
  [35] = EmptyTypeArguments
  [36] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [37] = Reserved
  [38] = InstanceField dart:core::_Closure::_function (field)
  [39] = Reserved
  [40] = StaticICData target 'dart:async::_asyncStackTraceHelper', arg-desc CP#2
  [41] = StaticICData target 'dart:async::_asyncThenWrapperHelper', arg-desc CP#2
  [42] = StaticICData target 'dart:async::_asyncErrorWrapperHelper', arg-desc CP#2
  [43] = ICData dynamic target-name 'start', arg-desc CP#10
  [44] = InterfaceCall get target-name 'get:future', arg-desc CP#2
  [45] = Reserved
}
Closure #lib::tryCatchRethrow:::async_op ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
ClosureBytecode {
  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, 15
  PushConstant         CP#9
  IndirectStaticCall   4, CP#8
  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        2, CP#11
  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#14
  InterfaceCall        2, CP#15
  JumpIfFalse          L4
  Push                 r4
  LoadContextParent
  PushInt              42
  StoreContextVar      0, 4
  Jump                 L5
L4:
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       1, 0
  StoreContextVar      0, 14
  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, 15
  PushConstant         CP#17
  IndirectStaticCall   4, CP#8
  PopLocal             r13
  PushNull
  ReturnTOS
L14:
  Push                 r2
  JumpIfNull           L6
  Push                 r2
  Push                 r3
  Throw                1
L6:
  Push                 r4
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 14
  Push                 r1
  InterfaceCall        2, CP#11
  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#18
  PushConstant         CP#19
  IndirectStaticCall   1, CP#2
  Drop1
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       1, 0
  StoreContextVar      0, 14
  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, 15
  PushConstant         CP#20
  IndirectStaticCall   4, CP#8
  PopLocal             r12
  PushNull
  ReturnTOS
L15:
  Push                 r2
  JumpIfNull           L8
  Push                 r2
  Push                 r3
  Throw                1
L8:
  Push                 r4
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 14
  Push                 r1
  InterfaceCall        2, CP#11
  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#18
  PushConstant         CP#21
  IndirectStaticCall   1, CP#2
  Drop1
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       1, 0
  StoreContextVar      0, 14
  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, 15
  PushConstant         CP#22
  IndirectStaticCall   4, CP#8
  PopLocal             r12
  PushNull
  ReturnTOS
L16:
  Push                 r2
  JumpIfNull           L10
  Push                 r2
  Push                 r3
  Throw                1
L10:
  Push                 r4
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 14
  Push                 r1
  InterfaceCall        2, CP#11
  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#18
  PushConstant         CP#23
  IndirectStaticCall   1, CP#2
  Drop1
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       1, 0
  StoreContextVar      0, 14
  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, 15
  PushConstant         CP#24
  IndirectStaticCall   4, CP#8
  PopLocal             r12
  PushNull
  ReturnTOS
L17:
  Push                 r2
  JumpIfNull           L11
  Push                 r2
  Push                 r3
  Throw                1
L11:
  Push                 r4
  Push                 r4
  LoadContextParent
  LoadContextVar       0, 14
  Push                 r1
  InterfaceCall        2, CP#11
  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
  PushConstant         CP#25
  IndirectStaticCall   2, CP#10
  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        3, CP#27
  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

}
]static method tryCatchRethrow(asy::Future<core::int> a, asy::Future<core::int> b, asy::Future<core::int> c) → asy::Future<core::int> /* originally async */ {
  final asy::_AsyncAwaitCompleter<core::int> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int>();
  asy::FutureOr<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;
  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
    try {
      #L5:
      {
        core::int x = 1;
        try
          try {
            :async_temporary_0 = x;
            [yield] let dynamic #t5 = asy::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
            x = :async_temporary_0.{core::num::+}(:result);
          }
          on dynamic catch(final dynamic e) {
            if(e is core::Error) {
              :return_value = 42;
              break #L5;
            }
            :async_temporary_0 = x;
            [yield] let dynamic #t6 = asy::_awaitHelper(b, :async_op_then, :async_op_error, :async_op) in null;
            x = :async_temporary_0.{core::num::+}(:result);
            rethrow;
          }
        finally {
          core::print("fin");
          :async_temporary_0 = x;
          [yield] let dynamic #t7 = asy::_awaitHelper(c, :async_op_then, :async_op_error, :async_op) in null;
          x = :async_temporary_0.{core::num::+}(:result);
          :return_value = x;
          break #L5;
        }
      }
      asy::_completeOnAsyncReturn(:async_completer, :return_value);
      return;
    }
    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
    }
  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
  :async_completer.start(:async_op);
  return :async_completer.{asy::Completer::future};
}
[@vm.bytecode=
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
  Allocate             CP#21
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#22
  Push                 r3
  PushNull
  StoreFieldTOS        CP#24
  Push                 r3
  PushConstant         CP#26
  StoreFieldTOS        CP#27
  Push                 r3
  PushConstant         CP#0
  StoreFieldTOS        CP#29
  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] = TypeArgumentsForInstanceAllocation dart:async::_AsyncAwaitCompleter [dart:core::int]
  [5] = ArgDesc num-args 1, num-type-args 0, names []
  [6] = StaticICData target 'dart:async::_AsyncAwaitCompleter::'' (constructor)', arg-desc CP#5
  [7] = ClosureFunction 1
  [8] = Null
  [9] = ArgDesc num-args 4, num-type-args 0, names []
  [10] = StaticICData target 'dart:async::_awaitHelper', arg-desc CP#9
  [11] = Type dynamic
  [12] = String 'fin'
  [13] = StaticICData target 'dart:core::print', arg-desc CP#5
  [14] = StaticICData target 'dart:core::print', arg-desc CP#5
  [15] = ArgDesc num-args 2, num-type-args 0, names []
  [16] = StaticICData target 'dart:async::_completeOnAsyncReturn', arg-desc CP#15
  [17] = ArgDesc num-args 3, num-type-args 0, names []
  [18] = InterfaceCall target-name 'completeError', arg-desc CP#17
  [19] = Reserved
  [20] = EndClosureFunctionScope
  [21] = Class dart:core::_Closure
  [22] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [23] = Reserved
  [24] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [25] = Reserved
  [26] = EmptyTypeArguments
  [27] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [28] = Reserved
  [29] = InstanceField dart:core::_Closure::_function (field)
  [30] = Reserved
  [31] = StaticICData target 'dart:async::_asyncStackTraceHelper', arg-desc CP#5
  [32] = StaticICData target 'dart:async::_asyncThenWrapperHelper', arg-desc CP#5
  [33] = StaticICData target 'dart:async::_asyncErrorWrapperHelper', arg-desc CP#5
  [34] = ICData dynamic target-name 'start', arg-desc CP#15
  [35] = InterfaceCall get target-name 'get:future', arg-desc CP#5
  [36] = Reserved
  [37] = EndClosureFunctionScope
}
Closure #lib::closure::nested () -> dart:async::Future < dart:core::int >
ClosureBytecode {
  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
  PushConstant         CP#6
  IndirectStaticCall   1, CP#5
  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
  Allocate             CP#21
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#22
  Push                 r2
  PushNull
  StoreFieldTOS        CP#24
  Push                 r2
  PushConstant         CP#26
  StoreFieldTOS        CP#27
  Push                 r2
  PushConstant         CP#7
  StoreFieldTOS        CP#29
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#1
  StoreContextVar      1, 8
  Push                 r0
  LoadContextVar       1, 8
  PushConstant         CP#31
  IndirectStaticCall   1, CP#5
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       1, 8
  PushConstant         CP#32
  IndirectStaticCall   1, CP#5
  StoreContextVar      1, 2
  Push                 r0
  Push                 r0
  LoadContextVar       1, 8
  PushConstant         CP#33
  IndirectStaticCall   1, CP#5
  StoreContextVar      1, 3
  Push                 r0
  LoadContextVar       1, 0
  Push                 r0
  LoadContextVar       1, 8
  DynamicCall          2, CP#34
  Drop1
  Push                 r0
  LoadContextVar       1, 0
  InterfaceCall        1, CP#35
  ReturnTOS

}

Closure #lib::closure::Closure/0:::async_op ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
ClosureBytecode {
  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
  PushConstant         CP#10
  IndirectStaticCall   4, CP#9
  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
  PushConstant         CP#13
  IndirectStaticCall   1, CP#5
  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
  PushConstant         CP#14
  IndirectStaticCall   1, CP#5
  Drop1
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L4
L4:
  Push                 r4
  LoadContextVar       1, 0
  Push                 r4
  LoadContextVar       1, 1
  PushConstant         CP#16
  IndirectStaticCall   2, CP#15
  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        3, CP#18
  Drop1
  Jump                 L5
L5:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       1, 5
  PopLocal             r4
  Jump                 L6

}
]static method closure(asy::Future<core::int> a) → dynamic {
  core::int x = 3;
  function nested() → asy::Future<core::int> /* originally async */ {
    final asy::_AsyncAwaitCompleter<core::int> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int>();
    asy::FutureOr<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:
        {
          core::int y = 4;
          try {
            x = 5;
            [yield] let dynamic #t8 = asy::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
            y = :result;
            :return_value = x.{core::num::+}(y);
            break #L6;
          }
          finally {
            core::print("fin");
          }
        }
        asy::_completeOnAsyncReturn(:async_completer, :return_value);
        return;
      }
      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
      }
    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
    :async_completer.start(:async_op);
    return :async_completer.{asy::Completer::future};
  }
  return nested;
}
[@vm.bytecode=
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
  PushConstant         CP#3
  IndirectStaticCall   1, CP#2
  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
  Allocate             CP#20
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#21
  Push                 r2
  PushNull
  StoreFieldTOS        CP#23
  Push                 r2
  PushConstant         CP#25
  StoreFieldTOS        CP#26
  Push                 r2
  PushConstant         CP#4
  StoreFieldTOS        CP#28
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#6
  StoreContextVar      0, 8
  Push                 r0
  LoadContextVar       0, 8
  PushConstant         CP#30
  IndirectStaticCall   1, CP#2
  PopLocal             r3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 8
  PushConstant         CP#31
  IndirectStaticCall   1, CP#2
  StoreContextVar      0, 3
  Push                 r0
  Push                 r0
  LoadContextVar       0, 8
  PushConstant         CP#32
  IndirectStaticCall   1, CP#2
  StoreContextVar      0, 4
  Push                 r0
  LoadContextVar       0, 1
  Push                 r0
  LoadContextVar       0, 8
  DynamicCall          2, CP#33
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  InterfaceCall        1, CP#34
  ReturnTOS
}
ConstantPool {
  [0] = Class dart:async::_AsyncAwaitCompleter
  [1] = TypeArgumentsForInstanceAllocation dart:async::_AsyncAwaitCompleter [dart:core::int]
  [2] = ArgDesc num-args 1, num-type-args 0, names []
  [3] = StaticICData target 'dart:async::_AsyncAwaitCompleter::'' (constructor)', arg-desc CP#2
  [4] = ClosureFunction 0
  [5] = Null
  [6] = InstanceField dart:core::_Closure::_context (field)
  [7] = Reserved
  [8] = ArgDesc num-args 4, num-type-args 0, names []
  [9] = StaticICData target 'dart:async::_awaitHelper', arg-desc CP#8
  [10] = ArgDesc num-args 2, num-type-args 0, names []
  [11] = InterfaceCall target-name '==', arg-desc CP#10
  [12] = Reserved
  [13] = ArgDesc num-args 3, num-type-args 0, names []
  [14] = StaticICData target 'dart:core::_AssertionError::_throwNew', arg-desc CP#13
  [15] = StaticICData target 'dart:async::_completeOnAsyncReturn', arg-desc CP#10
  [16] = Type dynamic
  [17] = InterfaceCall target-name 'completeError', arg-desc CP#13
  [18] = Reserved
  [19] = EndClosureFunctionScope
  [20] = Class dart:core::_Closure
  [21] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [22] = Reserved
  [23] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [24] = Reserved
  [25] = EmptyTypeArguments
  [26] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [27] = Reserved
  [28] = InstanceField dart:core::_Closure::_function (field)
  [29] = Reserved
  [30] = StaticICData target 'dart:async::_asyncStackTraceHelper', arg-desc CP#2
  [31] = StaticICData target 'dart:async::_asyncThenWrapperHelper', arg-desc CP#2
  [32] = StaticICData target 'dart:async::_asyncErrorWrapperHelper', arg-desc CP#2
  [33] = ICData dynamic target-name 'start', arg-desc CP#10
  [34] = InterfaceCall get target-name 'get:future', arg-desc CP#2
  [35] = Reserved
}
Closure #lib::testAssert:::async_op ([ dynamic :result, dynamic :exception, dynamic :stack_trace ]) -> dynamic
ClosureBytecode {
  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
  PushConstant         CP#9
  IndirectStaticCall   4, CP#8
  PopLocal             r8
  PushNull
  ReturnTOS
L6:
  Push                 r2
  JumpIfNull           L3
  Push                 r2
  Push                 r3
  Throw                1
L3:
  JumpIfNoAsserts      L2
  Push                 r1
  PushInt              42
  InterfaceCall        2, CP#11
  AssertBoolean        0
  JumpIfTrue           L2
  PushInt              0
  PushInt              0
  PushNull
  PushConstant         CP#14
  IndirectStaticCall   3, CP#13
  Drop1
L2:
  Push                 r4
  PushInt              7
  StoreContextVar      0, 2
  Jump                 L4
L4:
  Push                 r4
  LoadContextVar       0, 1
  Push                 r4
  LoadContextVar       0, 2
  PushConstant         CP#15
  IndirectStaticCall   2, CP#10
  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        3, CP#17
  Drop1
  Jump                 L5
L5:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       0, 6
  PopLocal             r4
  Jump                 L6

}
]static method testAssert(asy::Future<core::int> a) → asy::Future<core::int> /* originally async */ {
  final asy::_AsyncAwaitCompleter<core::int> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int>();
  asy::FutureOr<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 = asy::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
          assert(:result.{core::num::==}(42));
        }
        :return_value = 7;
        break #L7;
      }
      asy::_completeOnAsyncReturn(:async_completer, :return_value);
      return;
    }
    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
    }
  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
  :async_completer.start(:async_op);
  return :async_completer.{asy::Completer::future};
}
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack           0
  PushNull
  ReturnTOS
}
ConstantPool {
}
]static method main() → dynamic {}
