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:
  MoveSpecial          r0, exception
  MoveSpecial          r1, stackTrace
  Push                 r0
  PopLocal             r2
  PushConstant         CP#4
  PushConstant         CP#5
  CreateArrayTOS
  StoreLocal           r3
  Push                 r3
  PushConstant         CP#6
  PushConstant         CP#7
  StoreIndexedTOS
  Push                 r3
  PushConstant         CP#8
  Push                 r2
  StoreIndexedTOS
  PushConstant         CP#9
  IndirectStaticCall   1, CP#1
  PushConstant         CP#10
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
L1:
  PushConstant         CP#4
  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] = Null
  [5] = Int 2
  [6] = Int 0
  [7] = String 'caught '
  [8] = Int 1
  [9] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#1
  [10] = 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:
  MoveSpecial          r0, exception
  MoveSpecial          r1, stackTrace
  Push                 r0
  PushConstant         CP#4
  PushConstant         CP#4
  PushConstant         CP#3
  InstanceCall1        4, CP#6
  PushConstant         CP#7
  IfNeStrictTOS
  Jump                 L2
  PushConstant         CP#8
  PushConstant         CP#9
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
L2:
  Push                 r0
  PushConstant         CP#4
  PushConstant         CP#4
  PushConstant         CP#10
  InstanceCall1        4, CP#11
  PushConstant         CP#7
  IfNeStrictTOS
  Jump                 L3
  Push                 r0
  PopLocal             r2
  PushConstant         CP#4
  PushConstant         CP#12
  CreateArrayTOS
  StoreLocal           r3
  Push                 r3
  PushConstant         CP#13
  PushConstant         CP#14
  StoreIndexedTOS
  Push                 r3
  PushConstant         CP#15
  Push                 r2
  StoreIndexedTOS
  PushConstant         CP#16
  IndirectStaticCall   1, CP#1
  PushConstant         CP#17
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
L3:
  Push                 r0
  PushConstant         CP#4
  PushConstant         CP#4
  PushConstant         CP#18
  InstanceCall1        4, CP#19
  PushConstant         CP#7
  IfNeStrictTOS
  Jump                 L4
  Push                 r0
  PopLocal             r2
  Push                 r1
  PopLocal             r3
  PushConstant         CP#4
  PushConstant         CP#20
  CreateArrayTOS
  StoreLocal           r4
  Push                 r4
  PushConstant         CP#13
  PushConstant         CP#21
  StoreIndexedTOS
  Push                 r4
  PushConstant         CP#15
  Push                 r2
  StoreIndexedTOS
  Push                 r4
  PushConstant         CP#12
  PushConstant         CP#22
  StoreIndexedTOS
  Push                 r4
  PushConstant         CP#23
  Push                 r3
  StoreIndexedTOS
  PushConstant         CP#24
  IndirectStaticCall   1, CP#1
  PushConstant         CP#25
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
L4:
  Push                 r0
  PopLocal             r2
  Push                 r1
  PopLocal             r3
  PushConstant         CP#4
  PushConstant         CP#20
  CreateArrayTOS
  StoreLocal           r4
  Push                 r4
  PushConstant         CP#13
  PushConstant         CP#27
  StoreIndexedTOS
  Push                 r4
  PushConstant         CP#15
  Push                 r2
  StoreIndexedTOS
  Push                 r4
  PushConstant         CP#12
  PushConstant         CP#22
  StoreIndexedTOS
  Push                 r4
  PushConstant         CP#23
  Push                 r3
  StoreIndexedTOS
  PushConstant         CP#28
  IndirectStaticCall   1, CP#1
  PushConstant         CP#29
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L1
L1:
  PushConstant         CP#4
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 2, end 7, handler 7, needs-stack-trace, types [CP#3, CP#10, CP#18, CP#26]
}
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] = Null
  [5] = ArgDesc num-args 4, num-type-args 0, names []
  [6] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#5
  [7] = Bool true
  [8] = String 'caught type error'
  [9] = StaticICData target 'dart.core::print', arg-desc CP#1
  [10] = Type dart.core::AssertionError
  [11] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#5
  [12] = Int 2
  [13] = Int 0
  [14] = String 'caught assertion error '
  [15] = Int 1
  [16] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#1
  [17] = StaticICData target 'dart.core::print', arg-desc CP#1
  [18] = Type dart.core::Error
  [19] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#5
  [20] = Int 4
  [21] = String 'caught error '
  [22] = String ' '
  [23] = Int 3
  [24] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#1
  [25] = StaticICData target 'dart.core::print', arg-desc CP#1
  [26] = Type dynamic
  [27] = String 'caught something '
  [28] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#1
  [29] = 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      1
  StoreLocal           r1
  Push                 r1
  Push                 r0
  StoreContextParent
  PopLocal             r0
  Push                 r0
  PushConstant         CP#0
  StoreContextVar      0
  Push                 r0
  PopLocal             r2
