main = #lib::main;
 [@vm.bytecode=
ComponentBytecodeMetadata {

Bytecode (version: stable)
Main library: #lib

}
] [@vm.bytecode=
MembersBytecodeMetadata {

Members {

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


Bytecode {
  Entry                4
  CheckStack           0
Try #0 start:
  PushConstant         CP#0
  DirectCall           1, CP#1
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             4
  MoveSpecial          exception, r0
  MoveSpecial          stackTrace, r1
  Push                 r0
  PopLocal             r2
  PushNull
  PushInt              2
  CreateArrayTOS
  StoreLocal           r3
  Push                 r3
  PushInt              0
  PushConstant         CP#4
  StoreIndexedTOS
  Push                 r3
  PushInt              1
  Push                 r2
  StoreIndexedTOS
  DirectCall           1, CP#5
  DirectCall           1, CP#1
  Drop1
  Jump                 L1
L1:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 2, end 6, handler 6, 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 dynamic
  [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                5
  CheckStack           0
Try #0 start:
  PushConstant         CP#0
  DirectCall           1, CP#1
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             5
  MoveSpecial          exception, r0
  MoveSpecial          stackTrace, r1
  Push                 r0
  PushConstant         CP#3
  InterfaceCall        2, CP#4
  JumpIfFalse          L2
  PushConstant         CP#6
  DirectCall           1, CP#1
  Drop1
  Jump                 L1
L2:
  Push                 r0
  PushConstant         CP#7
  InterfaceCall        2, CP#4
  JumpIfFalse          L3
  Push                 r0
  PopLocal             r2
  PushNull
  PushInt              2
  CreateArrayTOS
  StoreLocal           r3
  Push                 r3
  PushInt              0
  PushConstant         CP#8
  StoreIndexedTOS
  Push                 r3
  PushInt              1
  Push                 r2
  StoreIndexedTOS
  DirectCall           1, CP#9
  DirectCall           1, CP#1
  Drop1
  Jump                 L1
L3:
  Push                 r0
  PushConstant         CP#11
  InterfaceCall        2, CP#4
  JumpIfFalse          L4
  Push                 r0
  PopLocal             r2
  Push                 r1
  PopLocal             r3
  PushNull
  PushInt              4
  CreateArrayTOS
  StoreLocal           r4
  Push                 r4
  PushInt              0
  PushConstant         CP#12
  StoreIndexedTOS
  Push                 r4
  PushInt              1
  Push                 r2
  StoreIndexedTOS
  Push                 r4
  PushInt              2
  PushConstant         CP#13
  StoreIndexedTOS
  Push                 r4
  PushInt              3
  Push                 r3
  StoreIndexedTOS
  DirectCall           1, CP#9
  DirectCall           1, CP#1
  Drop1
  Jump                 L1
L4:
  Push                 r0
  PopLocal             r2
  Push                 r1
  PopLocal             r3
  PushNull
  PushInt              4
  CreateArrayTOS
  StoreLocal           r4
  Push                 r4
  PushInt              0
  PushConstant         CP#15
  StoreIndexedTOS
  Push                 r4
  PushInt              1
  Push                 r2
  StoreIndexedTOS
  Push                 r4
  PushInt              2
  PushConstant         CP#13
  StoreIndexedTOS
  Push                 r4
  PushInt              3
  Push                 r3
  StoreIndexedTOS
  DirectCall           1, CP#9
  DirectCall           1, CP#1
  Drop1
  Jump                 L1
L1:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 2, end 6, handler 6, 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 dynamic
  [15] = ObjectRef 'caught something '
}


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


Bytecode {
  Entry                7
  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#0
  StoreLocal           r5
  Push                 r5
  PushNull
  StoreFieldTOS        CP#8
  Push                 r5
  PushNull
  StoreFieldTOS        CP#10
  Push                 r5
  PushConstant         CP#12
  StoreFieldTOS        CP#13
  Push                 r5
  PushConstant         CP#0
  StoreFieldTOS        CP#15
  Push                 r5
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r4
  Push                 r4
  DynamicCall          1, CP#18
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  DirectCall           1, CP#4
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             7
  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
  StoreLocal           r5
  Push                 r5
  PushInt              0
  PushConstant         CP#19
  StoreIndexedTOS
  Push                 r5
  PushInt              1
  Push                 r4
  StoreIndexedTOS
  Push                 r5
  PushInt              2
  PushConstant         CP#20
  StoreIndexedTOS
  Push                 r5
  PushInt              3
  Push                 r0
  LoadContextVar       0, 2
  StoreIndexedTOS
  DirectCall           1, CP#21
  DirectCall           1, CP#4
  Drop1
  AllocateClosure      CP#23
  StoreLocal           r5
  Push                 r5
  PushNull
  StoreFieldTOS        CP#8
  Push                 r5
  PushNull
  StoreFieldTOS        CP#10
  Push                 r5
  PushConstant         CP#12
  StoreFieldTOS        CP#13
  Push                 r5
  PushConstant         CP#23
  StoreFieldTOS        CP#15
  Push                 r5
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r6
  Push                 r6
  ReturnTOS
L1:
  Push                 r0
  LoadContextParent
  PopLocal             r0
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 9, end 38, handler 38, needs-stack-trace, types [CP#6]
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = ObjectRef 'danger foo'
  [4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [5] = Reserved
  [6] = Type dynamic
  [7] = EndClosureFunctionScope
  [8] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [9] = Reserved
  [10] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [11] = Reserved
  [12] = EmptyTypeArguments
  [13] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [14] = Reserved
  [15] = InstanceField dart:core::_Closure::_function (field)
  [16] = Reserved
  [17] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [18] = ICData dynamic target-name 'call', arg-desc CP#17
  [19] = ObjectRef 'caught '
  [20] = ObjectRef ' '
  [21] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
  [22] = Reserved
  [23] = ClosureFunction 1
  [24] = ObjectRef 'danger bar'
  [25] = Type dart:core::Error
  [26] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
  [27] = Reserved
  [28] = ObjectRef 'error '
  [29] = ObjectRef ', captured stack trace: '
  [30] = EndClosureFunctionScope
}
Closure #lib::testTryCatch3::'foo' () -> void
ClosureCode {
  EntryFixed           1, 6
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  Push                 r0
  PopLocal             r2
Try #0 start:
  PushConstant         CP#3
  DirectCall           1, CP#4
  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
  LoadContextVar       0, 0
  DirectCall           1, CP#4
  Drop1
  Push                 r0
  PushInt              3
  StoreContextVar      0, 1
  Jump                 L1
L1:
  PushNull
  ReturnTOS

}

Closure #lib::testTryCatch3::'bar' () -> void
ClosureCode {
  EntryFixed           1, 6
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  Push                 r0
  PopLocal             r2
Try #0 start:
  PushConstant         CP#24
  DirectCall           1, CP#4
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             6
  Push                 r2
  PopLocal             r0
  MoveSpecial          exception, r2
  MoveSpecial          stackTrace, r3
  Push                 r2
  PushConstant         CP#25
  InterfaceCall        2, CP#26
  JumpIfFalse          L2
  Push                 r2
  PopLocal             r4
  PushNull
  PushInt              4
  CreateArrayTOS
  StoreLocal           r5
  Push                 r5
  PushInt              0
  PushConstant         CP#28
  StoreIndexedTOS
  Push                 r5
  PushInt              1
  Push                 r4
  StoreIndexedTOS
  Push                 r5
  PushInt              2
  PushConstant         CP#29
  StoreIndexedTOS
  Push                 r5
  PushInt              3
  Push                 r0
  LoadContextVar       0, 2
  StoreIndexedTOS
  DirectCall           1, CP#21
  DirectCall           1, CP#4
  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           1, CP#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           1, CP#1
  Drop1
  Push                 FP[-5]
  AssertBoolean        0
  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           1, CP#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           1, CP#1
  Drop1
  Push                 r3
  DirectCall           1, CP#1
  Drop1
  Jump                 L4
L4:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 2, end 32, handler 32, needs-stack-trace, types [CP#3]
  try-index 1, outer 0, start 2, end 6, handler 6, needs-stack-trace, types [CP#3]
  try-index 2, outer 0, start 11, end 21, handler 21, 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 dynamic
  [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           1, CP#1
  Drop1
  Push                 r1
  Push                 r2
  Throw                1
L3:
  Push                 r0
  DirectCall           1, CP#1
  Drop1
  Jump                 L1
L4:
  Push                 r0
  DirectCall           1, CP#1
  Drop1
  Push                 r0
  PushInt              1
  AddInt
  StoreLocal           r0
  Drop1
  Jump                 L5
L1:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 9, end 15, handler 15, needs-stack-trace, 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
  Push                 r2
  PushInt              1
  InterfaceCall        2, CP#0
  JumpIfTrue           L1
  Push                 r2
  PushInt              2
  InterfaceCall        2, CP#0
  JumpIfTrue           L2
  Jump                 L3
L1:
  Push                 r0
  PopLocal             r3
Try #0 start:
  PushConstant         CP#2
  DirectCall           1, CP#3
  Drop1
  Push                 r0
  PushInt              3
  StoreContextVar      0, 1
  Push                 r0
  PopLocal             r5
Try #1 start:
  PushConstant         CP#5
  DirectCall           1, CP#3
  Drop1
  AllocateClosure      CP#6
  StoreLocal           r8
  Push                 r8
  PushNull
  StoreFieldTOS        CP#10
  Push                 r8
  PushNull
  StoreFieldTOS        CP#12
  Push                 r8
  PushConstant         CP#14
  StoreFieldTOS        CP#15
  Push                 r8
  PushConstant         CP#6
  StoreFieldTOS        CP#17
  Push                 r8
  Push                 r0
  StoreFieldTOS        CP#7
  PopLocal             r7
  Push                 r7
  DynamicCall          1, CP#20
  Drop1
  Jump                 L4
Try #1 end:
Try #1 handler:
  SetFrame             9
  Push                 r5
  PopLocal             r0
  MoveSpecial          exception, r5
  MoveSpecial          stackTrace, r6
  PushConstant         CP#22
  DirectCall           1, CP#3
  Drop1
  Push                 r5
  Push                 r6
  Throw                1
L4:
  Push                 r5
  PopLocal             r0
  PushConstant         CP#22
  DirectCall           1, CP#3
  Drop1
  Jump                 L5
Try #0 end:
Try #0 handler:
  SetFrame             9
  Push                 r3
  PopLocal             r0
  MoveSpecial          exception, r3
  MoveSpecial          stackTrace, r4
  PushConstant         CP#24
  DirectCall           1, CP#3
  Drop1
  Push                 r3
  Push                 r4
  Throw                1
L5:
  Push                 r3
  PopLocal             r0
  PushConstant         CP#24
  DirectCall           1, CP#3
  Drop1
  Jump                 L2
L2:
  PushConstant         CP#25
  DirectCall           1, CP#3
  Drop1
  Jump                 L3
L3:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 21, end 71, handler 71, needs-stack-trace, types [CP#21]
  try-index 1, outer 0, start 29, end 54, handler 54, needs-stack-trace, types [CP#21]
}
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] = InstanceField dart:core::_Closure::_context (field)
  [8] = Reserved
  [9] = EndClosureFunctionScope
  [10] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [11] = Reserved
  [12] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [13] = Reserved
  [14] = EmptyTypeArguments
  [15] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [16] = Reserved
  [17] = InstanceField dart:core::_Closure::_function (field)
  [18] = Reserved
  [19] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [20] = ICData dynamic target-name 'call', arg-desc CP#19
  [21] = Type dynamic
  [22] = ObjectRef 'finally 1'
  [23] = ObjectRef 'after try 1'
  [24] = ObjectRef 'finally 2'
  [25] = ObjectRef 'case 2'
}
Closure #lib::testTryFinally2::'foo' () -> void
ClosureCode {
  EntryFixed           1, 2
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#7
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           1, CP#3
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  DirectCall           1, CP#3
  Drop1
  PushNull
  ReturnTOS

}


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


Bytecode {
  Entry                6
  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#0
  StoreLocal           r5
  Push                 r5
  PushNull
  StoreFieldTOS        CP#9
  Push                 r5
  PushNull
  StoreFieldTOS        CP#11
  Push                 r5
  PushConstant         CP#13
  StoreFieldTOS        CP#14
  Push                 r5
  PushConstant         CP#0
  StoreFieldTOS        CP#16
  Push                 r5
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r2
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             6
  Push                 r3
  PopLocal             r0
  MoveSpecial          exception, r3
  MoveSpecial          stackTrace, r4
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           1, CP#3
  Drop1
  Push                 r2
  DynamicCall          1, CP#19
  Drop1
  Push                 r3
  Push                 r4
  Throw                1
L1:
  Push                 r3
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           1, CP#3
  Drop1
  Push                 r2
  DynamicCall          1, CP#20
  Drop1
  Push                 r0
  LoadContextParent
  PopLocal             r0
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 11, end 30, handler 30, needs-stack-trace, types [CP#6]
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [4] = Reserved
  [5] = ObjectRef 'try 1'
  [6] = Type dynamic
  [7] = ObjectRef 'try 2'
  [8] = EndClosureFunctionScope
  [9] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [10] = Reserved
  [11] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [12] = Reserved
  [13] = EmptyTypeArguments
  [14] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [15] = Reserved
  [16] = InstanceField dart:core::_Closure::_function (field)
  [17] = Reserved
  [18] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [19] = ICData dynamic target-name 'call', arg-desc CP#18
  [20] = ICData dynamic target-name 'call', arg-desc CP#18
}
Closure #lib::testTryFinally3::'<anonymous closure>' () -> dart:core::int
ClosureCode {
  EntryFixed           1, 6
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           1, CP#3
  Drop1
  Push                 r0
  PopLocal             r2
Try #0 start:
  PushConstant         CP#5
  DirectCall           1, CP#3
  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#7
  DirectCall           1, CP#3
  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           1, CP#3
  Drop1
  Push                 r4
  Push                 r5
  Throw                1
L2:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           1, CP#3
  Drop1
  PushInt              43
  ReturnTOS
L1:
  Push                 r2
  PopLocal             r0
  Push                 r0
  PopLocal             r4
Try #2 start:
  PushConstant         CP#7
  DirectCall           1, CP#3
  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           1, CP#3
  Drop1
  Push                 r4
  Push                 r5
  Throw                1
L3:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           1, CP#3
  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           1, CP#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           1, CP#1
  Drop1
  Jump                 L1
L1:
  Jump                 L2
Try #0 end:
Try #0 handler:
  SetFrame             5
  MoveSpecial          exception, r0
  MoveSpecial          stackTrace, r1
  PushConstant         CP#5
  DirectCall           1, CP#1
  Drop1
  Push                 r0
  Push                 r1
  Throw                1
L2:
  PushConstant         CP#5
  DirectCall           1, CP#1
  Drop1
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 2, end 16, handler 16, needs-stack-trace, types [CP#3]
  try-index 1, outer 0, start 2, end 6, handler 6, 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 dynamic
  [4] = ObjectRef 'catch'
  [5] = ObjectRef 'finally'
}


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


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

}

}
]library #lib from "#lib" as #lib {

  static method testTryCatch1() → dynamic {
    try {
      dart.core::print("danger!");
    }
    on dynamic catch(final dynamic e) {
      dart.core::print("caught ${e}");
    }
  }
  static method testTryCatch2() → dynamic {
    try {
      dart.core::print("danger!");
    }
    on dart.core::TypeError catch(no-exception-var) {
      dart.core::print("caught type error");
    }
    on dart.core::AssertionError catch(final dart.core::AssertionError e) {
      dart.core::print("caught assertion error ${e}");
    }
    on dart.core::Error catch(final dart.core::Error e, final dart.core::StackTrace st) {
      dart.core::print("caught error ${e} ${st}");
    }
    on dynamic catch(final dynamic e, final dart.core::StackTrace st) {
      dart.core::print("caught something ${e} ${st}");
    }
  }
  static method testTryCatch3() → dynamic {
    dart.core::int x = 1;
    try {
      dart.core::int y = 2;
      function foo() → void {
        try {
          dart.core::print("danger foo");
        }
        on dynamic catch(final dynamic e) {
          dart.core::print(x);
          y = 3;
        }
      }
      [@vm.call-site-attributes.metadata=receiverType:() → void] foo.call();
      dart.core::print(y);
    }
    on dynamic catch(final dynamic e, final dart.core::StackTrace st) {
      dart.core::print("caught ${e} ${st}");
      function bar() → void {
        try {
          dart.core::print("danger bar");
        }
        on dart.core::Error catch(final dart.core::Error e) {
          dart.core::print("error ${e}, captured stack trace: ${st}");
        }
      }
      return bar;
    }
  }
  static method testRethrow(dart.core::bool cond) → dynamic {
    try {
      try {
        dart.core::print("try 1 > try 2");
      }
      on dynamic catch(final dynamic e) {
        try {
          dart.core::print("try 1 > catch 2 > try 3");
          if(cond) {
            rethrow;
          }
        }
        on dynamic catch(final dynamic e) {
          dart.core::print("try 1 > catch 2 > catch 3");
        }
      }
    }
    on dynamic catch(final dynamic e, final dart.core::StackTrace st) {
      dart.core::print("catch 1");
      dart.core::print(st);
    }
  }
  static method testTryFinally1() → dynamic {
    #L1:
    for (dart.core::int i = 0; i.{dart.core::num::<}(10); i = i.{dart.core::num::+}(1)) {
      try {
        if(i.{dart.core::num::>}(5)) {
          break #L1;
        }
      }
      finally {
        dart.core::print(i);
      }
    }
  }
  static method testTryFinally2(dart.core::int x) → dynamic {
    #L2:
    switch(x) {
      #L3:
      case #C1:
        {
          try {
            dart.core::print("before try 1");
            dart.core::int y = 3;
            try {
              dart.core::print("try");
              function foo() → void {
                dart.core::print(x);
                dart.core::print(y);
              }
              [@vm.call-site-attributes.metadata=receiverType:() → void] foo.call();
              continue #L4;
            }
            finally {
              dart.core::print("finally 1");
            }
            dart.core::print("after try 1");
          }
          finally {
            dart.core::print("finally 2");
          }
          break #L2;
        }
      #L4:
      case #C2:
        {
          dart.core::print("case 2");
          break #L2;
        }
    }
  }
  static method testTryFinally3() → dynamic {
    dart.core::int x = 11;
    dynamic y;
    try {
      y = () → dart.core::int {
        dart.core::print(x);
        try {
          dart.core::print("try 1");
          return 42;
        }
        finally {
          try {
            dart.core::print("try 2");
            return 43;
          }
          finally {
            dart.core::print(x);
          }
        }
      };
    }
    finally {
      dart.core::print(x);
      [@vm.call-site-attributes.metadata=receiverType:dynamic] y.call();
    }
  }
  static method testTryCatchFinally() → dynamic {
    try
      try {
        dart.core::print("try");
      }
      on dynamic catch(final dynamic e) {
        dart.core::print("catch");
      }
    finally {
      dart.core::print("finally");
    }
  }
  static method main() → dynamic {}
}
constants  {
  #C1 = 1
  #C2 = 2
}
