blob: e513f1e4ce3994ebf3efec172757a79f6ff58836 [file] [log] [blame]
library #lib;
import self as self;
import "dart:core" as core;
[@vm.bytecode=
Bytecode (version: stable) {
Entry 4
CheckStack
Try #0 start:
PushConstant CP#0
PushConstant CP#2
IndirectStaticCall 1, CP#1
Drop1
Jump L1
Try #0 end:
Try #0 handler:
SetFrame 4
MoveSpecial r0, exception
MoveSpecial r1, stackTrace
Push r0
PopLocal r2
PushNull
PushInt 2
CreateArrayTOS
StoreLocal r3
Push r3
PushInt 0
PushConstant CP#4
StoreIndexedTOS
Push r3
PushInt 1
Push r2
StoreIndexedTOS
PushConstant CP#5
IndirectStaticCall 1, CP#1
PushConstant CP#6
IndirectStaticCall 1, CP#1
Drop1
Jump L1
L1:
PushNull
ReturnTOS
}
ExceptionsTable {
try-index 0, outer -1, start 2, end 7, handler 7, types [CP#3]
}
ConstantPool {
[0] = String 'danger!'
[1] = ArgDesc num-args 1, num-type-args 0, names []
[2] = StaticICData target 'dart.core::print', arg-desc CP#1
[3] = Type dynamic
[4] = String 'caught '
[5] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#1
[6] = StaticICData target 'dart.core::print', arg-desc CP#1
}
]static method testTryCatch1() dynamic {
try {
core::print("danger!");
}
on dynamic catch(final dynamic e) {
core::print("caught ${e}");
}
}
[@vm.bytecode=
Bytecode (version: stable) {
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#3
InstanceCall 2, CP#5
JumpIfFalse L2
PushConstant CP#6
PushConstant CP#7
IndirectStaticCall 1, CP#1
Drop1
Jump L1
L2:
Push r0
PushConstant CP#8
InstanceCall 2, CP#9
JumpIfFalse L3
Push r0
PopLocal r2
PushNull
PushInt 2
CreateArrayTOS
StoreLocal r3
Push r3
PushInt 0
PushConstant CP#10
StoreIndexedTOS
Push r3
PushInt 1
Push r2
StoreIndexedTOS
PushConstant CP#11
IndirectStaticCall 1, CP#1
PushConstant CP#12
IndirectStaticCall 1, CP#1
Drop1
Jump L1
L3:
Push r0
PushConstant CP#13
InstanceCall 2, CP#14
JumpIfFalse L4
Push r0
PopLocal r2
Push r1
PopLocal r3
PushNull
PushInt 4
CreateArrayTOS
StoreLocal r4
Push r4
PushInt 0
PushConstant CP#15
StoreIndexedTOS
Push r4
PushInt 1
Push r2
StoreIndexedTOS
Push r4
PushInt 2
PushConstant CP#16
StoreIndexedTOS
Push r4
PushInt 3
Push r3
StoreIndexedTOS
PushConstant CP#17
IndirectStaticCall 1, CP#1
PushConstant CP#18
IndirectStaticCall 1, CP#1
Drop1
Jump L1
L4:
Push r0
PopLocal r2
Push r1
PopLocal r3
PushNull
PushInt 4
CreateArrayTOS
StoreLocal r4
Push r4
PushInt 0
PushConstant CP#20
StoreIndexedTOS
Push r4
PushInt 1
Push r2
StoreIndexedTOS
Push r4
PushInt 2
PushConstant CP#16
StoreIndexedTOS
Push r4
PushInt 3
Push r3
StoreIndexedTOS
PushConstant CP#21
IndirectStaticCall 1, CP#1
PushConstant CP#22
IndirectStaticCall 1, CP#1
Drop1
Jump L1
L1:
PushNull
ReturnTOS
}
ExceptionsTable {
try-index 0, outer -1, start 2, end 7, handler 7, needs-stack-trace, types [CP#3, CP#8, CP#13, CP#19]
}
ConstantPool {
[0] = String 'danger!'
[1] = ArgDesc num-args 1, num-type-args 0, names []
[2] = StaticICData target 'dart.core::print', arg-desc CP#1
[3] = Type dart.core::TypeError
[4] = ArgDesc num-args 2, num-type-args 0, names []
[5] = ICData target-name 'dart.core::_simpleInstanceOf', arg-desc CP#4
[6] = String 'caught type error'
[7] = StaticICData target 'dart.core::print', arg-desc CP#1
[8] = Type dart.core::AssertionError
[9] = ICData target-name 'dart.core::_simpleInstanceOf', arg-desc CP#4
[10] = String 'caught assertion error '
[11] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#1
[12] = StaticICData target 'dart.core::print', arg-desc CP#1
[13] = Type dart.core::Error
[14] = ICData target-name 'dart.core::_simpleInstanceOf', arg-desc CP#4
[15] = String 'caught error '
[16] = String ' '
[17] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#1
[18] = StaticICData target 'dart.core::print', arg-desc CP#1
[19] = Type dynamic
[20] = String 'caught something '
[21] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#1
[22] = StaticICData target 'dart.core::print', arg-desc CP#1
}
]static method testTryCatch2() dynamic {
try {
core::print("danger!");
}
on core::TypeError catch(no-exception-var) {
core::print("caught type error");
}
on core::AssertionError catch(final core::AssertionError e) {
core::print("caught assertion error ${e}");
}
on core::Error catch(final core::Error e, final core::StackTrace st) {
core::print("caught error ${e} ${st}");
}
on dynamic catch(final dynamic e, final core::StackTrace st) {
core::print("caught something ${e} ${st}");
}
}
[@vm.bytecode=
Bytecode (version: stable) {
Entry 7
CheckStack
AllocateContext 3
PopLocal r0
Push r0
PushInt 1
StoreContextVar 0
Push r0
PopLocal r2
Try #0 start:
Push r0
PushInt 2
StoreContextVar 1
Allocate CP#9
StoreLocal r5
Push r5
PushNull
StoreFieldTOS CP#10
Push r5
PushNull
StoreFieldTOS CP#12
Push r5
PushConstant CP#14
StoreFieldTOS CP#15
Push r5
PushConstant CP#0
StoreFieldTOS CP#17
Push r5
Push r0
StoreFieldTOS CP#1
PopLocal r4
Push r4
InstanceCall 1, CP#19
Drop1
Push r0
LoadContextVar 1
PushConstant CP#20
IndirectStaticCall 1, CP#4
Drop1
Jump L1
Try #0 end:
Try #0 handler:
SetFrame 7
Push r2
PopLocal r0
MoveSpecial r2, exception
MoveSpecial r3, stackTrace
Push r2
PopLocal r4
Push r0
Push r3
StoreContextVar 2
PushNull
PushInt 4
CreateArrayTOS
StoreLocal r5
Push r5
PushInt 0
PushConstant CP#21
StoreIndexedTOS
Push r5
PushInt 1
Push r4
StoreIndexedTOS
Push r5
PushInt 2
PushConstant CP#22
StoreIndexedTOS
Push r5
PushInt 3
Push r0
LoadContextVar 2
StoreIndexedTOS
PushConstant CP#23
IndirectStaticCall 1, CP#4
PushConstant CP#24
IndirectStaticCall 1, CP#4
Drop1
Allocate CP#9
StoreLocal r5
Push r5
PushNull
StoreFieldTOS CP#10
Push r5
PushNull
StoreFieldTOS CP#12
Push r5
PushConstant CP#14
StoreFieldTOS CP#15
Push r5
PushConstant CP#25
StoreFieldTOS CP#17
Push r5
Push r0
StoreFieldTOS CP#1
PopLocal r6
Push r6
ReturnTOS
L1:
Push r0
LoadContextParent
PopLocal r0
PushNull
ReturnTOS
}
ExceptionsTable {
try-index 0, outer -1, start 9, end 39, handler 39, needs-stack-trace, types [CP#6]
}
ConstantPool {
[0] = ClosureFunction foo () void;
[1] = InstanceField dart.core::_Closure::_context
[2] = Reserved
[3] = String 'danger foo'
[4] = ArgDesc num-args 1, num-type-args 0, names []
[5] = StaticICData target 'dart.core::print', arg-desc CP#4
[6] = Type dynamic
[7] = StaticICData target 'dart.core::print', arg-desc CP#4
[8] = EndClosureFunctionScope
[9] = Class dart.core::_Closure
[10] = InstanceField dart.core::_Closure::_instantiator_type_arguments
[11] = Reserved
[12] = InstanceField dart.core::_Closure::_function_type_arguments
[13] = Reserved
[14] = EmptyTypeArguments
[15] = InstanceField dart.core::_Closure::_delayed_type_arguments
[16] = Reserved
[17] = InstanceField dart.core::_Closure::_function
[18] = Reserved
[19] = ICData dynamic target-name 'call', arg-desc CP#4
[20] = StaticICData target 'dart.core::print', arg-desc CP#4
[21] = String 'caught '
[22] = String ' '
[23] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#4
[24] = StaticICData target 'dart.core::print', arg-desc CP#4
[25] = ClosureFunction bar () void;
[26] = String 'danger bar'
[27] = StaticICData target 'dart.core::print', arg-desc CP#4
[28] = Type dart.core::Error
[29] = ArgDesc num-args 2, num-type-args 0, names []
[30] = ICData target-name 'dart.core::_simpleInstanceOf', arg-desc CP#29
[31] = String 'error '
[32] = String ', captured stack trace: '
[33] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#4
[34] = StaticICData target 'dart.core::print', arg-desc CP#4
[35] = EndClosureFunctionScope
}
Closure CP#0 {
EntryFixed 1, 6
CheckStack
Push FP[-5]
LoadFieldTOS CP#1
PopLocal r0
Push r0
PopLocal r2
Try #0 start:
PushConstant CP#3
PushConstant CP#5
IndirectStaticCall 1, CP#4
Drop1
Jump L1
Try #0 end:
Try #0 handler:
SetFrame 6
Push r2
PopLocal r0
MoveSpecial r2, exception
MoveSpecial r3, stackTrace
Push r2
PopLocal r4
Push r0
LoadContextVar 0
PushConstant CP#7
IndirectStaticCall 1, CP#4
Drop1
Push r0
PushInt 3
StoreContextVar 1
Jump L1
L1:
PushNull
ReturnTOS
}
Closure CP#25 {
EntryFixed 1, 6
CheckStack
Push FP[-5]
LoadFieldTOS CP#1
PopLocal r0
Push r0
PopLocal r2
Try #0 start:
PushConstant CP#26
PushConstant CP#27
IndirectStaticCall 1, CP#4
Drop1
Jump L1
Try #0 end:
Try #0 handler:
SetFrame 6
Push r2
PopLocal r0
MoveSpecial r2, exception
MoveSpecial r3, stackTrace
Push r2
PushConstant CP#28
InstanceCall 2, CP#30
JumpIfFalse L2
Push r2
PopLocal r4
PushNull
PushInt 4
CreateArrayTOS
StoreLocal r5
Push r5
PushInt 0
PushConstant CP#31
StoreIndexedTOS
Push r5
PushInt 1
Push r4
StoreIndexedTOS
Push r5
PushInt 2
PushConstant CP#32
StoreIndexedTOS
Push r5
PushInt 3
Push r0
LoadContextVar 2
StoreIndexedTOS
PushConstant CP#33
IndirectStaticCall 1, CP#4
PushConstant CP#34
IndirectStaticCall 1, CP#4
Drop1
Jump L1
L2:
Push r2
Push r3
Throw 1
L1:
PushNull
ReturnTOS
}
]static method testTryCatch3() dynamic {
core::int x = 1;
try {
core::int y = 2;
function foo() void {
try {
core::print("danger foo");
}
on dynamic catch(final dynamic e) {
core::print(x);
y = 3;
}
}
[@vm.call-site-attributes.metadata=receiverType:() void] foo.call();
core::print(y);
}
on dynamic catch(final dynamic e, final core::StackTrace st) {
core::print("caught ${e} ${st}");
function bar() void {
try {
core::print("danger bar");
}
on core::Error catch(final core::Error e) {
core::print("error ${e}, captured stack trace: ${st}");
}
}
return bar;
}
}
[@vm.bytecode=
Bytecode (version: stable) {
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
JumpIfFalse L2
Push r2
Push r3
Throw 1
L2:
Jump L3
Try #2 end:
Try #2 handler:
SetFrame 8
MoveSpecial r5, exception
MoveSpecial r6, stackTrace
Push r5
PopLocal r7
PushConstant CP#6
PushConstant CP#7
IndirectStaticCall 1, CP#1
Drop1
Jump L3
L3:
Jump L1
L1:
Jump L4
Try #0 end:
Try #0 handler:
SetFrame 8
MoveSpecial r0, exception
MoveSpecial r1, stackTrace
Push r0
PopLocal r2
Push r1
PopLocal r3
PushConstant CP#8
PushConstant CP#9
IndirectStaticCall 1, CP#1
Drop1
Push r3
PushConstant CP#10
IndirectStaticCall 1, CP#1
Drop1
Jump L4
L4:
PushNull
ReturnTOS
}
ExceptionsTable {
try-index 0, outer -1, start 2, end 35, handler 35, needs-stack-trace, types [CP#3]
try-index 1, outer 0, start 2, end 7, handler 7, needs-stack-trace, types [CP#3]
try-index 2, outer 0, start 12, end 23, handler 23, types [CP#3]
}
ConstantPool {
[0] = String 'try 1 > try 2'
[1] = ArgDesc num-args 1, num-type-args 0, names []
[2] = StaticICData target 'dart.core::print', arg-desc CP#1
[3] = Type dynamic
[4] = String 'try 1 > catch 2 > try 3'
[5] = StaticICData target 'dart.core::print', arg-desc CP#1
[6] = String 'try 1 > catch 2 > catch 3'
[7] = StaticICData target 'dart.core::print', arg-desc CP#1
[8] = String 'catch 1'
[9] = StaticICData target 'dart.core::print', arg-desc CP#1
[10] = StaticICData target 'dart.core::print', arg-desc CP#1
}
]static method testRethrow(core::bool cond) dynamic {
try {
try {
core::print("try 1 > try 2");
}
on dynamic catch(final dynamic e) {
try {
core::print("try 1 > catch 2 > try 3");
if(cond) {
rethrow;
}
}
on dynamic catch(final dynamic e) {
core::print("try 1 > catch 2 > catch 3");
}
}
}
on dynamic catch(final dynamic e, final core::StackTrace st) {
core::print("catch 1");
core::print(st);
}
}
[@vm.bytecode=
Bytecode (version: stable) {
Entry 3
CheckStack
PushInt 0
PopLocal r0
L5:
CheckStack
Push r0
PushInt 10
CompareIntLt
AssertBoolean 0
JumpIfFalse L1
Try #0 start:
Push r0
PushInt 5
CompareIntGt
AssertBoolean 0
JumpIfFalse L2
Jump L3
L2:
Jump L4
Try #0 end:
Try #0 handler:
SetFrame 3
MoveSpecial r1, exception
MoveSpecial r2, stackTrace
Push r0
PushConstant CP#2
IndirectStaticCall 1, CP#1
Drop1
Push r1
Push r2
Throw 1
L3:
Push r0
PushConstant CP#3
IndirectStaticCall 1, CP#1
Drop1
Jump L1
L4:
Push r0
PushConstant CP#4
IndirectStaticCall 1, CP#1
Drop1
Push r0
PushInt 1
AddInt
StoreLocal r0
Drop1
Jump L5
L1:
PushNull
ReturnTOS
}
ExceptionsTable {
try-index 0, outer -1, start 10, end 17, handler 17, needs-stack-trace, types [CP#0]
}
ConstantPool {
[0] = Type dynamic
[1] = ArgDesc num-args 1, num-type-args 0, names []
[2] = StaticICData target 'dart.core::print', arg-desc CP#1
[3] = StaticICData target 'dart.core::print', arg-desc CP#1
[4] = StaticICData target 'dart.core::print', arg-desc CP#1
}
]static method testTryFinally1() dynamic {
#L1:
for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
try {
if(i.{core::num::>}(5)) {
break #L1;
}
}
finally {
core::print(i);
}
}
}
[@vm.bytecode=
Bytecode (version: stable) {
Entry 9
CheckStack
AllocateContext 2
PopLocal r0
Push r0
Push FP[-5]
StoreContextVar 0
Push r0
LoadContextVar 0
PopLocal r2
Push r2
PushInt 1
InstanceCall 2, CP#1
JumpIfTrue L1
Push r2
PushInt 2
InstanceCall 2, CP#2
JumpIfTrue L2
Jump L3
L1:
Push r0
PopLocal r3
Try #0 start:
PushConstant CP#3
PushConstant CP#5
IndirectStaticCall 1, CP#4
Drop1
Push r0
PushInt 3
StoreContextVar 1
Push r0
PopLocal r5
Try #1 start:
PushConstant CP#6
PushConstant CP#7
IndirectStaticCall 1, CP#4
Drop1
Allocate CP#14
StoreLocal r8
Push r8
PushNull
StoreFieldTOS CP#15
Push r8
PushNull
StoreFieldTOS CP#17
Push r8
PushConstant CP#19
StoreFieldTOS CP#20
Push r8
PushConstant CP#8
StoreFieldTOS CP#22
Push r8
Push r0
StoreFieldTOS CP#9
PopLocal r7
Push r7
InstanceCall 1, CP#24
Drop1
Jump L4
Try #1 end:
Try #1 handler:
SetFrame 9
Push r5
PopLocal r0
MoveSpecial r5, exception
MoveSpecial r6, stackTrace
PushConstant CP#26
PushConstant CP#27
IndirectStaticCall 1, CP#4
Drop1
Push r5
Push r6
Throw 1
L4:
Push r5
PopLocal r0
PushConstant CP#26
PushConstant CP#28
IndirectStaticCall 1, CP#4
Drop1
Jump L5
Try #0 end:
Try #0 handler:
SetFrame 9
Push r3
PopLocal r0
MoveSpecial r3, exception
MoveSpecial r4, stackTrace
PushConstant CP#31
PushConstant CP#32
IndirectStaticCall 1, CP#4
Drop1
Push r3
Push r4
Throw 1
L5:
Push r3
PopLocal r0
PushConstant CP#31
PushConstant CP#33
IndirectStaticCall 1, CP#4
Drop1
Jump L2
L2:
PushConstant CP#34
PushConstant CP#35
IndirectStaticCall 1, CP#4
Drop1
Jump L3
L3:
PushNull
ReturnTOS
}
ExceptionsTable {
try-index 0, outer -1, start 21, end 75, handler 75, needs-stack-trace, types [CP#25]
try-index 1, outer 0, start 30, end 56, handler 56, needs-stack-trace, types [CP#25]
}
ConstantPool {
[0] = ArgDesc num-args 2, num-type-args 0, names []
[1] = ICData target-name '==', arg-desc CP#0
[2] = ICData target-name '==', arg-desc CP#0
[3] = String 'before try 1'
[4] = ArgDesc num-args 1, num-type-args 0, names []
[5] = StaticICData target 'dart.core::print', arg-desc CP#4
[6] = String 'try'
[7] = StaticICData target 'dart.core::print', arg-desc CP#4
[8] = ClosureFunction foo () void;
[9] = InstanceField dart.core::_Closure::_context
[10] = Reserved
[11] = StaticICData target 'dart.core::print', arg-desc CP#4
[12] = StaticICData target 'dart.core::print', arg-desc CP#4
[13] = EndClosureFunctionScope
[14] = Class dart.core::_Closure
[15] = InstanceField dart.core::_Closure::_instantiator_type_arguments
[16] = Reserved
[17] = InstanceField dart.core::_Closure::_function_type_arguments
[18] = Reserved
[19] = EmptyTypeArguments
[20] = InstanceField dart.core::_Closure::_delayed_type_arguments
[21] = Reserved
[22] = InstanceField dart.core::_Closure::_function
[23] = Reserved
[24] = ICData dynamic target-name 'call', arg-desc CP#4
[25] = Type dynamic
[26] = String 'finally 1'
[27] = StaticICData target 'dart.core::print', arg-desc CP#4
[28] = StaticICData target 'dart.core::print', arg-desc CP#4
[29] = String 'after try 1'
[30] = StaticICData target 'dart.core::print', arg-desc CP#4
[31] = String 'finally 2'
[32] = StaticICData target 'dart.core::print', arg-desc CP#4
[33] = StaticICData target 'dart.core::print', arg-desc CP#4
[34] = String 'case 2'
[35] = StaticICData target 'dart.core::print', arg-desc CP#4
}
Closure CP#8 {
EntryFixed 1, 2
CheckStack
Push FP[-5]
LoadFieldTOS CP#9
PopLocal r0
Push r0
LoadContextVar 0
PushConstant CP#11
IndirectStaticCall 1, CP#4
Drop1
Push r0
LoadContextVar 1
PushConstant CP#12
IndirectStaticCall 1, CP#4
Drop1
PushNull
ReturnTOS
}
]static method testTryFinally2(core::int x) dynamic {
#L2:
switch(x) {
#L3:
case 1:
{
try {
core::print("before try 1");
core::int y = 3;
try {
core::print("try");
function foo() void {
core::print(x);
core::print(y);
}
[@vm.call-site-attributes.metadata=receiverType:() void] foo.call();
continue #L4;
}
finally {
core::print("finally 1");
}
core::print("after try 1");
}
finally {
core::print("finally 2");
}
break #L2;
}
#L4:
case 2:
{
core::print("case 2");
break #L2;
}
}
}
[@vm.bytecode=
Bytecode (version: stable) {
Entry 6
CheckStack
AllocateContext 1
PopLocal r0
Push r0
PushInt 11
StoreContextVar 0
PushNull
PopLocal r2
Push r0
PopLocal r3
Try #0 start:
Allocate CP#16
StoreLocal r5
Push r5
PushNull
StoreFieldTOS CP#17
Push r5
PushNull
StoreFieldTOS CP#19
Push r5
PushConstant CP#21
StoreFieldTOS CP#22
Push r5
PushConstant CP#0
StoreFieldTOS CP#24
Push r5
Push r0
StoreFieldTOS CP#1
PopLocal r2
Jump L1
Try #0 end:
Try #0 handler:
SetFrame 6
Push r3
PopLocal r0
MoveSpecial r3, exception
MoveSpecial r4, stackTrace
Push r0
LoadContextVar 0
PushConstant CP#26
IndirectStaticCall 1, CP#3
Drop1
Push r2
InstanceCall 1, CP#27
Drop1
Push r3
Push r4
Throw 1
L1:
Push r3
PopLocal r0
Push r0
LoadContextVar 0
PushConstant CP#28
IndirectStaticCall 1, CP#3
Drop1
Push r2
InstanceCall 1, CP#29
Drop1
Push r0
LoadContextParent
PopLocal r0
PushNull
ReturnTOS
}
ExceptionsTable {
try-index 0, outer -1, start 11, end 30, handler 30, needs-stack-trace, types [CP#7]
}
ConstantPool {
[0] = ClosureFunction <anonymous closure> () dart.core::int;
[1] = InstanceField dart.core::_Closure::_context
[2] = Reserved
[3] = ArgDesc num-args 1, num-type-args 0, names []
[4] = StaticICData target 'dart.core::print', arg-desc CP#3
[5] = String 'try 1'
[6] = StaticICData target 'dart.core::print', arg-desc CP#3
[7] = Type dynamic
[8] = String 'try 2'
[9] = StaticICData target 'dart.core::print', arg-desc CP#3
[10] = StaticICData target 'dart.core::print', arg-desc CP#3
[11] = StaticICData target 'dart.core::print', arg-desc CP#3
[12] = StaticICData target 'dart.core::print', arg-desc CP#3
[13] = StaticICData target 'dart.core::print', arg-desc CP#3
[14] = StaticICData target 'dart.core::print', arg-desc CP#3
[15] = EndClosureFunctionScope
[16] = Class dart.core::_Closure
[17] = InstanceField dart.core::_Closure::_instantiator_type_arguments
[18] = Reserved
[19] = InstanceField dart.core::_Closure::_function_type_arguments
[20] = Reserved
[21] = EmptyTypeArguments
[22] = InstanceField dart.core::_Closure::_delayed_type_arguments
[23] = Reserved
[24] = InstanceField dart.core::_Closure::_function
[25] = Reserved
[26] = StaticICData target 'dart.core::print', arg-desc CP#3
[27] = ICData dynamic target-name 'call', arg-desc CP#3
[28] = StaticICData target 'dart.core::print', arg-desc CP#3
[29] = ICData dynamic target-name 'call', arg-desc CP#3
}
Closure CP#0 {
EntryFixed 1, 6
CheckStack
Push FP[-5]
LoadFieldTOS CP#1
PopLocal r0
Push r0
LoadContextVar 0
PushConstant CP#4
IndirectStaticCall 1, CP#3
Drop1
Push r0
PopLocal r2
Try #0 start:
PushConstant CP#5
PushConstant CP#6
IndirectStaticCall 1, CP#3
Drop1
Jump L1
Try #0 end:
Try #0 handler:
SetFrame 6
Push r2
PopLocal r0
MoveSpecial r2, exception
MoveSpecial r3, stackTrace
Push r0
PopLocal r4
Try #1 start:
PushConstant CP#8
PushConstant CP#9
IndirectStaticCall 1, CP#3
Drop1
Jump L2
Try #1 end:
Try #1 handler:
SetFrame 6
Push r4
PopLocal r0
MoveSpecial r4, exception
MoveSpecial r5, stackTrace
Push r0
LoadContextVar 0
PushConstant CP#10
IndirectStaticCall 1, CP#3
Drop1
Push r4
Push r5
Throw 1
L2:
Push r4
PopLocal r0
Push r0
LoadContextVar 0
PushConstant CP#11
IndirectStaticCall 1, CP#3
Drop1
PushInt 43
ReturnTOS
L1:
Push r2
PopLocal r0
Push r0
PopLocal r4
Try #2 start:
PushConstant CP#8
PushConstant CP#12
IndirectStaticCall 1, CP#3
Drop1
Jump L3
Try #2 end:
Try #2 handler:
SetFrame 6
Push r4
PopLocal r0
MoveSpecial r4, exception
MoveSpecial r5, stackTrace
Push r0
LoadContextVar 0
PushConstant CP#13
IndirectStaticCall 1, CP#3
Drop1
Push r4
Push r5
Throw 1
L3:
Push r4
PopLocal r0
Push r0
LoadContextVar 0
PushConstant CP#14
IndirectStaticCall 1, CP#3
Drop1
PushInt 43
ReturnTOS
}
]static method testTryFinally3() dynamic {
core::int x = 11;
dynamic y;
try {
y = () core::int {
core::print(x);
try {
core::print("try 1");
return 42;
}
finally {
try {
core::print("try 2");
return 43;
}
finally {
core::print(x);
}
}
};
}
finally {
core::print(x);
[@vm.call-site-attributes.metadata=receiverType:dynamic] y.call();
}
}
[@vm.bytecode=
Bytecode (version: stable) {
Entry 5
CheckStack
Try #0 start:
Try #1 start:
PushConstant CP#0
PushConstant CP#2
IndirectStaticCall 1, CP#1
Drop1
Jump L1
Try #1 end:
Try #1 handler:
SetFrame 5
MoveSpecial r2, exception
MoveSpecial r3, stackTrace
Push r2
PopLocal r4
PushConstant CP#4
PushConstant CP#5
IndirectStaticCall 1, CP#1
Drop1
Jump L1
L1:
Jump L2
Try #0 end:
Try #0 handler:
SetFrame 5
MoveSpecial r0, exception
MoveSpecial r1, stackTrace
PushConstant CP#6
PushConstant CP#7
IndirectStaticCall 1, CP#1
Drop1
Push r0
Push r1
Throw 1
L2:
PushConstant CP#6
PushConstant CP#8
IndirectStaticCall 1, CP#1
Drop1
PushNull
ReturnTOS
}
ExceptionsTable {
try-index 0, outer -1, start 2, end 18, handler 18, needs-stack-trace, types [CP#3]
try-index 1, outer 0, start 2, end 7, handler 7, types [CP#3]
}
ConstantPool {
[0] = String 'try'
[1] = ArgDesc num-args 1, num-type-args 0, names []
[2] = StaticICData target 'dart.core::print', arg-desc CP#1
[3] = Type dynamic
[4] = String 'catch'
[5] = StaticICData target 'dart.core::print', arg-desc CP#1
[6] = String 'finally'
[7] = StaticICData target 'dart.core::print', arg-desc CP#1
[8] = StaticICData target 'dart.core::print', arg-desc CP#1
}
]static method testTryCatchFinally() dynamic {
try
try {
core::print("try");
}
on dynamic catch(final dynamic e) {
core::print("catch");
}
finally {
core::print("finally");
}
}
[@vm.bytecode=
Bytecode (version: stable) {
Entry 0
CheckStack
PushNull
ReturnTOS
}
ConstantPool {
}
]static method main() dynamic {}