Try #0 start:
  AllocateContext      1
  StoreLocal           r1
  Push                 r1
  Push                 r0
  StoreContextParent
  PopLocal             r0
  Push                 r0
  PushConstant         CP#1
  StoreContextVar      0
  Allocate             CP#13
  StoreLocal           r5
  Push                 r5
  PushConstant         CP#11
  StoreFieldTOS        CP#14
  Push                 r5
  PushConstant         CP#11
  StoreFieldTOS        CP#16
  Push                 r5
  PushConstant         CP#2
  StoreFieldTOS        CP#18
  Push                 r5
  Push                 r0
  StoreFieldTOS        CP#3
  PopLocal             r4
  Push                 r4
  InstanceCall1        1, CP#20
  Drop1
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#21
  IndirectStaticCall   1, CP#6
  Drop1
  Push                 r0
  LoadContextParent
  PopLocal             r0
  Jump                 L1
Try #0 end:
Try #0 handler:
  Push                 r2
  PopLocal             r0
  MoveSpecial          r2, exception
  MoveSpecial          r3, stackTrace
  AllocateContext      1
  StoreLocal           r1
  Push                 r1
  Push                 r0
  StoreContextParent
  PopLocal             r0
  Push                 r2
  PopLocal             r4
  Push                 r0
  Push                 r3
  StoreContextVar      0
  PushConstant         CP#11
  PushConstant         CP#22
  CreateArrayTOS
  StoreLocal           r5
  Push                 r5
  PushConstant         CP#23
  PushConstant         CP#24
  StoreIndexedTOS
  Push                 r5
  PushConstant         CP#0
  Push                 r4
  StoreIndexedTOS
  Push                 r5
  PushConstant         CP#1
  PushConstant         CP#25
  StoreIndexedTOS
  Push                 r5
  PushConstant         CP#10
  Push                 r0
  LoadContextVar       0
  StoreIndexedTOS
  PushConstant         CP#26
  IndirectStaticCall   1, CP#6
  PushConstant         CP#27
  IndirectStaticCall   1, CP#6
  Drop1
  Allocate             CP#13
  StoreLocal           r5
  Push                 r5
  PushConstant         CP#11
  StoreFieldTOS        CP#14
  Push                 r5
  PushConstant         CP#11
  StoreFieldTOS        CP#16
  Push                 r5
  PushConstant         CP#28
  StoreFieldTOS        CP#18
  Push                 r5
  Push                 r0
  StoreFieldTOS        CP#3
  PopLocal             r6
  Push                 r6
  ReturnTOS
  Push                 r0
  LoadContextParent
  PopLocal             r0
  Jump                 L1
