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
  JumpIfNeStrict       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:
  Push                 r2
  JumpIfNull           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]
  PushConstant         CP#3
  PushNull
  PushNull
  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
  JumpIfNeStrict       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
  JumpIfNeStrict       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:
  Push                 r2
  JumpIfNull           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:
  Push                 r2
  JumpIfNull           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
  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::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#22
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#23
  Push                 r3
  PushNull
  StoreFieldTOS        CP#25
  Push                 r3
  PushConstant         CP#27
  StoreFieldTOS        CP#28
  Push                 r3
  PushConstant         CP#3
  StoreFieldTOS        CP#30
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#5
  StoreContextVar      10
  Push                 r0
  LoadContextVar       10
  PushConstant         CP#32
  IndirectStaticCall   1, CP#1
  PopLocal             r2
  Push                 r0
  Push                 r0
  LoadContextVar       10
  PushConstant         CP#33
  IndirectStaticCall   1, CP#1
  StoreContextVar      3
  Push                 r0
  Push                 r0
  LoadContextVar       10
  PushConstant         CP#34
  IndirectStaticCall   1, CP#1
  StoreContextVar      4
  PushConstant         CP#35
  Push                 r0
  LoadContextVar       10
  PushConstant         CP#36
  IndirectStaticCall   2, CP#14
  Drop1
  Push                 r0
  LoadContextVar       1
  InstanceCall         1, CP#37
  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] = ICData get target-name 'iterator', arg-desc CP#1
  [8] = ICData target-name 'moveNext', arg-desc CP#1
  [9] = ICData get target-name 'current', arg-desc CP#1
  [10] = ArgDesc num-args 0, num-type-args 0, names []
  [11] = StaticICData target '#lib::foo', arg-desc CP#10
  [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] = ICData target-name '+', arg-desc CP#14
  [16] = ICData target-name '+', arg-desc CP#14
  [17] = StaticICData target 'dart.async::_completeOnAsyncReturn', arg-desc CP#14
  [18] = Type dynamic
  [19] = ArgDesc num-args 3, num-type-args 0, names []
  [20] = ICData target-name 'completeError', arg-desc CP#19
  [21] = EndClosureFunctionScope
  [22] = Class dart.core::_Closure
  [23] = InstanceField dart.core::_Closure::_instantiator_type_arguments
  [24] = Reserved
  [25] = InstanceField dart.core::_Closure::_function_type_arguments
  [26] = Reserved
  [27] = EmptyTypeArguments
  [28] = InstanceField dart.core::_Closure::_delayed_type_arguments
  [29] = Reserved
  [30] = InstanceField dart.core::_Closure::_function
  [31] = Reserved
  [32] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
  [33] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
  [34] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
  [35] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
  [36] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#14
  [37] = 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
  JumpIfNeStrict       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
  CompareIntLt
  AssertBoolean        0
  JumpIfFalse          L2
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextVar       0
  InstanceCall         1, CP#7
  PopLocal             r8
  Push                 r4
  Push                 r8
  StoreContextVar      1
L5:
  CheckStack
  Push                 r4
  LoadContextVar       1
  StoreLocal           r8
  InstanceCall         1, CP#8
  JumpIfFalse          L3
  AllocateContext      1
  StoreLocal           r5
  Push                 r5
  Push                 r4
  StoreContextParent
  PopLocal             r4
  Push                 r4
  Push                 r8
  InstanceCall         1, CP#9
  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
  AddInt
  StoreContextVar      8
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  PushInt              1
  StoreContextVar      5
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  Push                 r4
  StoreContextVar      6
  PushConstant         CP#11
  IndirectStaticCall   0, CP#10
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       3
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       4
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       10
  PushConstant         CP#13
  IndirectStaticCall   4, CP#12
  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       9
  Push                 r4
  LoadContextParent
  LoadContextParent
  LoadContextParent
  LoadContextVar       8
  Push                 r1
  InstanceCall         2, CP#15
  InstanceCall         2, CP#16
  StoreContextVar      0
  Push                 r4
  LoadContextParent
  PopLocal             r4
  Jump                 L5
