Bytecode
Dynamic Module Entry Point: DART_SDK/pkg/dart2bytecode/testcases/async.dart::main
Library 'DART_SDK/pkg/dart2bytecode/testcases/async.dart'
    name '#lib'
    script 'DART_SDK/pkg/dart2bytecode/testcases/async.dart'

Class '', script = 'DART_SDK/pkg/dart2bytecode/testcases/async.dart'

Field 'asyncInFieldInitializer', type = FunctionType (dart:async::Future < dart:core::int >) -> dart:async::Future < Null >, getter = 'get:asyncInFieldInitializer', reflectable, static, is-late, has-initializer
    initializer
Bytecode {
  Entry                2
  CheckStack           0
  AllocateClosure      CP#15
  Dup
  Push                 r0
  StoreClosureElement  0
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = Type dart:async::Future < dart:core::int >
  [2] = ObjectRef 'x'
  [3] = SubtypeTestCache
  [4] = ObjectRef < Null >
  [5] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
  [6] = Reserved
  [7] = Type dynamic
  [8] = DirectCall 'dart:async::_SuspendState::_await', ArgDesc num-args 2, num-type-args 0, names []
  [9] = Reserved
  [10] = DirectCall 'dart:async::_SuspendState::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
  [11] = Reserved
  [12] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
  [13] = Reserved
  [14] = EndClosureFunctionScope
  [15] = AllocateClosure 0, num-elements: 1, flags: 0
  [16] = Reserved
}
Closure DART_SDK/pkg/dart2bytecode/testcases/async.dart::asyncInFieldInitializer (field)::'<anonymous closure>' async (dart:async::Future < dart:core::int > x) -> dart:async::Future < Null >
ClosureCode {
  EntrySuspendable     2, 0, 0
  Frame                5
  Push                 r1
  LoadClosureElement   0
  PopLocal             r3
  CheckStack           0
  JumpIfUnchecked      L1
  Push                 r2
  PushConstant         CP#1
  PushNull
  PushNull
  PushConstant         CP#2
  AssertAssignable     0, CP#3
  Drop1
L1:
  PushConstant         CP#4
  DirectCall           CP#5, 1
  PopLocal             r0
Try #0 start:
  Push                 r2
  PopLocal             r6
  Suspend              L2
  Push                 r0
  Push                 r6
  DirectCall           CP#8, 2
  ReturnTOS
L2:
  Drop1
  PushNull
  PopLocal             r5
  Push                 r0
  Push                 r5
  PushNull
  PopLocal             r0
  DirectCall           CP#10, 2
  ReturnTOS
Try #0 end:
Try #0 handler:
  SetFrame             7
  Push                 r0
  JumpIfNull           L3
  Push                 r0
  MoveSpecial          exception, r0
  Push                 r0
  MoveSpecial          stackTrace, r0
  Push                 r0
  DirectCall           CP#12, 3
  ReturnTOS
L3:
  MoveSpecial          exception, r0
  Push                 r0
  MoveSpecial          stackTrace, r0
  Push                 r0
  Throw                1
}


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