L1:
  Push                 r0
  LoadContextParent
  PopLocal             r0
  PushConstant         CP#11
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 13, end 49, handler 49, needs-stack-trace, types [CP#8]
}
ConstantPool {
  [0] = Int 1
  [1] = Int 2
  [2] = ClosureFunction foo () → void;
  [3] = InstanceField dart.core::_Closure::_context
  [4] = Reserved
  [5] = String 'danger foo'
  [6] = ArgDesc num-args 1, num-type-args 0, names []
  [7] = StaticICData target 'dart.core::print', arg-desc CP#6
  [8] = Type dynamic
  [9] = StaticICData target 'dart.core::print', arg-desc CP#6
  [10] = Int 3
  [11] = Null
  [12] = EndClosureFunctionScope
  [13] = Class dart.core::_Closure
  [14] = InstanceField dart.core::_Closure::_instantiator_type_arguments
  [15] = Reserved
  [16] = InstanceField dart.core::_Closure::_function_type_arguments
  [17] = Reserved
  [18] = InstanceField dart.core::_Closure::_function
  [19] = Reserved
  [20] = ICData target-name 'call', arg-desc CP#6
  [21] = StaticICData target 'dart.core::print', arg-desc CP#6
  [22] = Int 4
  [23] = Int 0
  [24] = String 'caught '
  [25] = String ' '
  [26] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#6
  [27] = StaticICData target 'dart.core::print', arg-desc CP#6
  [28] = ClosureFunction bar () → void;
  [29] = String 'danger bar'
  [30] = StaticICData target 'dart.core::print', arg-desc CP#6
  [31] = Type dart.core::Error
  [32] = ArgDesc num-args 4, num-type-args 0, names []
  [33] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#32
  [34] = Bool true
  [35] = String 'error '
  [36] = String ', captured stack trace: '
  [37] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#6
  [38] = StaticICData target 'dart.core::print', arg-desc CP#6
  [39] = EndClosureFunctionScope
}
Closure CP#2 {
  Entry                6
  CheckStack
  Push                 FP[-5]
  LoadFieldTOS         CP#3
  PopLocal             r0
  Push                 r0
  PopLocal             r2
Try #0 start:
  PushConstant         CP#5
  PushConstant         CP#7
  IndirectStaticCall   1, CP#6
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  Push                 r2
  PopLocal             r0
  MoveSpecial          r2, exception
  MoveSpecial          r3, stackTrace
  Push                 r2
  PopLocal             r4
  Push                 r0
  LoadContextParent
  LoadContextVar       0
  PushConstant         CP#9
  IndirectStaticCall   1, CP#6
  Drop1
  Push                 r0
  PushConstant         CP#10
  StoreContextVar      0
  Jump                 L1
L1:
  PushConstant         CP#11
  ReturnTOS

}

Closure CP#28 {
  Entry                6
  CheckStack
  Push                 FP[-5]
  LoadFieldTOS         CP#3
  PopLocal             r0
  Push                 r0
  PopLocal             r2
Try #0 start:
  PushConstant         CP#29
  PushConstant         CP#30
  IndirectStaticCall   1, CP#6
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  Push                 r2
  PopLocal             r0
  MoveSpecial          r2, exception
  MoveSpecial          r3, stackTrace
  Push                 r2
  PushConstant         CP#11
  PushConstant         CP#11
  PushConstant         CP#31
  InstanceCall1        4, CP#33
  PushConstant         CP#34
  IfNeStrictTOS
  Jump                 L2
  Push                 r2
  PopLocal             r4
  PushConstant         CP#11
  PushConstant         CP#22
  CreateArrayTOS
  StoreLocal           r5
  Push                 r5
  PushConstant         CP#23
  PushConstant         CP#35
  StoreIndexedTOS
  Push                 r5
  PushConstant         CP#0
  Push                 r4
  StoreIndexedTOS
  Push                 r5
  PushConstant         CP#1
  PushConstant         CP#36
  StoreIndexedTOS
  Push                 r5
  PushConstant         CP#10
  Push                 r0
  LoadContextVar       0
  StoreIndexedTOS
  PushConstant         CP#37
  IndirectStaticCall   1, CP#6
  PushConstant         CP#38
  IndirectStaticCall   1, CP#6
  Drop1
  Jump                 L1
L2:
  Push                 r2
  Push                 r3
  Throw                1
L1:
  PushConstant         CP#11
  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;
      }
    }
    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:
  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
  PushConstant         CP#6
  IfNeStrictTOS
  Jump                 L2
  Push                 r2
  Push                 r3
  Throw                1
  Drop1
L2:
  Jump                 L3
Try #2 end:
Try #2 handler:
  MoveSpecial          r5, exception
  MoveSpecial          r6, stackTrace
  Push                 r5
  PopLocal             r7
  PushConstant         CP#7
  PushConstant         CP#8
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L3
L3:
  Jump                 L1
