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

[@vm.bytecode=
Bytecode {
  Entry                4
  CheckStack           0
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          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
  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           0
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          exception, r0
  MoveSpecial          stackTrace, r1
  Push                 r0
  PushConstant         CP#3
  InterfaceCall        2, CP#5
  JumpIfFalse          L2
  PushConstant         CP#7
  PushConstant         CP#8
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
L2:
  Push                 r0
  PushConstant         CP#9
  InterfaceCall        2, CP#5
  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
  InterfaceCall        2, CP#5
  JumpIfFalse          L4
  Push                 r0
  PopLocal             r2
  Push                 r1
  PopLocal             r3
  PushNull
  PushInt              4
  CreateArrayTOS
  StoreLocal           r4
  Push                 r4
  PushInt              0
  PushConstant         CP#14
  StoreIndexedTOS
  Push                 r4
  PushInt              1
  Push                 r2
  StoreIndexedTOS
  Push                 r4
  PushInt              2
  PushConstant         CP#15
  StoreIndexedTOS
  Push                 r4
  PushInt              3
  Push                 r3
  StoreIndexedTOS
  PushConstant         CP#16
  IndirectStaticCall   1, CP#1
  PushConstant         CP#17
  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#19
  StoreIndexedTOS
  Push                 r4
  PushInt              1
  Push                 r2
  StoreIndexedTOS
  Push                 r4
  PushInt              2
  PushConstant         CP#15
  StoreIndexedTOS
  Push                 r4
  PushInt              3
  Push                 r3
  StoreIndexedTOS
  PushConstant         CP#20
  IndirectStaticCall   1, CP#1
  PushConstant         CP#21
  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#9, CP#13, CP#18]
}
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] = InterfaceCall target-name '_simpleInstanceOf', arg-desc CP#4
  [6] = Reserved
  [7] = String 'caught type error'
  [8] = StaticICData target 'dart:core::print', arg-desc CP#1
  [9] = Type dart:core::AssertionError
  [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] = String 'caught error '
  [15] = String ' '
  [16] = StaticICData target 'dart:core::_StringBase::_interpolate', arg-desc CP#1
  [17] = StaticICData target 'dart:core::print', arg-desc CP#1
  [18] = Type dynamic
  [19] = String 'caught something '
  [20] = StaticICData target 'dart:core::_StringBase::_interpolate', arg-desc CP#1
  [21] = 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           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
  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
  DynamicCall          1, CP#19
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  PushConstant         CP#20
  IndirectStaticCall   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#21
  StoreIndexedTOS
  Push                 r5
  PushInt              1
  Push                 r4
  StoreIndexedTOS
  Push                 r5
  PushInt              2
  PushConstant         CP#22
  StoreIndexedTOS
  Push                 r5
  PushInt              3
  Push                 r0
  LoadContextVar       0, 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
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 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [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 (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] = 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 1
  [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] = InterfaceCall target-name '_simpleInstanceOf', arg-desc CP#29
  [31] = Reserved
  [32] = String 'error '
  [33] = String ', captured stack trace: '
  [34] = StaticICData target 'dart:core::_StringBase::_interpolate', arg-desc CP#4
  [35] = StaticICData target 'dart:core::print', arg-desc CP#4
  [36] = EndClosureFunctionScope
}
Closure #lib::testTryCatch3::foo () -> void
ClosureBytecode {
  EntryFixed           1, 6
  CheckStack           0
  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          exception, r2
  MoveSpecial          stackTrace, r3
  Push                 r2
  PopLocal             r4
  Push                 r0
  LoadContextVar       0, 0
  PushConstant         CP#7
  IndirectStaticCall   1, CP#4
  Drop1
  Push                 r0
  PushInt              3
  StoreContextVar      0, 1
  Jump                 L1
L1:
  PushNull
  ReturnTOS

}

