blob: c0fd1bbb5b807789036162d544c10ab8f99fac5f [file] [log] [blame]
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 {}