L1:
  Jump                 L4
Try #0 end:
Try #0 handler:
  MoveSpecial          r0, exception
  MoveSpecial          r1, stackTrace
  Push                 r0
  PopLocal             r2
  Push                 r1
  PopLocal             r3
  PushConstant         CP#9
  PushConstant         CP#10
  IndirectStaticCall   1, CP#1
  Drop1
  Push                 r3
  PushConstant         CP#11
  IndirectStaticCall   1, CP#1
  Drop1
  Jump                 L4
L4:
  PushConstant         CP#12
  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 11, end 25, handler 25, 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] = Bool true
  [7] = String 'try 1 > catch 2 > catch 3'
  [8] = StaticICData target 'dart.core::print', arg-desc CP#1
  [9] = String 'catch 1'
  [10] = StaticICData target 'dart.core::print', arg-desc CP#1
  [11] = StaticICData target 'dart.core::print', arg-desc CP#1
  [12] = Null
}
]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
  PushConstant         CP#0
  PopLocal             r0
L5:
  CheckStack
  Push                 r0
  PushConstant         CP#1
  InstanceCall1        2, CP#3
  AssertBoolean        0
  PushConstant         CP#4
  IfNeStrictTOS
  Jump                 L1
Try #0 start:
  Push                 r0
  PushConstant         CP#5
  InstanceCall1        2, CP#6
  AssertBoolean        0
  PushConstant         CP#4
  IfNeStrictTOS
  Jump                 L2
  Jump                 L3
L2:
  Jump                 L4
Try #0 end:
Try #0 handler:
  MoveSpecial          r1, exception
  MoveSpecial          r2, stackTrace
  Push                 r0
  PushConstant         CP#9
  IndirectStaticCall   1, CP#8
  Drop1
  Push                 r1
  Push                 r2
  Throw                1
L3:
  Push                 r0
  PushConstant         CP#10
  IndirectStaticCall   1, CP#8
  Drop1
  Jump                 L1
L4:
  Push                 r0
  PushConstant         CP#11
  IndirectStaticCall   1, CP#8
  Drop1
  Push                 r0
  PushConstant         CP#12
  InstanceCall1        2, CP#13
  StoreLocal           r0
  Drop1
  Jump                 L5
L1:
  PushConstant         CP#14
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 12, end 21, handler 21, needs-stack-trace, types [CP#7]
}
ConstantPool {
  [0] = Int 0
  [1] = Int 10
  [2] = ArgDesc num-args 2, num-type-args 0, names []
  [3] = ICData target-name '<', arg-desc CP#2
  [4] = Bool true
  [5] = Int 5
  [6] = ICData target-name '>', arg-desc CP#2
  [7] = Type dynamic
  [8] = ArgDesc num-args 1, num-type-args 0, names []
  [9] = StaticICData target 'dart.core::print', arg-desc CP#8
  [10] = StaticICData target 'dart.core::print', arg-desc CP#8
  [11] = StaticICData target 'dart.core::print', arg-desc CP#8
  [12] = Int 1
  [13] = ICData target-name '+', arg-desc CP#2
  [14] = Null
}
]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      1
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0
  Push                 r0
  LoadContextVar       0
  PopLocal             r2
  Push                 r2
  PushConstant         CP#1
  InstanceCall1        2, CP#2
  PushConstant         CP#3
  IfEqStrictTOS
  Jump                 L1
  Push                 r2
  PushConstant         CP#4
  InstanceCall1        2, CP#5
  PushConstant         CP#3
  IfEqStrictTOS
  Jump                 L2
  Jump                 L3
L1:
  Push                 r0
  PopLocal             r3
Try #0 start:
  AllocateContext      1
  StoreLocal           r1
  Push                 r1
  Push                 r0
  StoreContextParent
  PopLocal             r0
  PushConstant         CP#6
  PushConstant         CP#8
  IndirectStaticCall   1, CP#7
  Drop1
  Push                 r0
  PushConstant         CP#9
  StoreContextVar      0
  Push                 r0
  PopLocal             r5
