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
  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:
  SetFrame             5
  MoveSpecial          r0, exception
  MoveSpecial          r1, stackTrace
  Push                 r0
  PushConstant         CP#4
  PushConstant         CP#4
  PushConstant         CP#3
  InstanceCall         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
  InstanceCall         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
  InstanceCall         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      3
  PopLocal             r0
  Push                 r0
  PushConstant         CP#0
  StoreContextVar      0
  Push                 r0
  PopLocal             r2
Try #0 start:
  Push                 r0
  PushConstant         CP#1
  StoreContextVar      1
  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#18
  StoreFieldTOS        CP#19
  Push                 r5
  PushConstant         CP#2
  StoreFieldTOS        CP#21
  Push                 r5
  Push                 r0
  StoreFieldTOS        CP#3
  PopLocal             r4
  Push                 r4
  InstanceCall         1, CP#23
  Drop1
  Push                 r0
  LoadContextVar       1
  PushConstant         CP#24
  IndirectStaticCall   1, CP#6
  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
  PushConstant         CP#11
  PushConstant         CP#25
  CreateArrayTOS
  StoreLocal           r5
  Push                 r5
  PushConstant         CP#26
  PushConstant         CP#27
  StoreIndexedTOS
  Push                 r5
  PushConstant         CP#0
  Push                 r4
  StoreIndexedTOS
  Push                 r5
  PushConstant         CP#1
  PushConstant         CP#28
  StoreIndexedTOS
  Push                 r5
  PushConstant         CP#10
  Push                 r0
  LoadContextVar       2
  StoreIndexedTOS
  PushConstant         CP#29
  IndirectStaticCall   1, CP#6
  PushConstant         CP#30
  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#18
  StoreFieldTOS        CP#19
  Push                 r5
  PushConstant         CP#31
  StoreFieldTOS        CP#21
  Push                 r5
  Push                 r0
  StoreFieldTOS        CP#3
  PopLocal             r6
  Push                 r6
  ReturnTOS
  Jump                 L1
L1:
  Push                 r0
  LoadContextParent
  PopLocal             r0
  PushConstant         CP#11
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 9, end 39, handler 39, 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] = EmptyTypeArguments
  [19] = InstanceField dart.core::_Closure::_delayed_type_arguments
  [20] = Reserved
  [21] = InstanceField dart.core::_Closure::_function
  [22] = Reserved
  [23] = ICData dynamic target-name 'call', arg-desc CP#6
  [24] = StaticICData target 'dart.core::print', arg-desc CP#6
  [25] = Int 4
  [26] = Int 0
  [27] = String 'caught '
  [28] = String ' '
  [29] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#6
  [30] = StaticICData target 'dart.core::print', arg-desc CP#6
  [31] = ClosureFunction bar () → void;
  [32] = String 'danger bar'
  [33] = StaticICData target 'dart.core::print', arg-desc CP#6
  [34] = Type dart.core::Error
  [35] = ArgDesc num-args 4, num-type-args 0, names []
  [36] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#35
  [37] = Bool true
  [38] = String 'error '
  [39] = String ', captured stack trace: '
  [40] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#6
  [41] = StaticICData target 'dart.core::print', arg-desc CP#6
  [42] = EndClosureFunctionScope
}
Closure CP#2 {
  EntryFixed           1, 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:
  SetFrame             6
  Push                 r2
  PopLocal             r0
  MoveSpecial          r2, exception
  MoveSpecial          r3, stackTrace
  Push                 r2
  PopLocal             r4
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#9
  IndirectStaticCall   1, CP#6
  Drop1
  Push                 r0
  PushConstant         CP#10
  StoreContextVar      1
  Jump                 L1
L1:
  PushConstant         CP#11
  ReturnTOS

}

Closure CP#31 {
  EntryFixed           1, 6
  CheckStack
  Push                 FP[-5]
  LoadFieldTOS         CP#3
  PopLocal             r0
  Push                 r0
  PopLocal             r2
Try #0 start:
  PushConstant         CP#32
  PushConstant         CP#33
  IndirectStaticCall   1, CP#6
  Drop1
  Jump                 L1
