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

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


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

Bytecode {
  Entry                3
  CheckStack           0
Try #0 start:
  PushConstant         CP#0
  DirectCall           CP#1, 1
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             3
  MoveSpecial          exception, r0
  MoveSpecial          stackTrace, r1
  Push                 r0
  PopLocal             r2
  PushNull
  PushInt              2
  CreateArrayTOS
  Dup
  PushInt              0
  PushConstant         CP#4
  StoreIndexedTOS
  Dup
  PushInt              1
  Push                 r2
  StoreIndexedTOS
  DirectCall           CP#5, 1
  DirectCall           CP#1, 1
  Drop1
  Jump                 L1
L1:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 4, end 14, handler 14, types [CP#3]
}
ConstantPool {
  [0] = ObjectRef 'danger!'
  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [2] = Reserved
  [3] = Type dart:core::Object
  [4] = ObjectRef 'caught '
  [5] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
  [6] = Reserved
}


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

Bytecode {
  Entry                4
  CheckStack           0
Try #0 start:
  PushConstant         CP#0
  DirectCall           CP#1, 1
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             4
  MoveSpecial          exception, r0
  MoveSpecial          stackTrace, r1
  Push                 r0
  PushConstant         CP#3
  InterfaceCall        CP#4, 2
  JumpIfFalse          L2
  PushConstant         CP#6
  DirectCall           CP#1, 1
  Drop1
  Jump                 L1
L2:
  Push                 r0
  PushConstant         CP#7
  InterfaceCall        CP#4, 2
  JumpIfFalse          L3
  Push                 r0
  PopLocal             r2
  PushNull
  PushInt              2
  CreateArrayTOS
  Dup
  PushInt              0
  PushConstant         CP#8
  StoreIndexedTOS
  Dup
  PushInt              1
  Push                 r2
  StoreIndexedTOS
  DirectCall           CP#9, 1
  DirectCall           CP#1, 1
  Drop1
  Jump                 L1
L3:
  Push                 r0
  PushConstant         CP#11
  InterfaceCall        CP#4, 2
  JumpIfFalse          L4
  Push                 r0
  PopLocal             r2
  Push                 r1
  PopLocal             r3
  PushNull
  PushInt              4
  CreateArrayTOS
  Dup
  PushInt              0
  PushConstant         CP#12
  StoreIndexedTOS
  Dup
  PushInt              1
  Push                 r2
  StoreIndexedTOS
  Dup
  PushInt              2
  PushConstant         CP#13
  StoreIndexedTOS
  Dup
  PushInt              3
  Push                 r3
  StoreIndexedTOS
  DirectCall           CP#9, 1
  DirectCall           CP#1, 1
  Drop1
  Jump                 L1
L4:
  Push                 r0
  PopLocal             r2
  Push                 r1
  PopLocal             r3
  PushNull
  PushInt              4
  CreateArrayTOS
  Dup
  PushInt              0
  PushConstant         CP#15
  StoreIndexedTOS
  Dup
  PushInt              1
  Push                 r2
  StoreIndexedTOS
  Dup
  PushInt              2
  PushConstant         CP#13
  StoreIndexedTOS
  Dup
  PushInt              3
  Push                 r3
  StoreIndexedTOS
  DirectCall           CP#9, 1
  DirectCall           CP#1, 1
  Drop1
  Jump                 L1
L1:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 4, end 14, handler 14, needs-stack-trace, types [CP#3, CP#7, CP#11, CP#14]
}
ConstantPool {
  [0] = ObjectRef 'danger!'
  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [2] = Reserved
  [3] = Type dart:core::TypeError
  [4] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
  [5] = Reserved
  [6] = ObjectRef 'caught type error'
  [7] = Type dart:core::AssertionError
  [8] = ObjectRef 'caught assertion error '
  [9] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
  [10] = Reserved
  [11] = Type dart:core::Error
  [12] = ObjectRef 'caught error '
  [13] = ObjectRef ' '
  [14] = Type dart:core::Object
  [15] = ObjectRef 'caught something '
}


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

Bytecode {
  Entry                6
  CheckStack           0
  AllocateContext      0, 3
  PopLocal             r0
  Push                 r0
  PushInt              1
  StoreContextVar      0, 0
  Push                 r0
  PopLocal             r2
Try #0 start:
  Push                 r0
  PushInt              2
  StoreContextVar      0, 1
  AllocateClosure      CP#6
  Dup
  Push                 r0
  StoreClosureElement  0
  PopLocal             r4
  Push                 r4
  Push                 r4
  UncheckedClosureCall CP#8, 1
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  DirectCall           CP#2, 1
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             6
  Push                 r2
  PopLocal             r0
  MoveSpecial          exception, r2
  MoveSpecial          stackTrace, r3
  Push                 r2
  PopLocal             r4
  Push                 r0
  Push                 r3
  StoreContextVar      0, 2
  PushNull
  PushInt              4
  CreateArrayTOS
  Dup
  PushInt              0
  PushConstant         CP#9
  StoreIndexedTOS
  Dup
  PushInt              1
  Push                 r4
  StoreIndexedTOS
  Dup
  PushInt              2
  PushConstant         CP#10
  StoreIndexedTOS
  Dup
  PushInt              3
  Push                 r0
  LoadContextVar       0, 2
  StoreIndexedTOS
  DirectCall           CP#11, 1
  DirectCall           CP#2, 1
  Drop1
  AllocateClosure      CP#21
  Dup
  Push                 r0
  StoreClosureElement  0
  PopLocal             r5
  Push                 r5
  ReturnTOS
L1:
  Push                 r0
  LoadContextParent
  PopLocal             r0
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 20, end 57, handler 57, needs-stack-trace, types [CP#4]
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = ObjectRef 'danger foo'
  [2] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
  [4] = Type dart:core::Object
  [5] = EndClosureFunctionScope
  [6] = AllocateClosure 0, num-elements: 1, flags: 0
  [7] = Reserved
  [8] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [9] = ObjectRef 'caught '
  [10] = ObjectRef ' '
  [11] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
  [12] = Reserved
  [13] = ClosureFunction 1
  [14] = ObjectRef 'danger bar'
  [15] = Type dart:core::Error
  [16] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
  [17] = Reserved
  [18] = ObjectRef 'error '
  [19] = ObjectRef ', captured stack trace: '
  [20] = EndClosureFunctionScope
  [21] = AllocateClosure 1, num-elements: 1, flags: 0
  [22] = Reserved
}
Closure DART_SDK/pkg/dart2bytecode/testcases/try_blocks.dart::testTryCatch3::'foo' () -> void
ClosureCode {
  Entry                5
  Push                 FP[-5]
  LoadClosureElement   0
  PopLocal             r0
  CheckStack           0
  Push                 r0
  PopLocal             r2
Try #0 start:
  PushConstant         CP#1
  DirectCall           CP#2, 1
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             5
  Push                 r2
  PopLocal             r0
  MoveSpecial          exception, r2
  MoveSpecial          stackTrace, r3
  Push                 r2
  PopLocal             r4
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           CP#2, 1
  Drop1
  Push                 r0
  PushInt              3
  StoreContextVar      0, 1
  Jump                 L1
L1:
  PushNull
  ReturnTOS
}

Closure DART_SDK/pkg/dart2bytecode/testcases/try_blocks.dart::testTryCatch3::'bar' () -> void
ClosureCode {
  Entry                5
  Push                 FP[-5]
  LoadClosureElement   0
  PopLocal             r0
  CheckStack           0
  Push                 r0
  PopLocal             r2
Try #0 start:
  PushConstant         CP#14
  DirectCall           CP#2, 1
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             5
  Push                 r2
  PopLocal             r0
  MoveSpecial          exception, r2
  MoveSpecial          stackTrace, r3
  Push                 r2
  PushConstant         CP#15
  InterfaceCall        CP#16, 2
  JumpIfFalse          L2
  Push                 r2
  PopLocal             r4
  PushNull
  PushInt              4
  CreateArrayTOS
  Dup
  PushInt              0
  PushConstant         CP#18
  StoreIndexedTOS
  Dup
  PushInt              1
  Push                 r4
  StoreIndexedTOS
  Dup
  PushInt              2
  PushConstant         CP#19
  StoreIndexedTOS
  Dup
  PushInt              3
  Push                 r0
  LoadContextVar       0, 2
  StoreIndexedTOS
  DirectCall           CP#11, 1
  DirectCall           CP#2, 1
  Drop1
  Jump                 L1
L2:
  Push                 r2
  Push                 r3
  Throw                1
L1:
  PushNull
  ReturnTOS
}


Function 'testRethrow', static, reflectable, debuggable
    parameters [dart:core::bool 'cond'] (required: 1)
    return-type dynamic

Bytecode {
  Entry                8
  CheckStack           0
Try #0 start:
Try #1 start:
  PushConstant         CP#0
  DirectCall           CP#1, 1
  Drop1
  Jump                 L1
Try #1 end:
Try #1 handler:
  SetFrame             8
  MoveSpecial          exception, r2
  MoveSpecial          stackTrace, r3
  Push                 r2
  PopLocal             r4
Try #2 start:
  PushConstant         CP#4
  DirectCall           CP#1, 1
  Drop1
  Push                 FP[-5]
  JumpIfFalse          L2
  Push                 r2
  Push                 r3
  Throw                1
L2:
  Jump                 L3
Try #2 end:
Try #2 handler:
  SetFrame             8
  MoveSpecial          exception, r5
  MoveSpecial          stackTrace, r6
  Push                 r5
  PopLocal             r7
  PushConstant         CP#5
  DirectCall           CP#1, 1
  Drop1
  Jump                 L3
L3:
  Jump                 L1
L1:
  Jump                 L4
Try #0 end:
Try #0 handler:
  SetFrame             8
  MoveSpecial          exception, r0
  MoveSpecial          stackTrace, r1
  Push                 r0
  PopLocal             r2
  Push                 r1
  PopLocal             r3
  PushConstant         CP#6
  DirectCall           CP#1, 1
  Drop1
  Push                 r3
  DirectCall           CP#1, 1
  Drop1
  Jump                 L4
L4:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 4, end 78, handler 78, needs-stack-trace, types [CP#3]
  try-index 1, outer 0, start 4, end 14, handler 14, needs-stack-trace, types [CP#3]
  try-index 2, outer 0, start 26, end 48, handler 48, types [CP#3]
}
ConstantPool {
  [0] = ObjectRef 'try 1 > try 2'
  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [2] = Reserved
  [3] = Type dart:core::Object
  [4] = ObjectRef 'try 1 > catch 2 > try 3'
  [5] = ObjectRef 'try 1 > catch 2 > catch 3'
  [6] = ObjectRef 'catch 1'
}


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

Bytecode {
  Entry                3
  CheckStack           0
  PushInt              0
  PopLocal             r0
L5:
  CheckStack           1
  Push                 r0
  PushInt              10
  CompareIntLt
  JumpIfFalse          L1
Try #0 start:
  Push                 r0
  PushInt              5
  CompareIntGt
  JumpIfFalse          L2
  Jump                 L3
L2:
  Jump                 L4
Try #0 end:
Try #0 handler:
  SetFrame             3
  MoveSpecial          exception, r1
  MoveSpecial          stackTrace, r2
  Push                 r0
  DirectCall           CP#1, 1
  Drop1
  Push                 r1
  Push                 r2
  Throw                1
L3:
  Push                 r0
  DirectCall           CP#1, 1
  Drop1
  Jump                 L1
L4:
  Push                 r0
  DirectCall           CP#1, 1
  Drop1
  Push                 r0
  PushInt              1
  AddInt
  StoreLocal           r0
  Drop1
  Jump                 L5
L1:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 19, end 36, handler 36, needs-stack-trace, synthetic, types [CP#0]
}
ConstantPool {
  [0] = Type dynamic
  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [2] = Reserved
}


Function 'testTryFinally2', static, reflectable, debuggable
    parameters [dart:core::int 'x'] (required: 1)
    return-type dynamic

Bytecode {
  Entry                9
  CheckStack           0
  AllocateContext      0, 2
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 0
  Push                 r0
  LoadContextVar       0, 0
  PopLocal             r2
  PushInt              1
  Push                 r2
  InterfaceCall        CP#0, 2
  JumpIfTrue           L1
  PushInt              2
  Push                 r2
  InterfaceCall        CP#0, 2
  JumpIfTrue           L2
  Jump                 L3
L1:
  Push                 r0
  PopLocal             r3
Try #0 start:
  PushConstant         CP#2
  DirectCall           CP#3, 1
  Drop1
  Push                 r0
  PushInt              3
  StoreContextVar      0, 1
  Push                 r0
  PopLocal             r5
Try #1 start:
  PushConstant         CP#5
  DirectCall           CP#3, 1
  Drop1
  AllocateClosure      CP#8
  Dup
  Push                 r0
  StoreClosureElement  0
  PopLocal             r7
  Push                 r7
  Push                 r7
  UncheckedClosureCall CP#10, 1
  Drop1
  Jump                 L4
Try #1 end:
Try #1 handler:
  SetFrame             9
  Push                 r5
  PopLocal             r0
  MoveSpecial          exception, r5
  MoveSpecial          stackTrace, r6
  PushConstant         CP#12
  DirectCall           CP#3, 1
  Drop1
  Push                 r5
  Push                 r6
  Throw                1
L4:
  Push                 r5
  PopLocal             r0
  PushConstant         CP#12
  DirectCall           CP#3, 1
  Drop1
  Jump                 L5
Try #0 end:
Try #0 handler:
  SetFrame             9
  Push                 r3
  PopLocal             r0
  MoveSpecial          exception, r3
  MoveSpecial          stackTrace, r4
  PushConstant         CP#14
  DirectCall           CP#3, 1
  Drop1
  Push                 r3
  Push                 r4
  Throw                1
L5:
  Push                 r3
  PopLocal             r0
  PushConstant         CP#14
  DirectCall           CP#3, 1
  Drop1
  Jump                 L2
L2:
  PushConstant         CP#15
  DirectCall           CP#3, 1
  Drop1
  Jump                 L3
L3:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 53, end 135, handler 135, needs-stack-trace, synthetic, types [CP#11]
  try-index 1, outer 0, start 70, end 97, handler 97, needs-stack-trace, synthetic, types [CP#11]
}
ConstantPool {
  [0] = InterfaceCall 'dart:core::Object::==', ArgDesc num-args 2, num-type-args 0, names []
  [1] = Reserved
  [2] = ObjectRef 'before try 1'
  [3] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [4] = Reserved
  [5] = ObjectRef 'try'
  [6] = ClosureFunction 0
  [7] = EndClosureFunctionScope
  [8] = AllocateClosure 0, num-elements: 1, flags: 0
  [9] = Reserved
  [10] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [11] = Type dynamic
  [12] = ObjectRef 'finally 1'
  [13] = ObjectRef 'after try 1'
  [14] = ObjectRef 'finally 2'
  [15] = ObjectRef 'case 2'
}
Closure DART_SDK/pkg/dart2bytecode/testcases/try_blocks.dart::testTryFinally2::'foo' () -> void
ClosureCode {
  Entry                2
  Push                 FP[-5]
  LoadClosureElement   0
  PopLocal             r0
  CheckStack           0
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           CP#3, 1
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  DirectCall           CP#3, 1
  Drop1
  PushNull
  ReturnTOS
}


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

Bytecode {
  Entry                5
  CheckStack           0
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  PushInt              11
  StoreContextVar      0, 0
  PushNull
  PopLocal             r2
  Push                 r0
  PopLocal             r3
Try #0 start:
  AllocateClosure      CP#7
  Dup
  Push                 r0
  StoreClosureElement  0
  PopLocal             r2
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             5
  Push                 r3
  PopLocal             r0
  MoveSpecial          exception, r3
  MoveSpecial          stackTrace, r4
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           CP#1, 1
  Drop1
  Push                 r2
  DynamicCall          CP#9, 1
  Drop1
  Push                 r3
  Push                 r4
  Throw                1
L1:
  Push                 r3
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           CP#1, 1
  Drop1
  Push                 r2
  DynamicCall          CP#9, 1
  Drop1
  Push                 r0
  LoadContextParent
  PopLocal             r0
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 23, end 36, handler 36, needs-stack-trace, synthetic, types [CP#4]
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [2] = Reserved
  [3] = ObjectRef 'try 1'
  [4] = Type dynamic
  [5] = ObjectRef 'try 2'
  [6] = EndClosureFunctionScope
  [7] = AllocateClosure 0, num-elements: 1, flags: 0
  [8] = Reserved
  [9] = DynamicCall 'implicit:call', ArgDesc num-args 1, num-type-args 0, names []
  [10] = Reserved
}
Closure DART_SDK/pkg/dart2bytecode/testcases/try_blocks.dart::testTryFinally3::'<anonymous closure>' () -> dart:core::int
ClosureCode {
  Entry                6
  Push                 FP[-5]
  LoadClosureElement   0
  PopLocal             r0
  CheckStack           0
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           CP#1, 1
  Drop1
  Push                 r0
  PopLocal             r2
Try #0 start:
  PushConstant         CP#3
  DirectCall           CP#1, 1
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             6
  Push                 r2
  PopLocal             r0
  MoveSpecial          exception, r2
  MoveSpecial          stackTrace, r3
  Push                 r0
  PopLocal             r4
Try #1 start:
  PushConstant         CP#5
  DirectCall           CP#1, 1
  Drop1
  Jump                 L2
Try #1 end:
Try #1 handler:
  SetFrame             6
  Push                 r4
  PopLocal             r0
  MoveSpecial          exception, r4
  MoveSpecial          stackTrace, r5
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           CP#1, 1
  Drop1
  Push                 r4
  Push                 r5
  Throw                1
L2:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           CP#1, 1
  Drop1
  PushInt              43
  ReturnTOS
L1:
  Push                 r2
  PopLocal             r0
  Push                 r0
  PopLocal             r4
Try #2 start:
  PushConstant         CP#5
  DirectCall           CP#1, 1
  Drop1
  Jump                 L3
Try #2 end:
Try #2 handler:
  SetFrame             6
  Push                 r4
  PopLocal             r0
  MoveSpecial          exception, r4
  MoveSpecial          stackTrace, r5
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           CP#1, 1
  Drop1
  Push                 r4
  Push                 r5
  Throw                1
L3:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           CP#1, 1
  Drop1
  PushInt              43
  ReturnTOS
}


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

Bytecode {
  Entry                5
  CheckStack           0
Try #0 start:
Try #1 start:
  PushConstant         CP#0
  DirectCall           CP#1, 1
  Drop1
  Jump                 L1
Try #1 end:
Try #1 handler:
  SetFrame             5
  MoveSpecial          exception, r2
  MoveSpecial          stackTrace, r3
  Push                 r2
  PopLocal             r4
  PushConstant         CP#4
  DirectCall           CP#1, 1
  Drop1
  Jump                 L1
L1:
  Jump                 L2
Try #0 end:
Try #0 handler:
  SetFrame             5
  MoveSpecial          exception, r0
  MoveSpecial          stackTrace, r1
  PushConstant         CP#6
  DirectCall           CP#1, 1
  Drop1
  Push                 r0
  Push                 r1
  Throw                1
L2:
  PushConstant         CP#6
  DirectCall           CP#1, 1
  Drop1
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 4, end 40, handler 40, needs-stack-trace, synthetic, types [CP#5]
  try-index 1, outer 0, start 4, end 14, handler 14, types [CP#3]
}
ConstantPool {
  [0] = ObjectRef 'try'
  [1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [2] = Reserved
  [3] = Type dart:core::Object
  [4] = ObjectRef 'catch'
  [5] = Type dynamic
  [6] = ObjectRef 'finally'
}


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

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