Try #1 start:
  PushConstant         CP#10
  PushConstant         CP#11
  IndirectStaticCall   1, CP#7
  Drop1
  Allocate             CP#19
  StoreLocal           r8
  Push                 r8
  PushConstant         CP#17
  StoreFieldTOS        CP#20
  Push                 r8
  PushConstant         CP#17
  StoreFieldTOS        CP#22
  Push                 r8
  PushConstant         CP#12
  StoreFieldTOS        CP#24
  Push                 r8
  Push                 r0
  StoreFieldTOS        CP#13
  PopLocal             r7
  Push                 r7
  InstanceCall1        1, CP#26
  Drop1
  Jump                 L4
  Jump                 L5
Try #1 end:
Try #1 handler:
  Push                 r5
  PopLocal             r0
  MoveSpecial          r5, exception
  MoveSpecial          r6, stackTrace
  PushConstant         CP#28
  PushConstant         CP#29
  IndirectStaticCall   1, CP#7
  Drop1
  Push                 r5
  Push                 r6
  Throw                1
L4:
  Push                 r5
  PopLocal             r0
  PushConstant         CP#28
  PushConstant         CP#30
  IndirectStaticCall   1, CP#7
  Drop1
  Jump                 L6
L5:
  Push                 r5
  PopLocal             r0
  PushConstant         CP#28
  PushConstant         CP#31
  IndirectStaticCall   1, CP#7
  Drop1
  PushConstant         CP#32
  PushConstant         CP#33
  IndirectStaticCall   1, CP#7
  Drop1
  Push                 r0
  LoadContextParent
  PopLocal             r0
  Jump                 L7
Try #0 end:
Try #0 handler:
  Push                 r3
  PopLocal             r0
  MoveSpecial          r3, exception
  MoveSpecial          r4, stackTrace
  PushConstant         CP#34
  PushConstant         CP#35
  IndirectStaticCall   1, CP#7
  Drop1
  Push                 r3
  Push                 r4
  Throw                1
L6:
  Push                 r3
  PopLocal             r0
  PushConstant         CP#34
  PushConstant         CP#36
  IndirectStaticCall   1, CP#7
  Drop1
  Jump                 L2
L7:
  Push                 r3
  PopLocal             r0
  PushConstant         CP#34
  PushConstant         CP#37
  IndirectStaticCall   1, CP#7
  Drop1
  Jump                 L3
L2:
  PushConstant         CP#38
  PushConstant         CP#39
  IndirectStaticCall   1, CP#7
  Drop1
  Jump                 L3
L3:
  PushConstant         CP#17
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 25, end 96, handler 96, needs-stack-trace, types [CP#27]
  try-index 1, outer 0, start 40, end 64, handler 64, needs-stack-trace, types [CP#27]
}
ConstantPool {
  [0] = ArgDesc num-args 2, num-type-args 0, names []
  [1] = Int 1
  [2] = ICData target-name '==', arg-desc CP#0
  [3] = Bool true
  [4] = Int 2
  [5] = ICData target-name '==', arg-desc CP#0
  [6] = String 'before try 1'
  [7] = ArgDesc num-args 1, num-type-args 0, names []
  [8] = StaticICData target 'dart.core::print', arg-desc CP#7
  [9] = Int 3
  [10] = String 'try'
  [11] = StaticICData target 'dart.core::print', arg-desc CP#7
  [12] = ClosureFunction foo () → void;
  [13] = InstanceField dart.core::_Closure::_context
  [14] = Reserved
  [15] = StaticICData target 'dart.core::print', arg-desc CP#7
  [16] = StaticICData target 'dart.core::print', arg-desc CP#7
  [17] = Null
  [18] = EndClosureFunctionScope
  [19] = Class dart.core::_Closure
  [20] = InstanceField dart.core::_Closure::_instantiator_type_arguments
  [21] = Reserved
  [22] = InstanceField dart.core::_Closure::_function_type_arguments
  [23] = Reserved
  [24] = InstanceField dart.core::_Closure::_function
  [25] = Reserved
  [26] = ICData target-name 'call', arg-desc CP#7
  [27] = Type dynamic
  [28] = String 'finally 1'
  [29] = StaticICData target 'dart.core::print', arg-desc CP#7
  [30] = StaticICData target 'dart.core::print', arg-desc CP#7
  [31] = StaticICData target 'dart.core::print', arg-desc CP#7
  [32] = String 'after try 1'
  [33] = StaticICData target 'dart.core::print', arg-desc CP#7
  [34] = String 'finally 2'
  [35] = StaticICData target 'dart.core::print', arg-desc CP#7
  [36] = StaticICData target 'dart.core::print', arg-desc CP#7
  [37] = StaticICData target 'dart.core::print', arg-desc CP#7
  [38] = String 'case 2'
  [39] = StaticICData target 'dart.core::print', arg-desc CP#7
}
Closure CP#12 {
  Entry                2
  CheckStack
  Push                 FP[-5]
  LoadFieldTOS         CP#13
  PopLocal             r0
  Push                 r0
  LoadContextParent
  LoadContextVar       0
  PushConstant         CP#15
  IndirectStaticCall   1, CP#7
  Drop1
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#16
  IndirectStaticCall   1, CP#7
  Drop1
  PushConstant         CP#17
  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);
            }
            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
  StoreLocal           r1
  Push                 r1
  Push                 r0
  StoreContextParent
  PopLocal             r0
  Push                 r0
  PushConstant         CP#0
  StoreContextVar      0
  PushConstant         CP#1
  PopLocal             r2
  Push                 r0
  PopLocal             r3