Try #0 end:
Try #0 handler:
  SetFrame             6
  Push                 r2
  PopLocal             r0
  MoveSpecial          r2, exception
  MoveSpecial          r3, stackTrace
  Push                 r2
  PushConstant         CP#11
  PushConstant         CP#11
  PushConstant         CP#34
  InstanceCall         4, CP#36
  PushConstant         CP#37
  IfNeStrictTOS
  Jump                 L2
  Push                 r2
  PopLocal             r4
  PushConstant         CP#11
  PushConstant         CP#25
  CreateArrayTOS
  StoreLocal           r5
  Push                 r5
  PushConstant         CP#26
  PushConstant         CP#38
  StoreIndexedTOS
  Push                 r5
  PushConstant         CP#0
  Push                 r4
  StoreIndexedTOS
  Push                 r5
  PushConstant         CP#1
  PushConstant         CP#39
  StoreIndexedTOS
  Push                 r5
  PushConstant         CP#10
  Push                 r0
  LoadContextVar       2
  StoreIndexedTOS
  PushConstant         CP#40
  IndirectStaticCall   1, CP#6
  PushConstant         CP#41
  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;
      }
    }
    [@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
  PushConstant         CP#6
  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#7
  PushConstant         CP#8
  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#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 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] = 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
  InstanceCall         2, CP#3
  AssertBoolean        0
  PushConstant         CP#4
  IfNeStrictTOS
  Jump                 L1
Try #0 start:
  Push                 r0
  PushConstant         CP#5
  InstanceCall         2, CP#6
  AssertBoolean        0
  PushConstant         CP#4
  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#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
  InstanceCall         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      2
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0
  Push                 r0
  LoadContextVar       0
  PopLocal             r2
  Push                 r2
  PushConstant         CP#1
  InstanceCall         2, CP#2
  PushConstant         CP#3
  IfEqStrictTOS
  Jump                 L1
  Push                 r2
  PushConstant         CP#4
  InstanceCall         2, CP#5
  PushConstant         CP#3
  IfEqStrictTOS
  Jump                 L2
  Jump                 L3
L1:
  Push                 r0
  PopLocal             r3
Try #0 start:
  PushConstant         CP#6
  PushConstant         CP#8
  IndirectStaticCall   1, CP#7
  Drop1
  Push                 r0
  PushConstant         CP#9
  StoreContextVar      1
  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#24
  StoreFieldTOS        CP#25
  Push                 r8
  PushConstant         CP#12
  StoreFieldTOS        CP#27
  Push                 r8
  Push                 r0
  StoreFieldTOS        CP#13
  PopLocal             r7
  Push                 r7
  InstanceCall         1, CP#29
  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#31
  PushConstant         CP#32
  IndirectStaticCall   1, CP#7
  Drop1
  Push                 r5
  Push                 r6
  Throw                1
L4:
  Push                 r5
  PopLocal             r0
  PushConstant         CP#31
  PushConstant         CP#33
  IndirectStaticCall   1, CP#7
  Drop1
  Jump                 L6
L5:
  Push                 r5
  PopLocal             r0
  PushConstant         CP#31
  PushConstant         CP#34
  IndirectStaticCall   1, CP#7
  Drop1
  PushConstant         CP#35
  PushConstant         CP#36
  IndirectStaticCall   1, CP#7
  Drop1
  Jump                 L7
Try #0 end:
Try #0 handler:
  SetFrame             9
  Push                 r3
  PopLocal             r0
  MoveSpecial          r3, exception
  MoveSpecial          r4, stackTrace
  PushConstant         CP#37
  PushConstant         CP#38
  IndirectStaticCall   1, CP#7
  Drop1
  Push                 r3
  Push                 r4
  Throw                1
L6:
  Push                 r3
  PopLocal             r0
  PushConstant         CP#37
  PushConstant         CP#39
  IndirectStaticCall   1, CP#7
  Drop1
  Jump                 L2
L7:
  Push                 r3
  PopLocal             r0
  PushConstant         CP#37
  PushConstant         CP#40
  IndirectStaticCall   1, CP#7
  Drop1
  Jump                 L3
L2:
  PushConstant         CP#41
  PushConstant         CP#42
  IndirectStaticCall   1, CP#7
  Drop1
  Jump                 L3
L3:
  PushConstant         CP#17
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 25, end 91, handler 91, needs-stack-trace, types [CP#30]
  try-index 1, outer 0, start 34, end 61, handler 61, needs-stack-trace, types [CP#30]
}
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] = EmptyTypeArguments
  [25] = InstanceField dart.core::_Closure::_delayed_type_arguments
  [26] = Reserved
  [27] = InstanceField dart.core::_Closure::_function
  [28] = Reserved
  [29] = ICData dynamic target-name 'call', arg-desc CP#7
  [30] = Type dynamic
  [31] = String 'finally 1'
  [32] = StaticICData target 'dart.core::print', arg-desc CP#7
  [33] = StaticICData target 'dart.core::print', arg-desc CP#7
  [34] = StaticICData target 'dart.core::print', arg-desc CP#7
  [35] = String 'after try 1'
  [36] = StaticICData target 'dart.core::print', arg-desc CP#7
  [37] = String 'finally 2'
  [38] = StaticICData target 'dart.core::print', arg-desc CP#7
  [39] = StaticICData target 'dart.core::print', arg-desc CP#7
  [40] = StaticICData target 'dart.core::print', arg-desc CP#7
  [41] = String 'case 2'
  [42] = StaticICData target 'dart.core::print', arg-desc CP#7
}
Closure CP#12 {
  EntryFixed           1, 2
  CheckStack
  Push                 FP[-5]
  LoadFieldTOS         CP#13
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#15
  IndirectStaticCall   1, CP#7
  Drop1
  Push                 r0
  LoadContextVar       1
  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);
            }
            [@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
  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#31
  StoreFieldTOS        CP#32
  Push                 r5
  PushConstant         CP#2
  StoreFieldTOS        CP#34
  Push                 r5
  Push                 r0
  StoreFieldTOS        CP#3
  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#36
  IndirectStaticCall   1, CP#5
  Drop1
  Push                 r2
  InstanceCall         1, CP#37
  Drop1
  Push                 r3
  Push                 r4
  Throw                1
L1:
  Push                 r3
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#38
  IndirectStaticCall   1, CP#5
  Drop1
  Push                 r2
  InstanceCall         1, CP#39
  Drop1
  Push                 r0
  LoadContextParent
  PopLocal             r0
  PushConstant         CP#1
  ReturnTOS
}
ExceptionsTable {
  try-index 0, outer -1, start 11, end 30, handler 30, needs-stack-trace, types [CP#9]
}
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] = Type dynamic
  [10] = String 'try 2'
  [11] = StaticICData target 'dart.core::print', arg-desc CP#5
  [12] = StaticICData target 'dart.core::print', arg-desc CP#5
  [13] = StaticICData target 'dart.core::print', arg-desc CP#5
  [14] = Int 43
  [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] = Int 42
  [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] = EmptyTypeArguments
  [32] = InstanceField dart.core::_Closure::_delayed_type_arguments
  [33] = Reserved
  [34] = InstanceField dart.core::_Closure::_function
  [35] = Reserved
  [36] = StaticICData target 'dart.core::print', arg-desc CP#5
  [37] = ICData dynamic target-name 'call', arg-desc CP#5
  [38] = StaticICData target 'dart.core::print', arg-desc CP#5
  [39] = ICData dynamic target-name 'call', arg-desc CP#5
}
Closure CP#2 {
  EntryFixed           1, 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
  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#10
  PushConstant         CP#11
  IndirectStaticCall   1, CP#5
  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#12
  IndirectStaticCall   1, CP#5
  Drop1
  Push                 r4
  Push                 r5
  Throw                1
L3:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#13
  IndirectStaticCall   1, CP#5
  Drop1
  PushConstant         CP#14
  ReturnTOS
L4:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#15
  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#10
  PushConstant         CP#16
  IndirectStaticCall   1, CP#5
  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#17
  IndirectStaticCall   1, CP#5
  Drop1
  Push                 r4
  Push                 r5
  Throw                1
L5:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#18
  IndirectStaticCall   1, CP#5
  Drop1
  PushConstant         CP#14
  ReturnTOS
L6:
  Push                 r4
  PopLocal             r0
  Push                 r0
  LoadContextVar       0
  PushConstant         CP#19
  IndirectStaticCall   1, CP#5
  Drop1
  PushConstant         CP#20
  ReturnTOS
L2:
  Push                 r2
  PopLocal             r0
  Push                 r0
  PopLocal             r4
Try #3 start:
  PushConstant         CP#10
  PushConstant         CP#21
  IndirectStaticCall   1, CP#5
  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#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
  PushConstant         CP#14
  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);
    [@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
  PushConstant         CP#9
  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
  [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 {}