L3:
  Push                 r4
  CloneContext
  PopLocal             r4
  Push                 r4
  Push                 r4
  LoadContextVar       0
  PushInt              1
  AddInt
  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
  CompareIntLt
  AssertBoolean        0
  JumpIfFalse          L7
  Push                 r4
  Push                 r4
  LoadContextVar       0
  Push                 r8
  AddInt
  StoreContextVar      0
  Push                 r8
  PushInt              1
  AddInt
  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#17
  IndirectStaticCall   2, CP#14
  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#20
  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::_simpleInstanceOf', arg-desc CP#9
  [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
  JumpIfNeStrict       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:
  Push                 r2
  JumpIfNull           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
  PushConstant         CP#12
  InstanceCall         2, CP#13
  AssertBoolean        0
  JumpIfFalse          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:
  Push                 r2
  JumpIfNull           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:
  Push                 r2
  JumpIfNull           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:
  Push                 r2
  JumpIfNull           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:
  Push                 r2
  JumpIfNull           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
  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::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#20
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#21
  Push                 r3
  PushNull
  StoreFieldTOS        CP#23
  Push                 r3
  PushConstant         CP#25
  StoreFieldTOS        CP#26
  Push                 r3
  PushConstant         CP#0
  StoreFieldTOS        CP#28
  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] = Type dynamic
  [11] = String 'fin'
  [12] = StaticICData target 'dart.core::print', arg-desc CP#4
  [13] = StaticICData target 'dart.core::print', arg-desc CP#4
  [14] = StaticICData target 'dart.core::print', arg-desc CP#4
  [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] = ICData target-name 'completeError', arg-desc CP#17
  [19] = EndClosureFunctionScope
  [20] = Class dart.core::_Closure
  [21] = InstanceField dart.core::_Closure::_instantiator_type_arguments
  [22] = Reserved
  [23] = InstanceField dart.core::_Closure::_function_type_arguments
  [24] = Reserved
  [25] = EmptyTypeArguments
  [26] = InstanceField dart.core::_Closure::_delayed_type_arguments
  [27] = Reserved
  [28] = InstanceField dart.core::_Closure::_function
  [29] = Reserved
  [30] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#4
  [31] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#4
  [32] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#4
  [33] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
  [34] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#15
  [35] = ICData get target-name 'future', arg-desc CP#4
  [36] = 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
  JumpIfNeStrict       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:
  Push                 r2
  JumpIfNull           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
  AddInt
  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#11
  PushConstant         CP#12
  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#11
  PushConstant         CP#13
  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#11
  PushConstant         CP#14
  IndirectStaticCall   1, CP#4
  Drop1
  Push                 r4
  LoadContextParent
  PopLocal             r4
L5:
  Push                 r4
  LoadContextVar       0
  Push                 r4
  LoadContextVar       1
  PushConstant         CP#16
  IndirectStaticCall   2, CP#15
  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#18
  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#20
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#21
  Push                 r3
  PushNull
  StoreFieldTOS        CP#23
  Push                 r3
  PushConstant         CP#25
  StoreFieldTOS        CP#26
  Push                 r3
  PushConstant         CP#6
  StoreFieldTOS        CP#28
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#1
  StoreContextVar      8
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#30
  IndirectStaticCall   1, CP#4
  PopLocal             r2
  Push                 r0
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#31
  IndirectStaticCall   1, CP#4
  StoreContextVar      2
  Push                 r0
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#32
  IndirectStaticCall   1, CP#4
  StoreContextVar      3
  PushConstant         CP#33
  Push                 r0
  LoadContextVar       8
  PushConstant         CP#34
  IndirectStaticCall   2, CP#15
  Drop1
  Push                 r0
  LoadContextVar       0
  InstanceCall         1, CP#35
  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
  JumpIfNeStrict       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:
  Push                 r2
  JumpIfNull           L3
  Push                 r2
  Push                 r3
  Throw                1
L3:
  JumpIfNoAsserts      L2
  Push                 r1
  PushInt              42
  InstanceCall         2, CP#10
  AssertBoolean        0
  JumpIfTrue           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 {}
