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

[@vm.bytecode=
Bytecode {
  Entry                3
  CheckStack
  Allocate             CP#19
  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 <anonymous closure> (dart.async::Future<dart.core::int> x) → dart.async::Future<dart.core::Null> /* originally async */ ;
  [1] = InstanceField dart.core::_Closure::_context
  [2] = Reserved
  [3] = Type dart.async::Future<dart.core::int>
  [4] = String 'x'
  [5] = SubtypeTestCache
  [6] = TypeArgumentsForInstanceAllocation dart.async::Completer [dart.core::Null]
  [7] = ArgDesc num-args 1, num-type-args 0, names []
  [8] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#7
  [9] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
  [10] = Null
  [11] = ArgDesc num-args 4, num-type-args 0, names []
  [12] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#11
  [13] = ArgDesc num-args 2, num-type-args 0, names []
  [14] = StaticICData target 'dart.async::_completeOnAsyncReturn', arg-desc CP#13
  [15] = Type dynamic
  [16] = ArgDesc num-args 3, num-type-args 0, names []
  [17] = ICData target-name 'completeError', arg-desc CP#16
  [18] = EndClosureFunctionScope
  [19] = Class dart.core::_Closure
  [20] = InstanceField dart.core::_Closure::_instantiator_type_arguments
  [21] = Reserved
  [22] = InstanceField dart.core::_Closure::_function_type_arguments
  [23] = Reserved
  [24] = EmptyTypeArguments
  [25] = InstanceField dart.core::_Closure::_delayed_type_arguments
  [26] = Reserved
  [27] = InstanceField dart.core::_Closure::_function
  [28] = Reserved
  [29] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#7
  [30] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#7
  [31] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#7
  [32] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
  [33] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#13
  [34] = ICData get target-name 'future', arg-desc CP#7
  [35] = EndClosureFunctionScope
}
Closure CP#9 {
  EntryOptional        1, 3, 0
  LoadConstant         r1, CP#10
  LoadConstant         r2, CP#10
  LoadConstant         r3, CP#10
  Frame                6
  CheckStack
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  Push                 r4
  LoadContextVar       5
  StoreLocal           r5
  PushInt              0
  IfNeStrictTOS
  Jump                 L1
  Push                 r4
  Push                 r4
  StoreContextVar      7
Try #0 start:
  Push                 r4
  PushInt              1
  StoreContextVar      5
  Push                 r4
  Push                 r4
  StoreContextVar      6
  Push                 r4
  LoadContextVar       0
  Push                 r4
  LoadContextVar       3
  Push                 r4
  LoadContextVar       4
  Push                 r4
  LoadContextVar       8
  PushConstant         CP#12
  IndirectStaticCall   4, CP#11
  PopLocal             r8
  PushNull
  ReturnTOS
L4:
  IfEqNull             r2
  Jump                 L2
  Push                 r2
  Push                 r3
  Throw                1
L2:
  Push                 r1
  Drop1
  Push                 r4
  LoadContextVar       1
  Push                 r4
  LoadContextVar       2
  PushConstant         CP#14
  IndirectStaticCall   2, CP#13
  Drop1
  PushNull
  ReturnTOS
  Jump                 L3
Try #0 end:
Try #0 handler:
  SetFrame             10
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  Push                 r4
  LoadContextVar       7
  PopLocal             r4
  MoveSpecial          r6, exception
  MoveSpecial          r7, stackTrace
  Push                 r6
  PopLocal             r8
  Push                 r7
  PopLocal             r9
  Push                 r4
  LoadContextVar       1
  Push                 r8
  Push                 r9
  InstanceCall         3, CP#17
  Drop1
  Jump                 L3
L3:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       6
  PopLocal             r4
  Jump                 L4

}