Try #0 start:
  Allocate             CP#26
  StoreLocal           r5
  Push                 r5
  PushConstant         CP#1
  StoreFieldTOS        CP#27
  Push                 r5
  PushConstant         CP#1
  StoreFieldTOS        CP#29
  Push                 r5
  PushConstant         CP#2
  StoreFieldTOS        CP#31
  Push                 r5
  Push                 r0
  StoreFieldTOS        CP#3
  PopLocal             r2
  Jump                 L1
Try #0 end:
Try #0 handler:
  Push                 r3
  PopLocal             r0
  MoveSpecial          r3, exception
  MoveSpecial          r4, stackTrace
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#33
  IndirectStaticCall   1, CP#5
  Drop1
  Push                 r2
  InstanceCall1        1, CP#34
  Drop1
  Push                 r3
  Push                 r4
  Throw                1
L1:
  Push                 r3
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#35
  IndirectStaticCall   1, CP#5
  Drop1
  Push                 r2
  InstanceCall1        1, CP#36
  Drop1
  Push                 r0
  LoadContextParent
  PopLocal             r0
  PushConstant         CP#1
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 15, end 31, handler 31, needs-stack-trace, types [CP#10]
}
ConstantPool {
  [0] = Int 11
  [1] = Null
  [2] = ClosureFunction <anonymous closure> () → dart.core::int;
  [3] = InstanceField dart.core::_Closure::_context
  [4] = Reserved
  [5] = ArgDesc num-args 1, num-type-args 0, names []
  [6] = StaticICData target 'dart.core::print', arg-desc CP#5
  [7] = String 'try 1'
  [8] = StaticICData target 'dart.core::print', arg-desc CP#5
  [9] = Int 42
  [10] = Type dynamic
  [11] = String 'try 2'
  [12] = StaticICData target 'dart.core::print', arg-desc CP#5
  [13] = Int 43
  [14] = StaticICData target 'dart.core::print', arg-desc CP#5
  [15] = StaticICData target 'dart.core::print', arg-desc CP#5
  [16] = StaticICData target 'dart.core::print', arg-desc CP#5
  [17] = StaticICData target 'dart.core::print', arg-desc CP#5
  [18] = StaticICData target 'dart.core::print', arg-desc CP#5
  [19] = StaticICData target 'dart.core::print', arg-desc CP#5
  [20] = StaticICData target 'dart.core::print', arg-desc CP#5
  [21] = StaticICData target 'dart.core::print', arg-desc CP#5
  [22] = StaticICData target 'dart.core::print', arg-desc CP#5
  [23] = StaticICData target 'dart.core::print', arg-desc CP#5
  [24] = StaticICData target 'dart.core::print', arg-desc CP#5
  [25] = EndClosureFunctionScope
  [26] = Class dart.core::_Closure
  [27] = InstanceField dart.core::_Closure::_instantiator_type_arguments
  [28] = Reserved
  [29] = InstanceField dart.core::_Closure::_function_type_arguments
  [30] = Reserved
  [31] = InstanceField dart.core::_Closure::_function
  [32] = Reserved
  [33] = StaticICData target 'dart.core::print', arg-desc CP#5
  [34] = ICData target-name 'call', arg-desc CP#5
  [35] = StaticICData target 'dart.core::print', arg-desc CP#5
  [36] = ICData target-name 'call', arg-desc CP#5
}
Closure CP#2 {
  Entry                6
  CheckStack
  Push                 FP[-5]
  LoadFieldTOS         CP#3
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#6
  IndirectStaticCall   1, CP#5
  Drop1
  Push                 r0
  PopLocal             r2