Closure #lib::testTryCatch3::bar () -> void
ClosureBytecode {
  EntryFixed           1, 6
  CheckStack           0
  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          exception, r2
  MoveSpecial          stackTrace, r3
  Push                 r2
  PushConstant         CP#28
  InterfaceCall        2, CP#30
  JumpIfFalse          L2
  Push                 r2
  PopLocal             r4
  PushNull
  PushInt              4
  CreateArrayTOS
  StoreLocal           r5
  Push                 r5
  PushInt              0
  PushConstant         CP#32
  StoreIndexedTOS
  Push                 r5
  PushInt              1
  Push                 r4
  StoreIndexedTOS
  Push                 r5
  PushInt              2
  PushConstant         CP#33
  StoreIndexedTOS
  Push                 r5
  PushInt              3
  Push                 r0
  LoadContextVar       0, 2
  StoreIndexedTOS
  PushConstant         CP#34
  IndirectStaticCall   1, CP#4
  PushConstant         CP#35
  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           0
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          exception, r2
  MoveSpecial          stackTrace, r3
  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
L2:
  Jump                 L3
Try #2 end:
Try #2 handler:
  SetFrame             8
  MoveSpecial          exception, r5
  MoveSpecial          stackTrace, r6
  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          exception, r0
  MoveSpecial          stackTrace, r1
  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 35, handler 35, 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 23, handler 23, 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           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
  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 9, end 15, handler 15, 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 {
  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#1
  JumpIfTrue           L1
  Push                 r2
  PushInt              2
  InterfaceCall        2, CP#1
  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      0, 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
  DynamicCall          1, CP#24
  Drop1
  Jump                 L4
Try #1 end:
Try #1 handler:
  SetFrame             9
  Push                 r5
  PopLocal             r0
  MoveSpecial          exception, r5
  MoveSpecial          stackTrace, r6
  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                 L5
Try #0 end:
Try #0 handler:
  SetFrame             9
  Push                 r3
  PopLocal             r0
  MoveSpecial          exception, r3
  MoveSpecial          stackTrace, r4
  PushConstant         CP#31
  PushConstant         CP#32
  IndirectStaticCall   1, CP#4
  Drop1
  Push                 r3
  Push                 r4
  Throw                1
L5:
  Push                 r3
  PopLocal             r0
  PushConstant         CP#31
  PushConstant         CP#33
  IndirectStaticCall   1, CP#4
  Drop1
  Jump                 L2
L2:
  PushConstant         CP#34
  PushConstant         CP#35
  IndirectStaticCall   1, CP#4
  Drop1
  Jump                 L3
L3:
  PushNull
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 21, end 75, handler 75, needs-stack-trace, types [CP#25]
  try-index 1, outer 0, start 30, end 56, handler 56, needs-stack-trace, types [CP#25]
}
ConstantPool {
  [0] = ArgDesc num-args 2, num-type-args 0, names []
  [1] = InterfaceCall target-name '==', arg-desc CP#0
  [2] = Reserved
  [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 0
  [9] = InstanceField dart:core::_Closure::_context (field)
  [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 (field)
  [16] = Reserved
  [17] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [18] = Reserved
  [19] = EmptyTypeArguments
  [20] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [21] = Reserved
  [22] = InstanceField dart:core::_Closure::_function (field)
  [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] = String 'after try 1'
  [30] = StaticICData target 'dart:core::print', arg-desc CP#4
  [31] = String 'finally 2'
  [32] = StaticICData target 'dart:core::print', arg-desc CP#4
  [33] = StaticICData target 'dart:core::print', arg-desc CP#4
  [34] = String 'case 2'
  [35] = StaticICData target 'dart:core::print', arg-desc CP#4
}
Closure #lib::testTryFinally2::foo () -> void
ClosureBytecode {
  EntryFixed           1, 2
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#9
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 0
  PushConstant         CP#11
  IndirectStaticCall   1, CP#4
  Drop1
  Push                 r0
  LoadContextVar       0, 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           0
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  PushInt              11
  StoreContextVar      0, 0
  PushNull
  PopLocal             r2
  Push                 r0
  PopLocal             r3
Try #0 start:
  Allocate             CP#16
  StoreLocal           r5
  Push                 r5
  PushNull
  StoreFieldTOS        CP#17
  Push                 r5
  PushNull
  StoreFieldTOS        CP#19
  Push                 r5
  PushConstant         CP#21
  StoreFieldTOS        CP#22
  Push                 r5
  PushConstant         CP#0
  StoreFieldTOS        CP#24
  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
  PushConstant         CP#26
  IndirectStaticCall   1, CP#3
  Drop1
  Push                 r2
  DynamicCall          1, CP#27
  Drop1
  Push                 r3
  Push                 r4
  Throw                1
L1:
  Push                 r3
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 0
  PushConstant         CP#28
  IndirectStaticCall   1, CP#3
  Drop1
  Push                 r2
  DynamicCall          1, CP#29
  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 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [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] = EndClosureFunctionScope
  [16] = Class dart:core::_Closure
  [17] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [18] = Reserved
  [19] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [20] = Reserved
  [21] = EmptyTypeArguments
  [22] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [23] = Reserved
  [24] = InstanceField dart:core::_Closure::_function (field)
  [25] = Reserved
  [26] = StaticICData target 'dart:core::print', arg-desc CP#3
  [27] = ICData dynamic target-name 'call', arg-desc CP#3
  [28] = StaticICData target 'dart:core::print', arg-desc CP#3
  [29] = ICData dynamic target-name 'call', arg-desc CP#3
}
Closure #lib::testTryFinally3::<anonymous closure> () -> dart:core::int
ClosureBytecode {
  EntryFixed           1, 6
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 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
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#8
  PushConstant         CP#9
  IndirectStaticCall   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
  PushConstant         CP#10
  IndirectStaticCall   1, CP#3
  Drop1
  Push                 r4
  Push                 r5
  Throw                1
L2:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 0
  PushConstant         CP#11
  IndirectStaticCall   1, CP#3
  Drop1
  PushInt              43
  ReturnTOS
L1:
  Push                 r2
  PopLocal             r0
  Push                 r0
  PopLocal             r4
Try #2 start:
  PushConstant         CP#8
  PushConstant         CP#12
  IndirectStaticCall   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
  PushConstant         CP#13
  IndirectStaticCall   1, CP#3
  Drop1
  Push                 r4
  Push                 r5
  Throw                1
L3:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 0
  PushConstant         CP#14
  IndirectStaticCall   1, CP#3
  Drop1
  PushInt              43
  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           0
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          exception, r2
  MoveSpecial          stackTrace, r3
  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          exception, r0
  MoveSpecial          stackTrace, r1
  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           0
  PushNull
  ReturnTOS
}
ConstantPool {
}
]static method main() → dynamic {}