Closure CP#0 {
  EntryFixed           2, 4
  CheckStack
  Push                 FP[-6]
  LoadFieldTOS         CP#1
  PopLocal             r0
  AllocateContext      9
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0
  Push                 FP[-5]
  PushNull
  PushNull
  PushConstant         CP#3
  PushConstant         CP#4
  AssertAssignable     0, CP#5
  Drop1
  Push                 r0
  PushConstant         CP#6
  PushConstant         CP#8
  IndirectStaticCall   1, CP#7
  StoreContextVar      1
  Push                 r0
  PushNull
  StoreContextVar      2
  PushNull
  PopLocal             r2
  Push                 r0
  PushNull
  StoreContextVar      3
  Push                 r0
  PushNull
  StoreContextVar      4
  Push                 r0
  PushInt              0
  StoreContextVar      5
  Push                 r0
  PushNull
  StoreContextVar      6
  Push                 r0
  PushNull
  StoreContextVar      7
  Push                 r0
  Allocate             CP#19
  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#9
  StoreFieldTOS        CP#27
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#1
  StoreContextVar      8
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#29
  IndirectStaticCall   1, CP#7
  PopLocal             r2
  Push                 r0
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#30
  IndirectStaticCall   1, CP#7
  StoreContextVar      3
  Push                 r0
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#31
  IndirectStaticCall   1, CP#7
  StoreContextVar      4
  PushConstant         CP#32
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#33
  IndirectStaticCall   2, CP#13
  Drop1
  Push                 r0
  LoadContextVar       1
  InstanceCall         1, CP#34
  ReturnTOS
  PushNull
  ReturnTOS

}
]static field (asy::Future<core::int>) → asy::Future<core::Null> asyncInFieldInitializer = (asy::Future<core::int> x) → asy::Future<core::Null> /* originally async */ {
  final asy::Completer<core::Null> :async_completer = asy::Completer::sync<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);
  asy::Future::microtask<dynamic>(:async_op);
  return :async_completer.{asy::Completer::future};
};
[@vm.bytecode=
Bytecode {
  Entry                7
  CheckStack
  AllocateContext      4
  PopLocal             r0
  Push                 r0
  PushConstant         CP#0
  PushConstant         CP#2
  IndirectStaticCall   1, CP#1
  StoreContextVar      0
  Push                 r0
  PushNull
  StoreContextVar      1
  PushNull
  PopLocal             r2
  PushNull
  PopLocal             r3
  PushNull
  PopLocal             r4
  Push                 r0
  PushInt              0
  StoreContextVar      2
  Push                 r0
  PushNull
  StoreContextVar      3
  Allocate             CP#13
  StoreLocal           r6
  Push                 r6
  PushNull
  StoreFieldTOS        CP#14
  Push                 r6
  PushNull
  StoreFieldTOS        CP#16
  Push                 r6
  PushConstant         CP#18
  StoreFieldTOS        CP#19
  Push                 r6
  PushConstant         CP#3
  StoreFieldTOS        CP#21
  Push                 r6
  Push                 r0
  StoreFieldTOS        CP#5
  PopLocal             r5
  Push                 r5
  PushConstant         CP#23
  IndirectStaticCall   1, CP#1
  PopLocal             r2
  Push                 r5
  PushConstant         CP#24
  IndirectStaticCall   1, CP#1
  PopLocal             r3
  Push                 r5
  PushConstant         CP#25
  IndirectStaticCall   1, CP#1
  PopLocal             r4
  PushConstant         CP#26
  Push                 r5
  PushConstant         CP#27
  IndirectStaticCall   2, CP#7
  Drop1
  Push                 r0
  LoadContextVar       0
  InstanceCall         1, CP#28
  ReturnTOS
  Push                 r0
  LoadContextParent
  PopLocal             r0
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = TypeArgumentsForInstanceAllocation dart.async::Completer [dart.core::int]
  [1] = ArgDesc num-args 1, num-type-args 0, names []
  [2] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#1
  [3] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
  [4] = Null
  [5] = InstanceField dart.core::_Closure::_context
  [6] = Reserved
  [7] = ArgDesc num-args 2, num-type-args 0, names []
  [8] = StaticICData target 'dart.async::_completeOnAsyncReturn', arg-desc CP#7
  [9] = Type dynamic
  [10] = ArgDesc num-args 3, num-type-args 0, names []
  [11] = ICData target-name 'completeError', arg-desc CP#10
  [12] = EndClosureFunctionScope
  [13] = Class dart.core::_Closure
  [14] = InstanceField dart.core::_Closure::_instantiator_type_arguments
  [15] = Reserved
  [16] = InstanceField dart.core::_Closure::_function_type_arguments
  [17] = Reserved
  [18] = EmptyTypeArguments
  [19] = InstanceField dart.core::_Closure::_delayed_type_arguments
  [20] = Reserved
  [21] = InstanceField dart.core::_Closure::_function
  [22] = Reserved
  [23] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
  [24] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
  [25] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
  [26] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
  [27] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#7
  [28] = ICData get target-name 'future', arg-desc CP#1
}
Closure CP#3 {
  EntryOptional        1, 3, 0
  LoadConstant         r1, CP#4
  LoadConstant         r2, CP#4
  LoadConstant         r3, CP#4
  Frame                6
  CheckStack
  Push                 r0
  LoadFieldTOS         CP#5
  PopLocal             r4
  Push                 r4
  LoadContextVar       2
  StoreLocal           r5
  PushInt              0
  IfNeStrictTOS
  Jump                 L1
  Push                 r4
  PopLocal             r6
Try #0 start:
  Push                 r4
  PushInt              42
  StoreContextVar      1
  Jump                 L2
L2:
  Push                 r4
  LoadContextVar       0
  Push                 r4
  LoadContextVar       1
  PushConstant         CP#8
  IndirectStaticCall   2, CP#7
  Drop1
  PushNull
  ReturnTOS
  Jump                 L3
Try #0 end:
Try #0 handler:
  SetFrame             10
  Push                 r6
  PopLocal             r4
  MoveSpecial          r6, exception
  MoveSpecial          r7, stackTrace
  Push                 r6
  PopLocal             r8
  Push                 r7
  PopLocal             r9
  Push                 r4
  LoadContextVar       0
  Push                 r8
  Push                 r9
  InstanceCall         3, CP#11
  Drop1
  Jump                 L3
L3:
  PushNull
  ReturnTOS
L1:
  Trap

}
]static method foo() → asy::Future<core::int> /* originally async */ {
  final asy::Completer<core::int> :async_completer = asy::Completer::sync<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);
  asy::Future::microtask<dynamic>(:async_op);
  return :async_completer.{asy::Completer::future};
}
[@vm.bytecode=
Bytecode {
  Entry                4
  CheckStack
  AllocateContext      11
  PopLocal             r0
  Push                 r0
  Push                 FP[-6]
  StoreContextVar      0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      1
  Push                 r0
  PushConstant         CP#0
  PushConstant         CP#2
  IndirectStaticCall   1, CP#1
  StoreContextVar      2
  Push                 r0
  PushNull
  StoreContextVar      3
  PushNull
  PopLocal             r2
  Push                 r0
  PushNull
  StoreContextVar      4
  Push                 r0
  PushNull
  StoreContextVar      5
  Push                 r0
  PushInt              0
  StoreContextVar      6
  Push                 r0
  PushNull
  StoreContextVar      7
  Push                 r0
  PushNull
  StoreContextVar      8
  Push                 r0
  PushNull
  StoreContextVar      9
  Push                 r0
  Allocate             CP#17
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#18
  Push                 r3
  PushNull
  StoreFieldTOS        CP#20
  Push                 r3
  PushConstant         CP#22
  StoreFieldTOS        CP#23
  Push                 r3
  PushConstant         CP#3
  StoreFieldTOS        CP#25
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#5
  StoreContextVar      10
  Push                 r0
  LoadContextVar       10
  PushConstant         CP#27
  IndirectStaticCall   1, CP#1
  PopLocal             r2
  Push                 r0
  Push                 r0
  LoadContextVar       10
  PushConstant         CP#28
  IndirectStaticCall   1, CP#1
  StoreContextVar      4
  Push                 r0
  Push                 r0
  LoadContextVar       10
  PushConstant         CP#29
  IndirectStaticCall   1, CP#1
  StoreContextVar      5
  PushConstant         CP#30
  Push                 r0
  LoadContextVar       10
  PushConstant         CP#31
  IndirectStaticCall   2, CP#10
  Drop1
  Push                 r0
  LoadContextVar       2
  InstanceCall         1, CP#32
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = TypeArgumentsForInstanceAllocation dart.async::Completer [dart.core::int]
  [1] = ArgDesc num-args 1, num-type-args 0, names []
  [2] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#1
  [3] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
  [4] = Null
  [5] = InstanceField dart.core::_Closure::_context
  [6] = Reserved
  [7] = ArgDesc num-args 4, num-type-args 0, names []
  [8] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
  [9] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
  [10] = ArgDesc num-args 2, num-type-args 0, names []
  [11] = ICData target-name '+', arg-desc CP#10
  [12] = StaticICData target 'dart.async::_completeOnAsyncReturn', arg-desc CP#10
  [13] = Type dynamic
  [14] = ArgDesc num-args 3, num-type-args 0, names []
  [15] = ICData target-name 'completeError', arg-desc CP#14
  [16] = EndClosureFunctionScope
  [17] = Class dart.core::_Closure
  [18] = InstanceField dart.core::_Closure::_instantiator_type_arguments
  [19] = Reserved
  [20] = InstanceField dart.core::_Closure::_function_type_arguments
  [21] = Reserved
  [22] = EmptyTypeArguments
  [23] = InstanceField dart.core::_Closure::_delayed_type_arguments
  [24] = Reserved
  [25] = InstanceField dart.core::_Closure::_function
  [26] = Reserved
  [27] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
  [28] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
  [29] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
  [30] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
  [31] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#10
  [32] = ICData get target-name 'future', arg-desc CP#1
}
Closure CP#3 {
  EntryOptional        1, 3, 0
  LoadConstant         r1, CP#4
  LoadConstant         r2, CP#4
  LoadConstant         r3, CP#4
  Frame                6
  CheckStack
  Push                 r0
  LoadFieldTOS         CP#5
  PopLocal             r4
  Push                 r4
  LoadContextVar       6
  StoreLocal           r5
  PushInt              0
  IfNeStrictTOS
  Jump                 L1
  Push                 r4
  Push                 r4
  StoreContextVar      8
Try #0 start:
  Push                 r4
  PushInt              1
  StoreContextVar      6
  Push                 r4
  Push                 r4
  StoreContextVar      7
  Push                 r4
  LoadContextVar       0
  Push                 r4
  LoadContextVar       4
  Push                 r4
  LoadContextVar       5
  Push                 r4
  LoadContextVar       10
  PushConstant         CP#8
  IndirectStaticCall   4, CP#7
  PopLocal             r8
  PushNull
  ReturnTOS
L6:
  IfEqNull             r2
  Jump                 L2
  Push                 r2
  Push                 r3
  Throw                1
L2:
  Push                 r4
  Push                 r1
  StoreContextVar      9
  Push                 r4
  PushInt              2
  StoreContextVar      6
  Push                 r4
  Push                 r4
  StoreContextVar      7
  Push                 r4
  LoadContextVar       1
  Push                 r4
  LoadContextVar       4
  Push                 r4
  LoadContextVar       5
  Push                 r4
  LoadContextVar       10
  PushConstant         CP#9
  IndirectStaticCall   4, CP#7
  PopLocal             r9
  PushNull
  ReturnTOS
L7:
  IfEqNull             r2
  Jump                 L3
  Push                 r2
  Push                 r3
  Throw                1
L3:
  Push                 r4
  Push                 r4
  LoadContextVar       9
  Push                 r1
  InstanceCall         2, CP#11
  StoreContextVar      3
  Jump                 L4
L4:
  Push                 r4
  LoadContextVar       2
  Push                 r4
  LoadContextVar       3
  PushConstant         CP#12
  IndirectStaticCall   2, CP#10
  Drop1
  PushNull
  ReturnTOS
  Jump                 L5
Try #0 end:
Try #0 handler:
  SetFrame             10
  Push                 r0
  LoadFieldTOS         CP#5
  PopLocal             r4
  Push                 r4
  LoadContextVar       8
  PopLocal             r4
  MoveSpecial          r6, exception
  MoveSpecial          r7, stackTrace
  Push                 r6
  PopLocal             r8
  Push                 r7
  PopLocal             r9
  Push                 r4
  LoadContextVar       2
  Push                 r8
  Push                 r9
  InstanceCall         3, CP#15
  Drop1
  Jump                 L5
L5:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       7
  PopLocal             r4
  Push                 r5
  PushInt              1
  IfEqStrictTOS
  Jump                 L6
  Jump                 L7

}
]static method simpleAsyncAwait(asy::Future<core::int> a, asy::Future<core::int> b) → asy::Future<core::int> /* originally async */ {
  final asy::Completer<core::int> :async_completer = asy::Completer::sync<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);
  asy::Future::microtask<dynamic>(:async_op);
  return :async_completer.{asy::Completer::future};
}
[@vm.bytecode=
Bytecode {
  Entry                4
  CheckStack
  AllocateContext      11
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0
  Push                 r0
  PushConstant         CP#0
  PushConstant         CP#2
  IndirectStaticCall   1, CP#1
  StoreContextVar      1
  Push                 r0
  PushNull
  StoreContextVar      2
  PushNull
  PopLocal             r2
  Push                 r0
  PushNull
  StoreContextVar      3
  Push                 r0
  PushNull
  StoreContextVar      4
  Push                 r0
  PushInt              0
  StoreContextVar      5
  Push                 r0
  PushNull
  StoreContextVar      6
  Push                 r0
  PushNull
  StoreContextVar      7
  Push                 r0
  PushNull
  StoreContextVar      8
  Push                 r0
  PushNull
  StoreContextVar      9
  Push                 r0
  Allocate             CP#28
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#29
  Push                 r3
  PushNull
  StoreFieldTOS        CP#31
  Push                 r3
  PushConstant         CP#33
  StoreFieldTOS        CP#34
  Push                 r3
  PushConstant         CP#3
  StoreFieldTOS        CP#36
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#5
  StoreContextVar      10
  Push                 r0
  LoadContextVar       10
  PushConstant         CP#38
  IndirectStaticCall   1, CP#1
  PopLocal             r2
  Push                 r0
  Push                 r0
  LoadContextVar       10
  PushConstant         CP#39
  IndirectStaticCall   1, CP#1
  StoreContextVar      3
  Push                 r0
  Push                 r0
  LoadContextVar       10
  PushConstant         CP#40
  IndirectStaticCall   1, CP#1
  StoreContextVar      4
  PushConstant         CP#41
  Push                 r0
  LoadContextVar       10
  PushConstant         CP#42
  IndirectStaticCall   2, CP#7
  Drop1
  Push                 r0
  LoadContextVar       1
  InstanceCall         1, CP#43
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = TypeArgumentsForInstanceAllocation dart.async::Completer [dart.core::int]
  [1] = ArgDesc num-args 1, num-type-args 0, names []
  [2] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#1
  [3] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
  [4] = Null
  [5] = InstanceField dart.core::_Closure::_context
  [6] = Reserved
  [7] = ArgDesc num-args 2, num-type-args 0, names []
  [8] = ICData target-name '<', arg-desc CP#7
  [9] = ICData get target-name 'iterator', arg-desc CP#1
  [10] = ICData target-name 'moveNext', arg-desc CP#1
  [11] = ICData get target-name 'current', arg-desc CP#1
  [12] = ICData target-name '+', arg-desc CP#7
  [13] = ArgDesc num-args 0, num-type-args 0, names []
  [14] = StaticICData target '#lib::foo', arg-desc CP#13
  [15] = ArgDesc num-args 4, num-type-args 0, names []
  [16] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#15
  [17] = ICData target-name '+', arg-desc CP#7
  [18] = ICData target-name '+', arg-desc CP#7
  [19] = ICData target-name '+', arg-desc CP#7
  [20] = ICData target-name '<', arg-desc CP#7
  [21] = ICData target-name '+', arg-desc CP#7
  [22] = ICData target-name '+', arg-desc CP#7
  [23] = StaticICData target 'dart.async::_completeOnAsyncReturn', arg-desc CP#7
  [24] = Type dynamic
  [25] = ArgDesc num-args 3, num-type-args 0, names []
  [26] = ICData target-name 'completeError', arg-desc CP#25
  [27] = EndClosureFunctionScope
  [28] = Class dart.core::_Closure
  [29] = InstanceField dart.core::_Closure::_instantiator_type_arguments
  [30] = Reserved
  [31] = InstanceField dart.core::_Closure::_function_type_arguments
  [32] = Reserved
  [33] = EmptyTypeArguments
  [34] = InstanceField dart.core::_Closure::_delayed_type_arguments
  [35] = Reserved
  [36] = InstanceField dart.core::_Closure::_function
  [37] = Reserved
  [38] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
  [39] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
  [40] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
  [41] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
  [42] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#7
  [43] = ICData get target-name 'future', arg-desc CP#1
}
Closure CP#3 {
  EntryOptional        1, 3, 0
  LoadConstant         r1, CP#4
  LoadConstant         r2, CP#4
  LoadConstant         r3, CP#4
  Frame                7
  CheckStack
  Push                 r0
  LoadFieldTOS         CP#5
  PopLocal             r4
  Push                 r4
  LoadContextVar       5
  StoreLocal           r5
  PushInt              0
  IfNeStrictTOS
  Jump                 L1
  Push                 r4
  Push                 r4
  StoreContextVar      7
Try #0 start:
  AllocateContext      1
  StoreLocal           r5
  Push                 r5
  Push                 r4
  StoreContextParent
  PopLocal             r4
  Push                 r4
  PushInt              0
  StoreContextVar      0
  AllocateContext      2
  StoreLocal           r5
  Push                 r5
  Push                 r4
  StoreContextParent
  PopLocal             r4
  Push                 r4
  PushInt              0
  StoreContextVar      0
L6:
  CheckStack
  Push                 r4
  LoadContextVar       0
  PushInt              10
  InstanceCall         2, CP#8
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L2
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextVar       0
  InstanceCall         1, CP#9
  PopLocal             r8
  Push                 r4
  Push                 r8
  StoreContextVar      1
L5:
  CheckStack
  Push                 r4
  LoadContextVar       1
  StoreLocal           r8
  InstanceCall         1, CP#10
  PushTrue
  IfNeStrictTOS
  Jump                 L3
  AllocateContext      1
  StoreLocal           r5
  Push                 r5
  Push                 r4
  StoreContextParent
  PopLocal             r4
  Push                 r4
  Push                 r8
  InstanceCall         1, CP#11
  StoreContextVar      0
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextVar       0
  StoreContextVar      9
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  Push                 r4
  LoadContextParent
  LoadContextVar       0
  Push                 r4
  LoadContextVar       0
  InstanceCall         2, CP#12
  StoreContextVar      8
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  PushInt              1
  StoreContextVar      5
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  Push                 r4
  StoreContextVar      6
  PushConstant         CP#14
  IndirectStaticCall   0, CP#13
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       3
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       4
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       10
  PushConstant         CP#16
  IndirectStaticCall   4, CP#15
  PopLocal             r10
  PushNull
  ReturnTOS
L11:
  IfEqNull             r2
  Jump                 L4
  Push                 r2
  Push                 r3
  Throw                1
L4:
  Push                 r4
  LoadContextParent
  LoadContextParent
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       9
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       8
  Push                 r1
  InstanceCall         2, CP#17
  InstanceCall         2, CP#18
  StoreContextVar      0
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L5
L3:
  Push                 r4
  CloneContext
  PopLocal             r4
  Push                 r4
  Push                 r4
  LoadContextVar       0
  PushInt              1
  InstanceCall         2, CP#19
  StoreLocal           r8
  StoreContextVar      0
  Push                 r8
  Drop1
  Jump                 L6
L2:
  Push                 r4
  LoadContextParent
  PopLocal             r4
  PushInt              0
  PopLocal             r8
L8:
  CheckStack
  Push                 r8
  PushInt              10
  InstanceCall         2, CP#20
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L7
  Push                 r4
  Push                 r4
  LoadContextVar       0
  Push                 r8
  InstanceCall         2, CP#21
  StoreContextVar      0
  Push                 r8
  PushInt              1
  InstanceCall         2, CP#22
  StoreLocal           r8
  Drop1
  Jump                 L8
L7:
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       0
  StoreContextVar      2
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L9
  Push                 r4
  LoadContextParent
  PopLocal             r4
L9:
  Push                 r4
  LoadContextVar       1
  Push                 r4
  LoadContextVar       2
  PushConstant         CP#23
  IndirectStaticCall   2, CP#7
  Drop1
  PushNull
  ReturnTOS
  Jump                 L10
Try #0 end:
Try #0 handler:
  SetFrame             11
  Push                 r0
  LoadFieldTOS         CP#5
  PopLocal             r4
  Push                 r4
  LoadContextVar       7
  PopLocal             r4
  MoveSpecial          r6, exception
  MoveSpecial          r7, stackTrace
  Push                 r6
  PopLocal             r8
  Push                 r7
  PopLocal             r9
  Push                 r4
  LoadContextVar       1
  Push                 r8
  Push                 r9
  InstanceCall         3, CP#26
  Drop1
  Jump                 L10
L10:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       6
  PopLocal             r4
  Jump                 L11

}
]static method loops(core::List<core::int> list) → asy::Future<core::int> /* originally async */ {
  final asy::Completer<core::int> :async_completer = asy::Completer::sync<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);
  asy::Future::microtask<dynamic>(:async_op);
  return :async_completer.{asy::Completer::future};
}
[@vm.bytecode=
Bytecode {
  Entry                4
  CheckStack
  AllocateContext      16
  PopLocal             r0
  Push                 r0
  Push                 FP[-7]
  StoreContextVar      0
  Push                 r0
  Push                 FP[-6]
  StoreContextVar      1
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      2
  Push                 r0
  PushConstant         CP#0
  PushConstant         CP#2
  IndirectStaticCall   1, CP#1
  StoreContextVar      3
  Push                 r0
  PushNull
  StoreContextVar      4
  PushNull
  PopLocal             r2
  Push                 r0
  PushNull
  StoreContextVar      5
  Push                 r0
  PushNull
  StoreContextVar      6
  Push                 r0
  PushInt              0
  StoreContextVar      7
  Push                 r0
  PushNull
  StoreContextVar      8
  Push                 r0
  PushNull
  StoreContextVar      9
  Push                 r0
  PushNull
  StoreContextVar      10
  Push                 r0
  PushNull
  StoreContextVar      11
  Push                 r0
  PushNull
  StoreContextVar      12
  Push                 r0
  PushNull
  StoreContextVar      13
  Push                 r0
  PushNull
  StoreContextVar      14
  Push                 r0
  Allocate             CP#30
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#31
  Push                 r3
  PushNull
  StoreFieldTOS        CP#33
  Push                 r3
  PushConstant         CP#35
  StoreFieldTOS        CP#36
  Push                 r3
  PushConstant         CP#3
  StoreFieldTOS        CP#38
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#5
  StoreContextVar      15
  Push                 r0
  LoadContextVar       15
  PushConstant         CP#40
  IndirectStaticCall   1, CP#1
  PopLocal             r2
  Push                 r0
  Push                 r0
  LoadContextVar       15
  PushConstant         CP#41
  IndirectStaticCall   1, CP#1
  StoreContextVar      5
  Push                 r0
  Push                 r0
  LoadContextVar       15
  PushConstant         CP#42
  IndirectStaticCall   1, CP#1
  StoreContextVar      6
  PushConstant         CP#43
  Push                 r0
  LoadContextVar       15
  PushConstant         CP#44
  IndirectStaticCall   2, CP#9
  Drop1
  Push                 r0
  LoadContextVar       3
  InstanceCall         1, CP#45
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = TypeArgumentsForInstanceAllocation dart.async::Completer [dart.core::int]
  [1] = ArgDesc num-args 1, num-type-args 0, names []
  [2] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#1
  [3] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
  [4] = Null
  [5] = InstanceField dart.core::_Closure::_context
  [6] = Reserved
  [7] = ArgDesc num-args 4, num-type-args 0, names []
  [8] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
  [9] = ArgDesc num-args 2, num-type-args 0, names []
  [10] = ICData target-name '+', arg-desc CP#9
  [11] = Type dynamic
  [12] = Type dart.core::Error
  [13] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#7
  [14] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
  [15] = ICData target-name '+', arg-desc CP#9
  [16] = String 'fin'
  [17] = StaticICData target 'dart.core::print', arg-desc CP#1
  [18] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
  [19] = ICData target-name '+', arg-desc CP#9
  [20] = StaticICData target 'dart.core::print', arg-desc CP#1
  [21] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
  [22] = ICData target-name '+', arg-desc CP#9
  [23] = StaticICData target 'dart.core::print', arg-desc CP#1
  [24] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
  [25] = ICData target-name '+', arg-desc CP#9
  [26] = StaticICData target 'dart.async::_completeOnAsyncReturn', arg-desc CP#9
  [27] = ArgDesc num-args 3, num-type-args 0, names []
  [28] = ICData target-name 'completeError', arg-desc CP#27
  [29] = EndClosureFunctionScope
  [30] = Class dart.core::_Closure
  [31] = InstanceField dart.core::_Closure::_instantiator_type_arguments
  [32] = Reserved
  [33] = InstanceField dart.core::_Closure::_function_type_arguments
  [34] = Reserved
  [35] = EmptyTypeArguments
  [36] = InstanceField dart.core::_Closure::_delayed_type_arguments
  [37] = Reserved
  [38] = InstanceField dart.core::_Closure::_function
  [39] = Reserved
  [40] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
  [41] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
  [42] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
  [43] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
  [44] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#9
  [45] = ICData get target-name 'future', arg-desc CP#1
}
Closure CP#3 {
  EntryOptional        1, 3, 0
  LoadConstant         r1, CP#4
  LoadConstant         r2, CP#4
  LoadConstant         r3, CP#4
  Frame                10
  CheckStack
  Push                 r0
  LoadFieldTOS         CP#5
  PopLocal             r4
  Push                 r4
  LoadContextVar       7
  StoreLocal           r5
  PushInt              0
  IfNeStrictTOS
  Jump                 L1
  Push                 r4
  Push                 r4
  StoreContextVar      9
Try #0 start:
  AllocateContext      2
  StoreLocal           r5
  Push                 r5
  Push                 r4
  StoreContextParent
  PopLocal             r4
  Push                 r4
  PushInt              1
  StoreContextVar      0
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      10
Try #1 start:
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      11
Try #2 start:
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       0
  StoreContextVar      14
  Push                 r4
  LoadContextParent
  PushInt              1
  StoreContextVar      7
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      8
  Push                 r4
  LoadContextParent
  LoadContextVar       0
  Push                 r4
  LoadContextParent
  LoadContextVar       5
  Push                 r4
  LoadContextParent
  LoadContextVar       6
  Push                 r4
  LoadContextParent
  LoadContextVar       15
  PushConstant         CP#8
  IndirectStaticCall   4, CP#7
  PopLocal             r13
  PushNull
  ReturnTOS
L13:
  IfEqNull             r2
  Jump                 L2
  Push                 r2
  Push                 r3
  Throw                1
L2:
  Push                 r4
  Push                 r4
  LoadContextParent
  LoadContextVar       14
  Push                 r1
  InstanceCall         2, CP#10
  StoreContextVar      0
  Jump                 L3
Try #2 end:
Try #2 handler:
  SetFrame             14
  Push                 r0
  LoadFieldTOS         CP#5
  PopLocal             r4
  Push                 r4
  LoadContextVar       11
  PopLocal             r4
  MoveSpecial          r10, exception
  MoveSpecial          r11, stackTrace
  Push                 r4
  LoadContextParent
  Push                 r10
  StoreContextVar      12
  Push                 r4
  LoadContextParent
  Push                 r11
  StoreContextVar      13
  Push                 r4
  Push                 r10
  StoreContextVar      1
  Push                 r4
  LoadContextVar       1
  PushNull
  PushNull
  PushConstant         CP#12
  InstanceCall         4, CP#13
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L4
  Push                 r4
  LoadContextParent
  PushInt              42
  StoreContextVar      4
  Jump                 L5
L4:
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       0
  StoreContextVar      14
  Push                 r4
  LoadContextParent
  PushInt              2
  StoreContextVar      7
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      8
  Push                 r4
  LoadContextParent
  LoadContextVar       1
  Push                 r4
  LoadContextParent
  LoadContextVar       5
  Push                 r4
  LoadContextParent
  LoadContextVar       6
  Push                 r4
  LoadContextParent
  LoadContextVar       15
  PushConstant         CP#14
  IndirectStaticCall   4, CP#7
  PopLocal             r13
  PushNull
  ReturnTOS
L14:
  IfEqNull             r2
  Jump                 L6
  Push                 r2
  Push                 r3
  Throw                1
L6:
  Push                 r4
  Push                 r4
  LoadContextParent
  LoadContextVar       14
  Push                 r1
  InstanceCall         2, CP#15
  StoreContextVar      0
  Push                 r4
  LoadContextParent
  LoadContextVar       12
  Push                 r4
  LoadContextParent
  LoadContextVar       13
  Throw                1
  Drop1
  Jump                 L3
L3:
  Jump                 L7
Try #1 end:
Try #1 handler:
  SetFrame             14
  Push                 r0
  LoadFieldTOS         CP#5
  PopLocal             r4
  Push                 r4
  LoadContextVar       10
  PopLocal             r4
  MoveSpecial          r8, exception
  MoveSpecial          r9, stackTrace
  Push                 r4
  LoadContextParent
  Push                 r8
  StoreContextVar      12
  Push                 r4
  LoadContextParent
  Push                 r9
  StoreContextVar      13
  PushConstant         CP#16
  PushConstant         CP#17
  IndirectStaticCall   1, CP#1
  Drop1
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       0
  StoreContextVar      14
  Push                 r4
  LoadContextParent
  PushInt              3
  StoreContextVar      7
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      8
  Push                 r4
  LoadContextParent
  LoadContextVar       2
  Push                 r4
  LoadContextParent
  LoadContextVar       5
  Push                 r4
  LoadContextParent
  LoadContextVar       6
  Push                 r4
  LoadContextParent
  LoadContextVar       15
  PushConstant         CP#18
  IndirectStaticCall   4, CP#7
  PopLocal             r12
  PushNull
  ReturnTOS
L15:
  IfEqNull             r2
  Jump                 L8
  Push                 r2
  Push                 r3
  Throw                1
L8:
  Push                 r4
  Push                 r4
  LoadContextParent
  LoadContextVar       14
  Push                 r1
  InstanceCall         2, CP#19
  StoreContextVar      0
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       0
  StoreContextVar      4
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L9
  Push                 r4
  LoadContextParent
  LoadContextVar       12
  Push                 r4
  LoadContextParent
  LoadContextVar       13
  Throw                1
L5:
  Push                 r0
  LoadFieldTOS         CP#5
  PopLocal             r4
  Push                 r4
  LoadContextVar       10
  PopLocal             r4
  PushConstant         CP#16
  PushConstant         CP#20
  IndirectStaticCall   1, CP#1
  Drop1
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       0
  StoreContextVar      14
  Push                 r4
  LoadContextParent
  PushInt              4
  StoreContextVar      7
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      8
  Push                 r4
  LoadContextParent
  LoadContextVar       2
  Push                 r4
  LoadContextParent
  LoadContextVar       5
  Push                 r4
  LoadContextParent
  LoadContextVar       6
  Push                 r4
  LoadContextParent
  LoadContextVar       15
  PushConstant         CP#21
  IndirectStaticCall   4, CP#7
  PopLocal             r12
  PushNull
  ReturnTOS
L16:
  IfEqNull             r2
  Jump                 L10
  Push                 r2
  Push                 r3
  Throw                1
L10:
  Push                 r4
  Push                 r4
  LoadContextParent
  LoadContextVar       14
  Push                 r1
  InstanceCall         2, CP#22
  StoreContextVar      0
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       0
  StoreContextVar      4
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L9
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L9
L7:
  Push                 r0
  LoadFieldTOS         CP#5
  PopLocal             r4
  Push                 r4
  LoadContextVar       10
  PopLocal             r4
  PushConstant         CP#16
  PushConstant         CP#23
  IndirectStaticCall   1, CP#1
  Drop1
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       0
  StoreContextVar      14
  Push                 r4
  LoadContextParent
  PushInt              5
  StoreContextVar      7
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      8
  Push                 r4
  LoadContextParent
  LoadContextVar       2
  Push                 r4
  LoadContextParent
  LoadContextVar       5
  Push                 r4
  LoadContextParent
  LoadContextVar       6
  Push                 r4
  LoadContextParent
  LoadContextVar       15
  PushConstant         CP#24
  IndirectStaticCall   4, CP#7
  PopLocal             r12
  PushNull
  ReturnTOS
L17:
  IfEqNull             r2
  Jump                 L11
  Push                 r2
  Push                 r3
  Throw                1
L11:
  Push                 r4
  Push                 r4
  LoadContextParent
  LoadContextVar       14
  Push                 r1
  InstanceCall         2, CP#25
  StoreContextVar      0
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextVar       0
  StoreContextVar      4
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L9
  Push                 r4
  LoadContextParent
  PopLocal             r4
L9:
  Push                 r4
  LoadContextVar       3
  Push                 r4
  LoadContextVar       4
  PushConstant         CP#26
  IndirectStaticCall   2, CP#9
  Drop1
  PushNull
  ReturnTOS
  Jump                 L12
Try #0 end:
Try #0 handler:
  SetFrame             14
  Push                 r0
  LoadFieldTOS         CP#5
  PopLocal             r4
  Push                 r4
  LoadContextVar       9
  PopLocal             r4
  MoveSpecial          r6, exception
  MoveSpecial          r7, stackTrace
  Push                 r6
  PopLocal             r8
  Push                 r7
  PopLocal             r9
  Push                 r4
  LoadContextVar       3
  Push                 r8
  Push                 r9
  InstanceCall         3, CP#28
  Drop1
  Jump                 L12
L12:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       8
  PopLocal             r4
  Push                 r5
  PushInt              1
  IfEqStrictTOS
  Jump                 L13
  Push                 r5
  PushInt              2
  IfEqStrictTOS
  Jump                 L14
  Push                 r5
  PushInt              3
  IfEqStrictTOS
  Jump                 L15
  Push                 r5
  PushInt              4
  IfEqStrictTOS
  Jump                 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::Completer<core::int> :async_completer = asy::Completer::sync<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);
  asy::Future::microtask<dynamic>(:async_op);
  return :async_completer.{asy::Completer::future};
}
[@vm.bytecode=
Bytecode {
  Entry                4
  CheckStack
  AllocateContext      2
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0
  Push                 r0
  PushInt              3
  StoreContextVar      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
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction nested () → dart.async::Future<dart.core::int> /* originally async */ ;
  [1] = InstanceField dart.core::_Closure::_context
  [2] = Reserved
  [3] = TypeArgumentsForInstanceAllocation dart.async::Completer [dart.core::int]
  [4] = ArgDesc num-args 1, num-type-args 0, names []
  [5] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#4
  [6] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
  [7] = Null
  [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] = ICData target-name '+', arg-desc CP#10
  [12] = Type dynamic
  [13] = String 'fin'
  [14] = StaticICData target 'dart.core::print', arg-desc CP#4
  [15] = StaticICData target 'dart.core::print', arg-desc CP#4
  [16] = StaticICData target 'dart.core::print', arg-desc CP#4
  [17] = StaticICData target 'dart.async::_completeOnAsyncReturn', arg-desc CP#10
  [18] = ArgDesc num-args 3, num-type-args 0, names []
  [19] = ICData target-name 'completeError', arg-desc CP#18
  [20] = EndClosureFunctionScope
  [21] = Class dart.core::_Closure
  [22] = InstanceField dart.core::_Closure::_instantiator_type_arguments
  [23] = Reserved
  [24] = InstanceField dart.core::_Closure::_function_type_arguments
  [25] = Reserved
  [26] = EmptyTypeArguments
  [27] = InstanceField dart.core::_Closure::_delayed_type_arguments
  [28] = Reserved
  [29] = InstanceField dart.core::_Closure::_function
  [30] = Reserved
  [31] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#4
  [32] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#4
  [33] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#4
  [34] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
  [35] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#10
  [36] = ICData get target-name 'future', arg-desc CP#4
  [37] = EndClosureFunctionScope
}
Closure CP#6 {
  EntryOptional        1, 3, 0
  LoadConstant         r1, CP#7
  LoadConstant         r2, CP#7
  LoadConstant         r3, CP#7
  Frame                8
  CheckStack
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  Push                 r4
  LoadContextVar       4
  StoreLocal           r5
  PushInt              0
  IfNeStrictTOS
  Jump                 L1
  Push                 r4
  Push                 r4
  StoreContextVar      6
Try #0 start:
  AllocateContext      1
  StoreLocal           r5
  Push                 r5
  Push                 r4
  StoreContextParent
  PopLocal             r4
  Push                 r4
  PushInt              4
  StoreContextVar      0
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      7
Try #1 start:
  Push                 r4
  LoadContextParent
  LoadContextParent
  PushInt              5
  StoreContextVar      1
  Push                 r4
  LoadContextParent
  PushInt              1
  StoreContextVar      4
  Push                 r4
  LoadContextParent
  Push                 r4
  StoreContextVar      5
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextVar       0
  Push                 r4
  LoadContextParent
  LoadContextVar       2
  Push                 r4
  LoadContextParent
  LoadContextVar       3
  Push                 r4
  LoadContextParent
  LoadContextVar       8
  PushConstant         CP#9
  IndirectStaticCall   4, CP#8
  PopLocal             r11
  PushNull
  ReturnTOS
L7:
  IfEqNull             r2
  Jump                 L2
  Push                 r2
  Push                 r3
  Throw                1
L2:
  Push                 r4
  Push                 r1
  StoreContextVar      0
  Push                 r4
  LoadContextParent
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextVar       1
  Push                 r4
  LoadContextVar       0
  InstanceCall         2, CP#11
  StoreContextVar      1
  Jump                 L3
  Jump                 L4
Try #1 end:
Try #1 handler:
  SetFrame             12
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  Push                 r4
  LoadContextVar       7
  PopLocal             r4
  MoveSpecial          r8, exception
  MoveSpecial          r9, stackTrace
  PushConstant         CP#13
  PushConstant         CP#14
  IndirectStaticCall   1, CP#4
  Drop1
  Push                 r8
  Push                 r9
  Throw                1
L3:
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  Push                 r4
  LoadContextVar       7
  PopLocal             r4
  PushConstant         CP#13
  PushConstant         CP#15
  IndirectStaticCall   1, CP#4
  Drop1
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L5
L4:
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  Push                 r4
  LoadContextVar       7
  PopLocal             r4
  PushConstant         CP#13
  PushConstant         CP#16
  IndirectStaticCall   1, CP#4
  Drop1
  Push                 r4
  LoadContextParent
  PopLocal             r4
L5:
  Push                 r4
  LoadContextVar       0
  Push                 r4
  LoadContextVar       1
  PushConstant         CP#17
  IndirectStaticCall   2, CP#10
  Drop1
  PushNull
  ReturnTOS
  Jump                 L6
Try #0 end:
Try #0 handler:
  SetFrame             12
  Push                 r0
  LoadFieldTOS         CP#1
  PopLocal             r4
  Push                 r4
  LoadContextVar       6
  PopLocal             r4
  MoveSpecial          r6, exception
  MoveSpecial          r7, stackTrace
  Push                 r6
  PopLocal             r8
  Push                 r7
  PopLocal             r9
  Push                 r4
  LoadContextVar       0
  Push                 r8
  Push                 r9
  InstanceCall         3, CP#19
  Drop1
  Jump                 L6
L6:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       5
  PopLocal             r4
  Jump                 L7

}