Try #0 start:
  PushConstant         CP#7
  PushConstant         CP#8
  IndirectStaticCall   1, CP#5
  Drop1
  PushConstant         CP#9
  Jump                 L1
  Jump                 L2
Try #0 end:
Try #0 handler:
  Push                 r2
  PopLocal             r0
  MoveSpecial          r2, exception
  MoveSpecial          r3, stackTrace
  Push                 r0
  PopLocal             r4
Try #1 start:
  PushConstant         CP#11
  PushConstant         CP#12
  IndirectStaticCall   1, CP#5
  Drop1
  PushConstant         CP#13
  Jump                 L3
  Jump                 L4
Try #1 end:
Try #1 handler:
  Push                 r4
  PopLocal             r0
  MoveSpecial          r4, exception
  MoveSpecial          r5, stackTrace
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#14
  IndirectStaticCall   1, CP#5
  Drop1
  Push                 r4
  Push                 r5
  Throw                1
L3:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#15
  IndirectStaticCall   1, CP#5
  Drop1
  ReturnTOS
L4:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#16
  IndirectStaticCall   1, CP#5
  Drop1
  Push                 r2
  Push                 r3
  Throw                1
L1:
  Push                 r2
  PopLocal             r0
  Push                 r0
  PopLocal             r4
Try #2 start:
  PushConstant         CP#11
  PushConstant         CP#17
  IndirectStaticCall   1, CP#5
  Drop1
  PushConstant         CP#13
  Jump                 L5
  Jump                 L6
Try #2 end:
Try #2 handler:
  Push                 r4
  PopLocal             r0
  MoveSpecial          r4, exception
  MoveSpecial          r5, stackTrace
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#18
  IndirectStaticCall   1, CP#5
  Drop1
  Push                 r4
  Push                 r5
  Throw                1
L5:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#19
  IndirectStaticCall   1, CP#5
  Drop1
  ReturnTOS
L6:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#20
  IndirectStaticCall   1, CP#5
  Drop1
  ReturnTOS
L2:
  Push                 r2
  PopLocal             r0
  Push                 r0
  PopLocal             r4
Try #3 start:
  PushConstant         CP#11
  PushConstant         CP#21
  IndirectStaticCall   1, CP#5
  Drop1
  PushConstant         CP#13
  Jump                 L7
  Jump                 L8
Try #3 end:
Try #3 handler:
  Push                 r4
  PopLocal             r0
  MoveSpecial          r4, exception
  MoveSpecial          r5, stackTrace
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#22
  IndirectStaticCall   1, CP#5
  Drop1
  Push                 r4
  Push                 r5
  Throw                1
L7:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#23
  IndirectStaticCall   1, CP#5
  Drop1
  ReturnTOS
L8:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#24
  IndirectStaticCall   1, CP#5
  Drop1
  PushConstant         CP#1
  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);
    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:
  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:
  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
  PushConstant         CP#9
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 2, end 17, handler 17, 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
  [9] = Null
}
]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
  PushConstant         CP#0
  ReturnTOS
}
ConstantPool {
  [0] = Null
}
]static method main() → dynamic {}
