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

[@vm.bytecode=
Bytecode {
  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 {
  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
  PushNull
  PushNull
  PushConstant         CP#3
  InstanceCall         4, CP#5
  PushTrue
  IfNeStrictTOS
  Jump                 L2
  PushConstant         CP#6
  PushConstant         CP#7
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
L2:
  Push                 r0
  PushNull
  PushNull
  PushConstant         CP#8
  InstanceCall         4, CP#9
  PushTrue
  IfNeStrictTOS
  Jump                 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
  PushNull
  PushNull
  PushConstant         CP#13
  InstanceCall         4, CP#14
  PushTrue
  IfNeStrictTOS
  Jump                 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 4, num-type-args 0, names []
  [5] = ICData target-name 'dart.core::_instanceOf', 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::_instanceOf', 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::_instanceOf', 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 {
  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 4, num-type-args 0, names []
  [30] = ICData target-name 'dart.core::_instanceOf', 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
  PushNull
  PushNull
  PushConstant         CP#28
  InstanceCall         4, CP#30
  PushTrue
  IfNeStrictTOS
  Jump                 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 {
  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
  PushTrue
  IfNeStrictTOS
  Jump                 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 38, handler 38, 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 26, handler 26, 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 {
  Entry                3
  CheckStack
  PushInt              0
  PopLocal             r0
L5:
  CheckStack
  Push                 r0
  PushInt              10
  InstanceCall         2, CP#1
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L1
Try #0 start:
  Push                 r0
  PushInt              5
  InstanceCall         2, CP#2
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L2
  Jump                 L3
L2:
  Jump                 L4
Try #0 end:
Try #0 handler:
  SetFrame             3
  MoveSpecial          r1, exception
  MoveSpecial          r2, stackTrace
  Push                 r0
  PushConstant         CP#5
  IndirectStaticCall   1, CP#4
  Drop1
  Push                 r1
  Push                 r2
  Throw                1
L3:
  Push                 r0
  PushConstant         CP#6
  IndirectStaticCall   1, CP#4
  Drop1
  Jump                 L1
L4:
  Push                 r0
  PushConstant         CP#7
  IndirectStaticCall   1, CP#4
  Drop1
  Push                 r0
  PushInt              1
  InstanceCall         2, CP#8
  StoreLocal           r0
  Drop1
  Jump                 L5
L1:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 12, end 21, handler 21, needs-stack-trace, types [CP#3]
}
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] = Type dynamic
  [4] = ArgDesc num-args 1, num-type-args 0, names []
  [5] = StaticICData target 'dart.core::print', arg-desc CP#4
  [6] = StaticICData target 'dart.core::print', arg-desc CP#4
  [7] = StaticICData target 'dart.core::print', arg-desc CP#4
  [8] = ICData target-name '+', arg-desc CP#0
}
]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 {
  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
  PushTrue
  IfEqStrictTOS
  Jump                 L1
  Push                 r2
  PushInt              2
  InstanceCall         2, CP#2
  PushTrue
  IfEqStrictTOS
  Jump                 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 25, end 91, handler 91, needs-stack-trace, types [CP#25]
  try-index 1, outer 0, start 34, end 61, handler 61, 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 {
  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 {
  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 {
  Entry                0
  CheckStack
  PushNull
  ReturnTOS
}
ConstantPool {
}
]static method main() → dynamic {}