Closure CP#0 {
  EntryFixed           1, 4
  CheckStack
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  AllocateContext      9
  StoreLocal           r1
  Push                 r1
  Push                 r0
  StoreContextParent
  PopLocal             r0
  Push                 r0
  PushConstant         CP#3
  PushConstant         CP#5
  IndirectStaticCall   1, CP#4
  StoreContextVar      0
  Push                 r0
  PushNull
  StoreContextVar      1
  PushNull
  PopLocal             r2
  Push                 r0
  PushNull
  StoreContextVar      2
  Push                 r0
  PushNull
  StoreContextVar      3
  Push                 r0
  PushInt              0
  StoreContextVar      4
  Push                 r0
  PushNull
  StoreContextVar      5
  Push                 r0
  PushNull
  StoreContextVar      6
  Push                 r0
  PushNull
  StoreContextVar      7
  Push                 r0
  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#6
  StoreFieldTOS        CP#29
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#1
  StoreContextVar      8
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#31
  IndirectStaticCall   1, CP#4
  PopLocal             r2
  Push                 r0
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#32
  IndirectStaticCall   1, CP#4
  StoreContextVar      2
  Push                 r0
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#33
  IndirectStaticCall   1, CP#4
  StoreContextVar      3
  PushConstant         CP#34
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#35
  IndirectStaticCall   2, CP#10
  Drop1
  Push                 r0
  LoadContextVar       0
  InstanceCall         1, CP#36
  ReturnTOS
  Push                 r0
  LoadContextParent
  PopLocal             r0
  PushNull
  ReturnTOS

}
]static method closure(asy::Future<core::int> a) → dynamic {
  core::int x = 3;
  function nested() → asy::Future<core::int> /* originally async */ {
    final asy::Completer<core::int> :async_completer = asy::Completer::sync<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);
    asy::Future::microtask<dynamic>(:async_op);
    return :async_completer.{asy::Completer::future};
  }
  return nested;
}
[@vm.bytecode=
Bytecode {
  Entry                4
  CheckStack
  AllocateContext      9
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0
  Push                 r0
  PushConstant         CP#0
  PushConstant         CP#2
  IndirectStaticCall   1, CP#1
  StoreContextVar      1
  Push                 r0
  PushNull
  StoreContextVar      2
  PushNull
  PopLocal             r2
  Push                 r0
  PushNull
  StoreContextVar      3
  Push                 r0
  PushNull
  StoreContextVar      4
  Push                 r0
  PushInt              0
  StoreContextVar      5
  Push                 r0
  PushNull
  StoreContextVar      6
  Push                 r0
  PushNull
  StoreContextVar      7
  Push                 r0
  Allocate             CP#17
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#18
  Push                 r3
  PushNull
  StoreFieldTOS        CP#20
  Push                 r3
  PushConstant         CP#22
  StoreFieldTOS        CP#23
  Push                 r3
  PushConstant         CP#3
  StoreFieldTOS        CP#25
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#5
  StoreContextVar      8
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#27
  IndirectStaticCall   1, CP#1
  PopLocal             r2
  Push                 r0
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#28
  IndirectStaticCall   1, CP#1
  StoreContextVar      3
  Push                 r0
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#29
  IndirectStaticCall   1, CP#1
  StoreContextVar      4
  PushConstant         CP#30
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#31
  IndirectStaticCall   2, CP#9
  Drop1
  Push                 r0
  LoadContextVar       1
  InstanceCall         1, CP#32
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = TypeArgumentsForInstanceAllocation dart.async::Completer [dart.core::int]
  [1] = ArgDesc num-args 1, num-type-args 0, names []
  [2] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#1
  [3] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
  [4] = Null
  [5] = InstanceField dart.core::_Closure::_context
  [6] = Reserved
  [7] = ArgDesc num-args 4, num-type-args 0, names []
  [8] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
  [9] = ArgDesc num-args 2, num-type-args 0, names []
  [10] = ICData target-name '==', arg-desc CP#9
  [11] = ArgDesc num-args 3, num-type-args 0, names []
  [12] = StaticICData target 'dart.core::_AssertionError::_throwNew', arg-desc CP#11
  [13] = StaticICData target 'dart.async::_completeOnAsyncReturn', arg-desc CP#9
  [14] = Type dynamic
  [15] = ICData target-name 'completeError', arg-desc CP#11
  [16] = EndClosureFunctionScope
  [17] = Class dart.core::_Closure
  [18] = InstanceField dart.core::_Closure::_instantiator_type_arguments
  [19] = Reserved
  [20] = InstanceField dart.core::_Closure::_function_type_arguments
  [21] = Reserved
  [22] = EmptyTypeArguments
  [23] = InstanceField dart.core::_Closure::_delayed_type_arguments
  [24] = Reserved
  [25] = InstanceField dart.core::_Closure::_function
  [26] = Reserved
  [27] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
  [28] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
  [29] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
  [30] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
  [31] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#9
  [32] = ICData get target-name 'future', arg-desc CP#1
}
Closure CP#3 {
  EntryOptional        1, 3, 0
  LoadConstant         r1, CP#4
  LoadConstant         r2, CP#4
  LoadConstant         r3, CP#4
  Frame                6
  CheckStack
  Push                 r0
  LoadFieldTOS         CP#5
  PopLocal             r4
  Push                 r4
  LoadContextVar       5
  StoreLocal           r5
  PushInt              0
  IfNeStrictTOS
  Jump                 L1
  Push                 r4
  Push                 r4
  StoreContextVar      7
Try #0 start:
  JumpIfNoAsserts      L2
  Push                 r4
  PushInt              1
  StoreContextVar      5
  Push                 r4
  Push                 r4
  StoreContextVar      6
  Push                 r4
  LoadContextVar       0
  Push                 r4
  LoadContextVar       3
  Push                 r4
  LoadContextVar       4
  Push                 r4
  LoadContextVar       8
  PushConstant         CP#8
  IndirectStaticCall   4, CP#7
  PopLocal             r8
  PushNull
  ReturnTOS
L6:
  IfEqNull             r2
  Jump                 L3
  Push                 r2
  Push                 r3
  Throw                1
L3:
  JumpIfNoAsserts      L2
  Push                 r1
  PushInt              42
  InstanceCall         2, CP#10
  AssertBoolean        0
  PushTrue
  IfEqStrictTOS
  Jump                 L2
  PushInt              0
  PushInt              0
  PushNull
  PushConstant         CP#12
  IndirectStaticCall   3, CP#11
  Drop1
L2:
  Push                 r4
  PushInt              7
  StoreContextVar      2
  Jump                 L4
L4:
  Push                 r4
  LoadContextVar       1
  Push                 r4
  LoadContextVar       2
  PushConstant         CP#13
  IndirectStaticCall   2, CP#9
  Drop1
  PushNull
  ReturnTOS
  Jump                 L5
Try #0 end:
Try #0 handler:
  SetFrame             10
  Push                 r0
  LoadFieldTOS         CP#5
  PopLocal             r4
  Push                 r4
  LoadContextVar       7
  PopLocal             r4
  MoveSpecial          r6, exception
  MoveSpecial          r7, stackTrace
  Push                 r6
  PopLocal             r8
  Push                 r7
  PopLocal             r9
  Push                 r4
  LoadContextVar       1
  Push                 r8
  Push                 r9
  InstanceCall         3, CP#15
  Drop1
  Jump                 L5
L5:
  PushNull
  ReturnTOS
L1:
  Push                 r4
  LoadContextVar       6
  PopLocal             r4
  Jump                 L6

}
]static method testAssert(asy::Future<core::int> a) → asy::Future<core::int> /* originally async */ {
  final asy::Completer<core::int> :async_completer = asy::Completer::sync<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);
  asy::Future::microtask<dynamic>(:async_op);
  return :async_completer.{asy::Completer::future};
}
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack
  PushNull
  ReturnTOS
}
ConstantPool {
}
]static method main() → dynamic {}
