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

[@vm.bytecode=
Bytecode (version: stable) {
  Entry                4
  CheckStack
Try #0 start:
  PushConstant         CP#0
  PushConstant         CP#2
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             4
  MoveSpecial          r0, exception
  MoveSpecial          r1, stackTrace
  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
  PushConstant         CP#5
  IndirectStaticCall   1, CP#1
  PushConstant         CP#6
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
L1:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 2, end 7, handler 7, types [CP#3]
}
ConstantPool {
  [0] = String 'danger!'
  [1] = ArgDesc num-args 1, num-type-args 0, names []
  [2] = StaticICData target 'dart.core::print', arg-desc CP#1
  [3] = Type dynamic
  [4] = String 'caught '
  [5] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#1
  [6] = StaticICData target 'dart.core::print', arg-desc CP#1
}
]static method testTryCatch1() → dynamic {
  try {
    core::print("danger!");
  }
  on dynamic catch(final dynamic e) {
    core::print("caught ${e}");
  }
}
[@vm.bytecode=
Bytecode (version: stable) {
  Entry                5
  CheckStack
Try #0 start:
  PushConstant         CP#0
  PushConstant         CP#2
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             5
  MoveSpecial          r0, exception
  MoveSpecial          r1, stackTrace
  Push                 r0
  PushConstant         CP#3
  InstanceCall         2, CP#5
  JumpIfFalse          L2
  PushConstant         CP#6
  PushConstant         CP#7
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
L2:
  Push                 r0
  PushConstant         CP#8
  InstanceCall         2, CP#9
  JumpIfFalse          L3
  Push                 r0
  PopLocal             r2
  PushNull
  PushInt              2
  CreateArrayTOS
  StoreLocal           r3
  Push                 r3
  PushInt              0
  PushConstant         CP#10
  StoreIndexedTOS
  Push                 r3
  PushInt              1
  Push                 r2
  StoreIndexedTOS
  PushConstant         CP#11
  IndirectStaticCall   1, CP#1
  PushConstant         CP#12
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
L3:
  Push                 r0
  PushConstant         CP#13
  InstanceCall         2, CP#14
  JumpIfFalse          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#16
  StoreIndexedTOS
  Push                 r4
  PushInt              3
  Push                 r3
  StoreIndexedTOS
  PushConstant         CP#17
  IndirectStaticCall   1, CP#1
  PushConstant         CP#18
  IndirectStaticCall   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#20
  StoreIndexedTOS
  Push                 r4
  PushInt              1
  Push                 r2
  StoreIndexedTOS
  Push                 r4
  PushInt              2
  PushConstant         CP#16
  StoreIndexedTOS
  Push                 r4
  PushInt              3
  Push                 r3
  StoreIndexedTOS
  PushConstant         CP#21
  IndirectStaticCall   1, CP#1
  PushConstant         CP#22
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
L1:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 2, end 7, handler 7, needs-stack-trace, types [CP#3, CP#8, CP#13, CP#19]
}
ConstantPool {
  [0] = String 'danger!'
  [1] = ArgDesc num-args 1, num-type-args 0, names []
  [2] = StaticICData target 'dart.core::print', arg-desc CP#1
  [3] = Type dart.core::TypeError
  [4] = ArgDesc num-args 2, num-type-args 0, names []
  [5] = ICData target-name 'dart.core::_simpleInstanceOf', arg-desc CP#4
  [6] = String 'caught type error'
  [7] = StaticICData target 'dart.core::print', arg-desc CP#1
  [8] = Type dart.core::AssertionError
  [9] = ICData target-name 'dart.core::_simpleInstanceOf', arg-desc CP#4
  [10] = String 'caught assertion error '
  [11] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#1
  [12] = StaticICData target 'dart.core::print', arg-desc CP#1
  [13] = Type dart.core::Error
  [14] = ICData target-name 'dart.core::_simpleInstanceOf', arg-desc CP#4
  [15] = String 'caught error '
  [16] = String ' '
  [17] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#1
  [18] = StaticICData target 'dart.core::print', arg-desc CP#1
  [19] = Type dynamic
  [20] = String 'caught something '
  [21] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#1
  [22] = StaticICData target 'dart.core::print', arg-desc CP#1
}
]static method testTryCatch2() → dynamic {
  try {
    core::print("danger!");
  }
  on core::TypeError catch(no-exception-var) {
    core::print("caught type error");
  }
  on core::AssertionError catch(final core::AssertionError e) {
    core::print("caught assertion error ${e}");
  }
  on core::Error catch(final core::Error e, final core::StackTrace st) {
    core::print("caught error ${e} ${st}");
  }
  on dynamic catch(final dynamic e, final core::StackTrace st) {
    core::print("caught something ${e} ${st}");
  }
}
[@vm.bytecode=
Bytecode (version: stable) {
  Entry                7
  CheckStack
  AllocateContext      3
  PopLocal             r0
  Push                 r0
  PushInt              1
  StoreContextVar      0
  Push                 r0
  PopLocal             r2
Try #0 start:
  Push                 r0
  PushInt              2
  StoreContextVar      1
  Allocate             CP#9
  StoreLocal           r5
  Push                 r5
  PushNull
  StoreFieldTOS        CP#10
  Push                 r5
  PushNull
  StoreFieldTOS        CP#12
  Push                 r5
  PushConstant         CP#14
  StoreFieldTOS        CP#15
  Push                 r5
  PushConstant         CP#0
  StoreFieldTOS        CP#17
  Push                 r5
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r4
  Push                 r4
  InstanceCall         1, CP#19
  Drop1
  Push                 r0
  LoadContextVar       1
  PushConstant         CP#20
  IndirectStaticCall   1, CP#4
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             7
  Push                 r2
  PopLocal             r0
  MoveSpecial          r2, exception
  MoveSpecial          r3, stackTrace
  Push                 r2
  PopLocal             r4
  Push                 r0
  Push                 r3
  StoreContextVar      2
  PushNull
  PushInt              4
  CreateArrayTOS
  StoreLocal           r5
  Push                 r5
  PushInt              0
  PushConstant         CP#21
  StoreIndexedTOS
  Push                 r5
  PushInt              1
  Push                 r4
  StoreIndexedTOS
  Push                 r5
  PushInt              2
  PushConstant         CP#22
  StoreIndexedTOS
  Push                 r5
  PushInt              3
  Push                 r0
  LoadContextVar       2
  StoreIndexedTOS
  PushConstant         CP#23
  IndirectStaticCall   1, CP#4
  PushConstant         CP#24
  IndirectStaticCall   1, CP#4
  Drop1
  Allocate             CP#9
  StoreLocal           r5
  Push                 r5
  PushNull
  StoreFieldTOS        CP#10
  Push                 r5
  PushNull
  StoreFieldTOS        CP#12
  Push                 r5
  PushConstant         CP#14
  StoreFieldTOS        CP#15
  Push                 r5
  PushConstant         CP#25
  StoreFieldTOS        CP#17
  Push                 r5
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r6
  Push                 r6
  ReturnTOS
  Jump                 L1
L1:
  Push                 r0
  LoadContextParent
  PopLocal             r0
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 9, end 39, handler 39, needs-stack-trace, types [CP#6]
}
ConstantPool {
  [0] = ClosureFunction foo () → void;
  [1] = InstanceField dart.core::_Closure::_context
  [2] = Reserved
  [3] = String 'danger foo'
  [4] = ArgDesc num-args 1, num-type-args 0, names []
  [5] = StaticICData target 'dart.core::print', arg-desc CP#4
  [6] = Type dynamic
  [7] = StaticICData target 'dart.core::print', arg-desc CP#4
  [8] = EndClosureFunctionScope
  [9] = Class dart.core::_Closure
  [10] = InstanceField dart.core::_Closure::_instantiator_type_arguments
  [11] = Reserved
  [12] = InstanceField dart.core::_Closure::_function_type_arguments
  [13] = Reserved
  [14] = EmptyTypeArguments
  [15] = InstanceField dart.core::_Closure::_delayed_type_arguments
  [16] = Reserved
  [17] = InstanceField dart.core::_Closure::_function
  [18] = Reserved
  [19] = ICData dynamic target-name 'call', arg-desc CP#4
  [20] = StaticICData target 'dart.core::print', arg-desc CP#4
  [21] = String 'caught '
  [22] = String ' '
  [23] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#4
  [24] = StaticICData target 'dart.core::print', arg-desc CP#4
  [25] = ClosureFunction bar () → void;
  [26] = String 'danger bar'
  [27] = StaticICData target 'dart.core::print', arg-desc CP#4
  [28] = Type dart.core::Error
  [29] = ArgDesc num-args 2, num-type-args 0, names []
  [30] = ICData target-name 'dart.core::_simpleInstanceOf', arg-desc CP#29
  [31] = String 'error '
  [32] = String ', captured stack trace: '
  [33] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#4
  [34] = StaticICData target 'dart.core::print', arg-desc CP#4
  [35] = EndClosureFunctionScope
}
Closure CP#0 {
  EntryFixed           1, 6
  CheckStack
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  Push                 r0
  PopLocal             r2
Try #0 start:
  PushConstant         CP#3
  PushConstant         CP#5
  IndirectStaticCall   1, CP#4
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             6
  Push                 r2
  PopLocal             r0
  MoveSpecial          r2, exception
  MoveSpecial          r3, stackTrace
  Push                 r2
  PopLocal             r4
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#7
  IndirectStaticCall   1, CP#4
  Drop1
  Push                 r0
  PushInt              3
  StoreContextVar      1
  Jump                 L1
L1:
  PushNull
  ReturnTOS

}

Closure CP#25 {
  EntryFixed           1, 6
  CheckStack
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  Push                 r0
  PopLocal             r2
Try #0 start:
  PushConstant         CP#26
  PushConstant         CP#27
  IndirectStaticCall   1, CP#4
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             6
  Push                 r2
  PopLocal             r0
  MoveSpecial          r2, exception
  MoveSpecial          r3, stackTrace
  Push                 r2
  PushConstant         CP#28
  InstanceCall         2, CP#30
  JumpIfFalse          L2
  Push                 r2
  PopLocal             r4
  PushNull
  PushInt              4
  CreateArrayTOS
  StoreLocal           r5
  Push                 r5
  PushInt              0
  PushConstant         CP#31
  StoreIndexedTOS
  Push                 r5
  PushInt              1
  Push                 r4
  StoreIndexedTOS
  Push                 r5
  PushInt              2
  PushConstant         CP#32
  StoreIndexedTOS
  Push                 r5
  PushInt              3
  Push                 r0
  LoadContextVar       2
  StoreIndexedTOS
  PushConstant         CP#33
  IndirectStaticCall   1, CP#4
  PushConstant         CP#34
  IndirectStaticCall   1, CP#4
  Drop1
  Jump                 L1
L2:
  Push                 r2
  Push                 r3
  Throw                1
L1:
  PushNull
  ReturnTOS

}
]static method testTryCatch3() → dynamic {
  core::int x = 1;
  try {
    core::int y = 2;
    function foo() → void {
      try {
        core::print("danger foo");
      }
      on dynamic catch(final dynamic e) {
        core::print(x);
        y = 3;
      }
    }
    [@vm.call-site-attributes.metadata=receiverType:() → void] foo.call();
    core::print(y);
  }
  on dynamic catch(final dynamic e, final core::StackTrace st) {
    core::print("caught ${e} ${st}");
    function bar() → void {
      try {
        core::print("danger bar");
      }
      on core::Error catch(final core::Error e) {
        core::print("error ${e}, captured stack trace: ${st}");
      }
    }
    return bar;
  }
}
[@vm.bytecode=
Bytecode (version: stable) {
  Entry                8
  CheckStack
Try #0 start:
Try #1 start:
  PushConstant         CP#0
  PushConstant         CP#2
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
Try #1 end:
Try #1 handler:
  SetFrame             8
  MoveSpecial          r2, exception
  MoveSpecial          r3, stackTrace
  Push                 r2
  PopLocal             r4
Try #2 start:
  PushConstant         CP#4
  PushConstant         CP#5
  IndirectStaticCall   1, CP#1
  Drop1
  Push                 FP[-5]
  AssertBoolean        0
  JumpIfFalse          L2
  Push                 r2
  Push                 r3
  Throw                1
  Drop1
L2:
  Jump                 L3
Try #2 end:
Try #2 handler:
  SetFrame             8
  MoveSpecial          r5, exception
  MoveSpecial          r6, stackTrace
  Push                 r5
  PopLocal             r7
  PushConstant         CP#6
  PushConstant         CP#7
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L3
L3:
  Jump                 L1
L1:
  Jump                 L4
Try #0 end:
Try #0 handler:
  SetFrame             8
  MoveSpecial          r0, exception
  MoveSpecial          r1, stackTrace
  Push                 r0
  PopLocal             r2
  Push                 r1
  PopLocal             r3
  PushConstant         CP#8
  PushConstant         CP#9
  IndirectStaticCall   1, CP#1
  Drop1
  Push                 r3
  PushConstant         CP#10
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L4
L4:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 2, end 36, handler 36, needs-stack-trace, types [CP#3]
  try-index 1, outer 0, start 2, end 7, handler 7, needs-stack-trace, types [CP#3]
  try-index 2, outer 0, start 12, end 24, handler 24, types [CP#3]
}
ConstantPool {
  [0] = String 'try 1 > try 2'
  [1] = ArgDesc num-args 1, num-type-args 0, names []
  [2] = StaticICData target 'dart.core::print', arg-desc CP#1
  [3] = Type dynamic
  [4] = String 'try 1 > catch 2 > try 3'
  [5] = StaticICData target 'dart.core::print', arg-desc CP#1
  [6] = String 'try 1 > catch 2 > catch 3'
  [7] = StaticICData target 'dart.core::print', arg-desc CP#1
  [8] = String 'catch 1'
  [9] = StaticICData target 'dart.core::print', arg-desc CP#1
  [10] = StaticICData target 'dart.core::print', arg-desc CP#1
}
]static method testRethrow(core::bool cond) → dynamic {
  try {
    try {
      core::print("try 1 > try 2");
    }
    on dynamic catch(final dynamic e) {
      try {
        core::print("try 1 > catch 2 > try 3");
        if(cond) {
          rethrow;
        }
      }
      on dynamic catch(final dynamic e) {
        core::print("try 1 > catch 2 > catch 3");
      }
    }
  }
  on dynamic catch(final dynamic e, final core::StackTrace st) {
    core::print("catch 1");
    core::print(st);
  }
}
[@vm.bytecode=
Bytecode (version: stable) {
  Entry                3
  CheckStack
  PushInt              0
  PopLocal             r0
L5:
  CheckStack
  Push                 r0
  PushInt              10
  CompareIntLt
  AssertBoolean        0
  JumpIfFalse          L1
Try #0 start:
  Push                 r0
  PushInt              5
  CompareIntGt
  AssertBoolean        0
  JumpIfFalse          L2
  Jump                 L3
L2:
  Jump                 L4
Try #0 end:
Try #0 handler:
  SetFrame             3
  MoveSpecial          r1, exception
  MoveSpecial          r2, stackTrace
  Push                 r0
  PushConstant         CP#2
  IndirectStaticCall   1, CP#1
  Drop1
  Push                 r1
  Push                 r2
  Throw                1
L3:
  Push                 r0
  PushConstant         CP#3
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
L4:
  Push                 r0
  PushConstant         CP#4
  IndirectStaticCall   1, CP#1
  Drop1
  Push                 r0
  PushInt              1
  AddInt
  StoreLocal           r0
  Drop1
  Jump                 L5
L1:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 10, end 17, handler 17, needs-stack-trace, types [CP#0]
}
ConstantPool {
  [0] = Type dynamic
  [1] = ArgDesc num-args 1, num-type-args 0, names []
  [2] = StaticICData target 'dart.core::print', arg-desc CP#1
  [3] = StaticICData target 'dart.core::print', arg-desc CP#1
  [4] = StaticICData target 'dart.core::print', arg-desc CP#1
}
]static method testTryFinally1() → dynamic {
  #L1:
  for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
    try {
      if(i.{core::num::>}(5)) {
        break #L1;
      }
    }
    finally {
      core::print(i);
    }
  }
}
[@vm.bytecode=
Bytecode (version: stable) {
  Entry                9
  CheckStack
  AllocateContext      2
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0
  Push                 r0
  LoadContextVar       0
  PopLocal             r2
  Push                 r2
  PushInt              1
  InstanceCall         2, CP#1
  JumpIfTrue           L1
  Push                 r2
  PushInt              2
  InstanceCall         2, CP#2
  JumpIfTrue           L2
  Jump                 L3
L1:
  Push                 r0
  PopLocal             r3
Try #0 start:
  PushConstant         CP#3
  PushConstant         CP#5
  IndirectStaticCall   1, CP#4
  Drop1
  Push                 r0
  PushInt              3
  StoreContextVar      1
  Push                 r0
  PopLocal             r5
Try #1 start:
  PushConstant         CP#6
  PushConstant         CP#7
  IndirectStaticCall   1, CP#4
  Drop1
  Allocate             CP#14
  StoreLocal           r8
  Push                 r8
  PushNull
  StoreFieldTOS        CP#15
  Push                 r8
  PushNull
  StoreFieldTOS        CP#17
  Push                 r8
  PushConstant         CP#19
  StoreFieldTOS        CP#20
  Push                 r8
  PushConstant         CP#8
  StoreFieldTOS        CP#22
  Push                 r8
  Push                 r0
  StoreFieldTOS        CP#9
  PopLocal             r7
  Push                 r7
  InstanceCall         1, CP#24
  Drop1
  Jump                 L4
  Jump                 L5
Try #1 end:
Try #1 handler:
  SetFrame             9
  Push                 r5
  PopLocal             r0
  MoveSpecial          r5, exception
  MoveSpecial          r6, stackTrace
  PushConstant         CP#26
  PushConstant         CP#27
  IndirectStaticCall   1, CP#4
  Drop1
  Push                 r5
  Push                 r6
  Throw                1
L4:
  Push                 r5
  PopLocal             r0
  PushConstant         CP#26
  PushConstant         CP#28
  IndirectStaticCall   1, CP#4
  Drop1
  Jump                 L6
L5:
  Push                 r5
  PopLocal             r0
  PushConstant         CP#26
  PushConstant         CP#29
  IndirectStaticCall   1, CP#4
  Drop1
  PushConstant         CP#30
  PushConstant         CP#31
  IndirectStaticCall   1, CP#4
  Drop1
  Jump                 L7
Try #0 end:
Try #0 handler:
  SetFrame             9
  Push                 r3
  PopLocal             r0
  MoveSpecial          r3, exception
  MoveSpecial          r4, stackTrace
  PushConstant         CP#32
  PushConstant         CP#33
  IndirectStaticCall   1, CP#4
  Drop1
  Push                 r3
  Push                 r4
  Throw                1
L6:
  Push                 r3
  PopLocal             r0
  PushConstant         CP#32
  PushConstant         CP#34
  IndirectStaticCall   1, CP#4
  Drop1
  Jump                 L2
L7:
  Push                 r3
  PopLocal             r0
  PushConstant         CP#32
  PushConstant         CP#35
  IndirectStaticCall   1, CP#4
  Drop1
  Jump                 L3
L2:
  PushConstant         CP#36
  PushConstant         CP#37
  IndirectStaticCall   1, CP#4
  Drop1
  Jump                 L3
L3:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 21, end 87, handler 87, needs-stack-trace, types [CP#25]
  try-index 1, outer 0, start 30, end 57, handler 57, needs-stack-trace, types [CP#25]
}
ConstantPool {
  [0] = ArgDesc num-args 2, num-type-args 0, names []
  [1] = ICData target-name '==', arg-desc CP#0
  [2] = ICData target-name '==', arg-desc CP#0
  [3] = String 'before try 1'
  [4] = ArgDesc num-args 1, num-type-args 0, names []
  [5] = StaticICData target 'dart.core::print', arg-desc CP#4
  [6] = String 'try'
  [7] = StaticICData target 'dart.core::print', arg-desc CP#4
  [8] = ClosureFunction foo () → void;
  [9] = InstanceField dart.core::_Closure::_context
  [10] = Reserved
  [11] = StaticICData target 'dart.core::print', arg-desc CP#4
  [12] = StaticICData target 'dart.core::print', arg-desc CP#4
  [13] = EndClosureFunctionScope
  [14] = Class dart.core::_Closure
  [15] = InstanceField dart.core::_Closure::_instantiator_type_arguments
  [16] = Reserved
  [17] = InstanceField dart.core::_Closure::_function_type_arguments
  [18] = Reserved
  [19] = EmptyTypeArguments
  [20] = InstanceField dart.core::_Closure::_delayed_type_arguments
  [21] = Reserved
  [22] = InstanceField dart.core::_Closure::_function
  [23] = Reserved
  [24] = ICData dynamic target-name 'call', arg-desc CP#4
  [25] = Type dynamic
  [26] = String 'finally 1'
  [27] = StaticICData target 'dart.core::print', arg-desc CP#4
  [28] = StaticICData target 'dart.core::print', arg-desc CP#4
  [29] = StaticICData target 'dart.core::print', arg-desc CP#4
  [30] = String 'after try 1'
  [31] = StaticICData target 'dart.core::print', arg-desc CP#4
  [32] = String 'finally 2'
  [33] = StaticICData target 'dart.core::print', arg-desc CP#4
  [34] = StaticICData target 'dart.core::print', arg-desc CP#4
  [35] = StaticICData target 'dart.core::print', arg-desc CP#4
  [36] = String 'case 2'
  [37] = StaticICData target 'dart.core::print', arg-desc CP#4
}
Closure CP#8 {
  EntryFixed           1, 2
  CheckStack
  Push                 FP[-5]
  LoadFieldTOS         CP#9
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#11
  IndirectStaticCall   1, CP#4
  Drop1
  Push                 r0
  LoadContextVar       1
  PushConstant         CP#12
  IndirectStaticCall   1, CP#4
  Drop1
  PushNull
  ReturnTOS

}
]static method testTryFinally2(core::int x) → dynamic {
  #L2:
  switch(x) {
    #L3:
    case 1:
      {
        try {
          core::print("before try 1");
          core::int y = 3;
          try {
            core::print("try");
            function foo() → void {
              core::print(x);
              core::print(y);
            }
            [@vm.call-site-attributes.metadata=receiverType:() → void] foo.call();
            continue #L4;
          }
          finally {
            core::print("finally 1");
          }
          core::print("after try 1");
        }
        finally {
          core::print("finally 2");
        }
        break #L2;
      }
    #L4:
    case 2:
      {
        core::print("case 2");
        break #L2;
      }
  }
}
[@vm.bytecode=
Bytecode (version: stable) {
  Entry                6
  CheckStack
  AllocateContext      1
  PopLocal             r0
  Push                 r0
  PushInt              11
  StoreContextVar      0
  PushNull
  PopLocal             r2
  Push                 r0
  PopLocal             r3
Try #0 start:
  Allocate             CP#22
  StoreLocal           r5
  Push                 r5
  PushNull
  StoreFieldTOS        CP#23
  Push                 r5
  PushNull
  StoreFieldTOS        CP#25
  Push                 r5
  PushConstant         CP#27
  StoreFieldTOS        CP#28
  Push                 r5
  PushConstant         CP#0
  StoreFieldTOS        CP#30
  Push                 r5
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r2
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             6
  Push                 r3
  PopLocal             r0
  MoveSpecial          r3, exception
  MoveSpecial          r4, stackTrace
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#32
  IndirectStaticCall   1, CP#3
  Drop1
  Push                 r2
  InstanceCall         1, CP#33
  Drop1
  Push                 r3
  Push                 r4
  Throw                1
L1:
  Push                 r3
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#34
  IndirectStaticCall   1, CP#3
  Drop1
  Push                 r2
  InstanceCall         1, CP#35
  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#7]
}
ConstantPool {
  [0] = ClosureFunction <anonymous closure> () → dart.core::int;
  [1] = InstanceField dart.core::_Closure::_context
  [2] = Reserved
  [3] = ArgDesc num-args 1, num-type-args 0, names []
  [4] = StaticICData target 'dart.core::print', arg-desc CP#3
  [5] = String 'try 1'
  [6] = StaticICData target 'dart.core::print', arg-desc CP#3
  [7] = Type dynamic
  [8] = String 'try 2'
  [9] = StaticICData target 'dart.core::print', arg-desc CP#3
  [10] = StaticICData target 'dart.core::print', arg-desc CP#3
  [11] = StaticICData target 'dart.core::print', arg-desc CP#3
  [12] = StaticICData target 'dart.core::print', arg-desc CP#3
  [13] = StaticICData target 'dart.core::print', arg-desc CP#3
  [14] = StaticICData target 'dart.core::print', arg-desc CP#3
  [15] = StaticICData target 'dart.core::print', arg-desc CP#3
  [16] = StaticICData target 'dart.core::print', arg-desc CP#3
  [17] = StaticICData target 'dart.core::print', arg-desc CP#3
  [18] = StaticICData target 'dart.core::print', arg-desc CP#3
  [19] = StaticICData target 'dart.core::print', arg-desc CP#3
  [20] = StaticICData target 'dart.core::print', arg-desc CP#3
  [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.core::print', arg-desc CP#3
  [33] = ICData dynamic target-name 'call', arg-desc CP#3
  [34] = StaticICData target 'dart.core::print', arg-desc CP#3
  [35] = ICData dynamic target-name 'call', arg-desc CP#3
}
Closure CP#0 {
  EntryFixed           1, 6
  CheckStack
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#4
  IndirectStaticCall   1, CP#3
  Drop1
  Push                 r0
  PopLocal             r2
Try #0 start:
  PushConstant         CP#5
  PushConstant         CP#6
  IndirectStaticCall   1, CP#3
  Drop1
  Jump                 L1
  Jump                 L2
Try #0 end:
Try #0 handler:
  SetFrame             6
  Push                 r2
  PopLocal             r0
  MoveSpecial          r2, exception
  MoveSpecial          r3, stackTrace
  Push                 r0
  PopLocal             r4
Try #1 start:
  PushConstant         CP#8
  PushConstant         CP#9
  IndirectStaticCall   1, CP#3
  Drop1
  Jump                 L3
  Jump                 L4
Try #1 end:
Try #1 handler:
  SetFrame             6
  Push                 r4
  PopLocal             r0
  MoveSpecial          r4, exception
  MoveSpecial          r5, stackTrace
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#10
  IndirectStaticCall   1, CP#3
  Drop1
  Push                 r4
  Push                 r5
  Throw                1
L3:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#11
  IndirectStaticCall   1, CP#3
  Drop1
  PushInt              43
  ReturnTOS
L4:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#12
  IndirectStaticCall   1, CP#3
  Drop1
  Push                 r2
  Push                 r3
  Throw                1
L1:
  Push                 r2
  PopLocal             r0
  Push                 r0
  PopLocal             r4
Try #2 start:
  PushConstant         CP#8
  PushConstant         CP#13
  IndirectStaticCall   1, CP#3
  Drop1
  Jump                 L5
  Jump                 L6
Try #2 end:
Try #2 handler:
  SetFrame             6
  Push                 r4
  PopLocal             r0
  MoveSpecial          r4, exception
  MoveSpecial          r5, stackTrace
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#14
  IndirectStaticCall   1, CP#3
  Drop1
  Push                 r4
  Push                 r5
  Throw                1
L5:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#15
  IndirectStaticCall   1, CP#3
  Drop1
  PushInt              43
  ReturnTOS
L6:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#16
  IndirectStaticCall   1, CP#3
  Drop1
  PushInt              42
  ReturnTOS
L2:
  Push                 r2
  PopLocal             r0
  Push                 r0
  PopLocal             r4
Try #3 start:
  PushConstant         CP#8
  PushConstant         CP#17
  IndirectStaticCall   1, CP#3
  Drop1
  Jump                 L7
  Jump                 L8
Try #3 end:
Try #3 handler:
  SetFrame             6
  Push                 r4
  PopLocal             r0
  MoveSpecial          r4, exception
  MoveSpecial          r5, stackTrace
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#18
  IndirectStaticCall   1, CP#3
  Drop1
  Push                 r4
  Push                 r5
  Throw                1
L7:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#19
  IndirectStaticCall   1, CP#3
  Drop1
  PushInt              43
  ReturnTOS
L8:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#20
  IndirectStaticCall   1, CP#3
  Drop1
  PushNull
  ReturnTOS

}
]static method testTryFinally3() → dynamic {
  core::int x = 11;
  dynamic y;
  try {
    y = () → core::int {
      core::print(x);
      try {
        core::print("try 1");
        return 42;
      }
      finally {
        try {
          core::print("try 2");
          return 43;
        }
        finally {
          core::print(x);
        }
      }
    };
  }
  finally {
    core::print(x);
    [@vm.call-site-attributes.metadata=receiverType:dynamic] y.call();
  }
}
[@vm.bytecode=
Bytecode (version: stable) {
  Entry                5
  CheckStack
Try #0 start:
Try #1 start:
  PushConstant         CP#0
  PushConstant         CP#2
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
Try #1 end:
Try #1 handler:
  SetFrame             5
  MoveSpecial          r2, exception
  MoveSpecial          r3, stackTrace
  Push                 r2
  PopLocal             r4
  PushConstant         CP#4
  PushConstant         CP#5
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
L1:
  Jump                 L2
Try #0 end:
Try #0 handler:
  SetFrame             5
  MoveSpecial          r0, exception
  MoveSpecial          r1, stackTrace
  PushConstant         CP#6
  PushConstant         CP#7
  IndirectStaticCall   1, CP#1
  Drop1
  Push                 r0
  Push                 r1
  Throw                1
L2:
  PushConstant         CP#6
  PushConstant         CP#8
  IndirectStaticCall   1, CP#1
  Drop1
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 2, end 18, handler 18, needs-stack-trace, types [CP#3]
  try-index 1, outer 0, start 2, end 7, handler 7, types [CP#3]
}
ConstantPool {
  [0] = String 'try'
  [1] = ArgDesc num-args 1, num-type-args 0, names []
  [2] = StaticICData target 'dart.core::print', arg-desc CP#1
  [3] = Type dynamic
  [4] = String 'catch'
  [5] = StaticICData target 'dart.core::print', arg-desc CP#1
  [6] = String 'finally'
  [7] = StaticICData target 'dart.core::print', arg-desc CP#1
  [8] = StaticICData target 'dart.core::print', arg-desc CP#1
}
]static method testTryCatchFinally() → dynamic {
  try
    try {
      core::print("try");
    }
    on dynamic catch(final dynamic e) {
      core::print("catch");
    }
  finally {
    core::print("finally");
  }
}
[@vm.bytecode=
Bytecode (version: stable) {
  Entry                0
  CheckStack
  PushNull
  ReturnTOS
}
ConstantPool {
}
]static method main() → dynamic {}