Bytecode {
  EntrySuspendable     0, 0, 0
  Frame                2
  CheckStack           0
  PushConstant         CP#0
  DirectCall           CP#1, 1
  PopLocal             r0
Try #0 start:
  PushInt              42
  PopLocal             r1
  Push                 r0
  Push                 r1
  PushNull
  PopLocal             r0
  DirectCall           CP#4, 2
  ReturnTOS
Try #0 end:
Try #0 handler:
  SetFrame             2
  Push                 r0
  JumpIfNull           L1
  Push                 r0
  MoveSpecial          exception, r0
  Push                 r0
  MoveSpecial          stackTrace, r0
  Push                 r0
  DirectCall           CP#6, 3
  ReturnTOS
L1:
  MoveSpecial          exception, r0
  Push                 r0
  MoveSpecial          stackTrace, r0
  Push                 r0
  Throw                1
}
ExceptionsTable {
  try-index 0, outer -1, start 15, end 30, handler 30, needs-stack-trace, synthetic, types [CP#3]
}
ConstantPool {
  [0] = ObjectRef < dart:core::int >
  [1] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
  [2] = Reserved
  [3] = Type dynamic
  [4] = DirectCall 'dart:async::_SuspendState::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
  [5] = Reserved
  [6] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
  [7] = Reserved
}


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

Bytecode {
  EntrySuspendable     2, 0, 0
  Frame                3
  CheckStack           0
  PushConstant         CP#0
  DirectCall           CP#1, 1
  PopLocal             r0
Try #0 start:
  Push                 r1
  PopLocal             r4
  Suspend              L1
  Push                 r0
  Push                 r4
  DirectCall           CP#4, 2
  ReturnTOS
L1:
  Push                 r2
  PopLocal             r4
  Suspend              L2
  Push                 r0
  Push                 r4
  DirectCall           CP#4, 2
  ReturnTOS
L2:
  AddInt
  PopLocal             r3
  Push                 r0
  Push                 r3
  PushNull
  PopLocal             r0
  DirectCall           CP#6, 2
  ReturnTOS
Try #0 end:
Try #0 handler:
  SetFrame             5
  Push                 r0
  JumpIfNull           L3
  Push                 r0
  MoveSpecial          exception, r0
  Push                 r0
  MoveSpecial          stackTrace, r0
  Push                 r0
  DirectCall           CP#8, 3
  ReturnTOS
L3:
  MoveSpecial          exception, r0
  Push                 r0
  MoveSpecial          stackTrace, r0
  Push                 r0
  Throw                1
}
ExceptionsTable {
  try-index 0, outer -1, start 15, end 61, handler 61, needs-stack-trace, synthetic, types [CP#3]
}
ConstantPool {
  [0] = ObjectRef < dart:core::int >
  [1] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
  [2] = Reserved
  [3] = Type dynamic
  [4] = DirectCall 'dart:async::_SuspendState::_await', ArgDesc num-args 2, num-type-args 0, names []
  [5] = Reserved
  [6] = DirectCall 'dart:async::_SuspendState::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
  [7] = Reserved
  [8] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
  [9] = Reserved
}


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

Bytecode {
  EntrySuspendable     1, 0, 0
  Frame                7
  CheckStack           0
  PushConstant         CP#0
  DirectCall           CP#1, 1
  PopLocal             r0
Try #0 start:
  PushInt              0
  PopLocal             r3
  PushInt              0
  PopLocal             r4
L5:
  CheckStack           1
  Push                 r4
  PushInt              10
  CompareIntLt
  JumpIfFalse          L1
  Push                 r1
  InterfaceCall        CP#4, 1
  PopLocal             r5
L4:
  CheckStack           2
  Push                 r5
  InterfaceCall        CP#6, 1
  JumpIfFalse          L2
  Push                 r5
  InterfaceCall        CP#8, 1
  PopLocal             r6
  Push                 r3
  Push                 r4
  Push                 r6
  AddInt
  DirectCall           CP#10, 0
  PopLocal             r7
  Suspend              L3
  Push                 r0
  Push                 r7
  DirectCall           CP#12, 2
  ReturnTOS
L3:
  AddInt
  AddInt
  PopLocal             r3
  Jump                 L4
L2:
  Push                 r4
  PushInt              1
  AddInt
  StoreLocal           r4
  Drop1
  Jump                 L5
L1:
  PushInt              0
  PopLocal             r4
L7:
  CheckStack           1
  Push                 r4
  PushInt              10
  CompareIntLt
  JumpIfFalse          L6
  Push                 r3
  Push                 r4
  AddInt
  PopLocal             r3
  Push                 r4
  PushInt              1
  AddInt
  StoreLocal           r4
  Drop1
  Jump                 L7
L6:
  Push                 r3
  PopLocal             r2
  Push                 r0
  Push                 r2
  PushNull
  PopLocal             r0
  DirectCall           CP#14, 2
  ReturnTOS
Try #0 end:
Try #0 handler:
  SetFrame             8
  Push                 r0
  JumpIfNull           L8
  Push                 r0
  MoveSpecial          exception, r0
  Push                 r0
  MoveSpecial          stackTrace, r0
  Push                 r0
  DirectCall           CP#16, 3
  ReturnTOS
L8:
  MoveSpecial          exception, r0
  Push                 r0
  MoveSpecial          stackTrace, r0
  Push                 r0
  Throw                1
}
ExceptionsTable {
  try-index 0, outer -1, start 15, end 146, handler 146, needs-stack-trace, synthetic, types [CP#3]
}
ConstantPool {
  [0] = ObjectRef < dart:core::int >
  [1] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
  [2] = Reserved
  [3] = Type dynamic
  [4] = InterfaceCall 'dart:core::Iterable::get:iterator', ArgDesc num-args 1, num-type-args 0, names []
  [5] = Reserved
  [6] = InterfaceCall 'dart:core::Iterator::moveNext', ArgDesc num-args 1, num-type-args 0, names []
  [7] = Reserved
  [8] = InterfaceCall 'dart:core::Iterator::get:current', ArgDesc num-args 1, num-type-args 0, names []
  [9] = Reserved
  [10] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/async.dart::foo', ArgDesc num-args 0, num-type-args 0, names []
  [11] = Reserved
  [12] = DirectCall 'dart:async::_SuspendState::_await', ArgDesc num-args 2, num-type-args 0, names []
  [13] = Reserved
  [14] = DirectCall 'dart:async::_SuspendState::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
  [15] = Reserved
  [16] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
  [17] = Reserved
}


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

Bytecode {
  EntrySuspendable     3, 0, 0
  Frame                9
  CheckStack           0
  PushConstant         CP#0
  DirectCall           CP#1, 1
  PopLocal             r0
Try #0 start:
  PushInt              1
  PopLocal             r5
Try #1 start:
Try #2 start:
  Push                 r5
  Push                 r1
  PopLocal             r10
  Suspend              L1
  Push                 r0
  Push                 r10
  DirectCall           CP#4, 2
  ReturnTOS
L1:
  AddInt
  PopLocal             r5
  Jump                 L2
Try #2 end:
Try #2 handler:
  SetFrame             12
  MoveSpecial          exception, r8
  MoveSpecial          stackTrace, r9
  Push                 r8
  PopLocal             r10
  Push                 r10
  PushConstant         CP#7
  InterfaceCall        CP#8, 2
  JumpIfFalse          L3
  Jump                 L4
L3:
  Push                 r5
  Push                 r2
  PopLocal             r11
  Suspend              L5
  Push                 r0
  Push                 r11
  DirectCall           CP#4, 2
  ReturnTOS
L5:
  AddInt
  PopLocal             r5
  Push                 r8
  Push                 r9
  Throw                1
L2:
  Jump                 L6
Try #1 end:
Try #1 handler:
  SetFrame             12
  MoveSpecial          exception, r6
  MoveSpecial          stackTrace, r7
  PushConstant         CP#10
  DirectCall           CP#11, 1
  Drop1
  Push                 r5
  Push                 r3
  PopLocal             r8
  Suspend              L7
  Push                 r0
  Push                 r8
  DirectCall           CP#4, 2
  ReturnTOS
L7:
  AddInt
  PopLocal             r5
  Push                 r5
  PopLocal             r4
  Push                 r0
  Push                 r4
  PushNull
  PopLocal             r0
  DirectCall           CP#13, 2
  ReturnTOS
L4:
  PushConstant         CP#10
  DirectCall           CP#11, 1
  Drop1
  Push                 r5
  Push                 r3
  PopLocal             r8
  Suspend              L8
  Push                 r0
  Push                 r8
  DirectCall           CP#4, 2
  ReturnTOS
L8:
  AddInt
  PopLocal             r5
  Push                 r5
  PopLocal             r4
  Push                 r0
  Push                 r4
  PushNull
  PopLocal             r0
  DirectCall           CP#13, 2
  ReturnTOS
L6:
  PushConstant         CP#10
  DirectCall           CP#11, 1
  Drop1
  Push                 r5
  Push                 r3
  PopLocal             r8
  Suspend              L9
  Push                 r0
  Push                 r8
  DirectCall           CP#4, 2
  ReturnTOS
L9:
  AddInt
  PopLocal             r5
  Push                 r5
  PopLocal             r4
  Push                 r0
  Push                 r4
  PushNull
  PopLocal             r0
  DirectCall           CP#13, 2
  ReturnTOS
Try #0 end:
Try #0 handler:
  SetFrame             12
  Push                 r0
  JumpIfNull           L10
  Push                 r0
  MoveSpecial          exception, r0
  Push                 r0
  MoveSpecial          stackTrace, r0
  Push                 r0
  DirectCall           CP#15, 3
  ReturnTOS
L10:
  MoveSpecial          exception, r0
  Push                 r0
  MoveSpecial          stackTrace, r0
  Push                 r0
  Throw                1
}
ExceptionsTable {
  try-index 0, outer -1, start 15, end 236, handler 236, needs-stack-trace, synthetic, types [CP#3]
  try-index 1, outer 0, start 19, end 102, handler 102, needs-stack-trace, synthetic, types [CP#3]
  try-index 2, outer 1, start 19, end 44, handler 44, needs-stack-trace, types [CP#6]
}
ConstantPool {
  [0] = ObjectRef < dart:core::int >
  [1] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
  [2] = Reserved
  [3] = Type dynamic
  [4] = DirectCall 'dart:async::_SuspendState::_await', ArgDesc num-args 2, num-type-args 0, names []
  [5] = Reserved
  [6] = Type dart:core::Object
  [7] = Type dart:core::Error
  [8] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
  [9] = Reserved
  [10] = ObjectRef 'fin'
  [11] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [12] = Reserved
  [13] = DirectCall 'dart:async::_SuspendState::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
  [14] = Reserved
  [15] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
  [16] = Reserved
}


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

Bytecode {
  Entry                3
  CheckStack           0
  AllocateContext      0, 2
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 0
  Push                 r0
  PushInt              3
  StoreContextVar      0, 1
  AllocateClosure      CP#15
  Dup
  Push                 r0
  StoreClosureElement  0
  PopLocal             r2
  Push                 r2
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = ObjectRef < dart:core::int >
  [2] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
  [3] = Reserved
  [4] = Type dynamic
  [5] = DirectCall 'dart:async::_SuspendState::_await', ArgDesc num-args 2, num-type-args 0, names []
  [6] = Reserved
  [7] = ObjectRef 'fin'
  [8] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [9] = Reserved
  [10] = DirectCall 'dart:async::_SuspendState::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
  [11] = Reserved
  [12] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
  [13] = Reserved
  [14] = EndClosureFunctionScope
  [15] = AllocateClosure 0, num-elements: 1, flags: 0
  [16] = Reserved
}
Closure DART_SDK/pkg/dart2bytecode/testcases/async.dart::closure::'nested' async () -> dart:async::Future < dart:core::int >
ClosureCode {
  EntrySuspendable     1, 0, 0
  Frame                8
  Push                 r1
  LoadClosureElement   0
  PopLocal             r2
  CheckStack           0
  PushConstant         CP#1
  DirectCall           CP#2, 1
  PopLocal             r0
Try #0 start:
  PushInt              4
  PopLocal             r5
  Push                 r2
  PopLocal             r6
Try #1 start:
  Push                 r2
  PushInt              5
  StoreContextVar      0, 1
  Push                 r2
  LoadContextVar       0, 0
  PopLocal             r8
  Suspend              L1
  Push                 r0
  Push                 r8
  DirectCall           CP#5, 2
  ReturnTOS
L1:
  PopLocal             r5
  Push                 r2
  LoadContextVar       0, 1
  Push                 r5
  AddInt
  PopLocal             r4
  Jump                 L2
Try #1 end:
Try #1 handler:
  SetFrame             9
  Push                 r6
  PopLocal             r2
  MoveSpecial          exception, r6
  MoveSpecial          stackTrace, r7
  PushConstant         CP#7
  DirectCall           CP#8, 1
  Drop1
  Push                 r6
  Push                 r7
  Throw                1
L2:
  Push                 r6
  PopLocal             r2
  PushConstant         CP#7
  DirectCall           CP#8, 1
  Drop1
  Push                 r4
  PopLocal             r4
  Push                 r0
  Push                 r4
  PushNull
  PopLocal             r0
  DirectCall           CP#10, 2
  ReturnTOS
Try #0 end:
Try #0 handler:
  SetFrame             9
  Push                 r0
  JumpIfNull           L3
  Push                 r0
  MoveSpecial          exception, r0
  Push                 r0
  MoveSpecial          stackTrace, r0
  Push                 r0
  DirectCall           CP#12, 3
  ReturnTOS
L3:
  MoveSpecial          exception, r0
  Push                 r0
  MoveSpecial          stackTrace, r0
  Push                 r0
  Throw                1
}


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

Bytecode {
  EntrySuspendable     1, 0, 0
  Frame                2
  CheckStack           0
  PushConstant         CP#0
  DirectCall           CP#1, 1
  PopLocal             r0
Try #0 start:
  PushInt              7
  PopLocal             r2
  Push                 r0
  Push                 r2
  PushNull
  PopLocal             r0
  DirectCall           CP#4, 2
  ReturnTOS
Try #0 end:
Try #0 handler:
  SetFrame             3
  Push                 r0
  JumpIfNull           L1
  Push                 r0
  MoveSpecial          exception, r0
  Push                 r0
  MoveSpecial          stackTrace, r0
  Push                 r0
  DirectCall           CP#6, 3
  ReturnTOS
L1:
  MoveSpecial          exception, r0
  Push                 r0
  MoveSpecial          stackTrace, r0
  Push                 r0
  Throw                1
}
ExceptionsTable {
  try-index 0, outer -1, start 15, end 30, handler 30, needs-stack-trace, synthetic, types [CP#3]
}
ConstantPool {
  [0] = ObjectRef < dart:core::int >
  [1] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
  [2] = Reserved
  [3] = Type dynamic
  [4] = DirectCall 'dart:async::_SuspendState::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
  [5] = Reserved
  [6] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
  [7] = Reserved
}


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

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

