377eb52f5a
Library reference is added for private names in order to resolve them correctly. Invocation kind byte supersedes VM-specific name mangling and makes ConstantICData more uniform with ConstantStaticICData. Change-Id: I66542356209d98b3d0cf0e6b8eb19bda052c6b7e Reviewed-on: https://dart-review.googlesource.com/57485 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Zach Anderson <zra@google.com> Reviewed-by: Régis Crelier <regis@google.com>
1380 lines
35 KiB
Plaintext
1380 lines
35 KiB
Plaintext
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
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
PushConstant CP#1
|
|
StoreFieldTOS CP#2
|
|
Push r0
|
|
PopLocal r2
|
|
Try #0 start:
|
|
AllocateContext 1
|
|
StoreLocal r1
|
|
Push r1
|
|
Push r0
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
PushConstant CP#3
|
|
StoreFieldTOS CP#2
|
|
Allocate CP#14
|
|
StoreLocal r5
|
|
Push r5
|
|
PushConstant CP#12
|
|
StoreFieldTOS CP#15
|
|
Push r5
|
|
PushConstant CP#12
|
|
StoreFieldTOS CP#16
|
|
Push r5
|
|
PushConstant CP#4
|
|
StoreFieldTOS CP#17
|
|
Push r5
|
|
Push r0
|
|
StoreFieldTOS CP#5
|
|
PopLocal r4
|
|
Push r4
|
|
InstanceCall1 1, CP#18
|
|
Drop1
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
PushConstant CP#19
|
|
IndirectStaticCall 1, CP#7
|
|
Drop1
|
|
Push r0
|
|
LoadFieldTOS CP#0
|
|
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
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r2
|
|
PopLocal r4
|
|
Push r0
|
|
Push r3
|
|
StoreFieldTOS CP#2
|
|
PushConstant CP#12
|
|
PushConstant CP#20
|
|
CreateArrayTOS
|
|
StoreLocal r5
|
|
Push r5
|
|
PushConstant CP#21
|
|
PushConstant CP#22
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushConstant CP#1
|
|
Push r4
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushConstant CP#3
|
|
PushConstant CP#23
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushConstant CP#11
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
StoreIndexedTOS
|
|
PushConstant CP#24
|
|
IndirectStaticCall 1, CP#7
|
|
PushConstant CP#25
|
|
IndirectStaticCall 1, CP#7
|
|
Drop1
|
|
Allocate CP#14
|
|
StoreLocal r5
|
|
Push r5
|
|
PushConstant CP#12
|
|
StoreFieldTOS CP#15
|
|
Push r5
|
|
PushConstant CP#12
|
|
StoreFieldTOS CP#16
|
|
Push r5
|
|
PushConstant CP#26
|
|
StoreFieldTOS CP#17
|
|
Push r5
|
|
Push r0
|
|
StoreFieldTOS CP#5
|
|
PopLocal r6
|
|
Push r6
|
|
ReturnTOS
|
|
Push r0
|
|
LoadFieldTOS CP#0
|
|
PopLocal r0
|
|
Jump L1
|
|
L1:
|
|
Push r0
|
|
LoadFieldTOS CP#0
|
|
PopLocal r0
|
|
PushConstant CP#12
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 13, end 49, handler 49, needs-stack-trace, types [CP#9]
|
|
}
|
|
ConstantPool {
|
|
[0] = ContextOffset parent
|
|
[1] = Int 1
|
|
[2] = ContextOffset var [0]
|
|
[3] = Int 2
|
|
[4] = ClosureFunction foo () → void;
|
|
[5] = FieldOffset dart.core::_Closure::_context
|
|
[6] = String 'danger foo'
|
|
[7] = ArgDesc num-args 1, num-type-args 0, names []
|
|
[8] = StaticICData target 'dart.core::print', arg-desc CP#7
|
|
[9] = Type dynamic
|
|
[10] = StaticICData target 'dart.core::print', arg-desc CP#7
|
|
[11] = Int 3
|
|
[12] = Null
|
|
[13] = EndClosureFunctionScope
|
|
[14] = Class dart.core::_Closure
|
|
[15] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
|
|
[16] = FieldOffset dart.core::_Closure::_function_type_arguments
|
|
[17] = FieldOffset dart.core::_Closure::_function
|
|
[18] = ICData target-name 'call', arg-desc CP#7
|
|
[19] = StaticICData target 'dart.core::print', arg-desc CP#7
|
|
[20] = Int 4
|
|
[21] = Int 0
|
|
[22] = String 'caught '
|
|
[23] = String ' '
|
|
[24] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#7
|
|
[25] = StaticICData target 'dart.core::print', arg-desc CP#7
|
|
[26] = ClosureFunction bar () → void;
|
|
[27] = String 'danger bar'
|
|
[28] = StaticICData target 'dart.core::print', arg-desc CP#7
|
|
[29] = Type dart.core::Error
|
|
[30] = ArgDesc num-args 4, num-type-args 0, names []
|
|
[31] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#30
|
|
[32] = Bool true
|
|
[33] = String 'error '
|
|
[34] = String ', captured stack trace: '
|
|
[35] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#7
|
|
[36] = StaticICData target 'dart.core::print', arg-desc CP#7
|
|
[37] = EndClosureFunctionScope
|
|
}
|
|
Closure CP#4 {
|
|
Entry 6
|
|
CheckStack
|
|
Push FP[-5]
|
|
LoadFieldTOS CP#5
|
|
PopLocal r0
|
|
Push r0
|
|
PopLocal r2
|
|
Try #0 start:
|
|
PushConstant CP#6
|
|
PushConstant CP#8
|
|
IndirectStaticCall 1, CP#7
|
|
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
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#2
|
|
PushConstant CP#10
|
|
IndirectStaticCall 1, CP#7
|
|
Drop1
|
|
Push r0
|
|
PushConstant CP#11
|
|
StoreLocal r5
|
|
StoreFieldTOS CP#2
|
|
Push r5
|
|
Drop1
|
|
Jump L1
|
|
L1:
|
|
PushConstant CP#12
|
|
ReturnTOS
|
|
|
|
}
|
|
|
|
Closure CP#26 {
|
|
Entry 6
|
|
CheckStack
|
|
Push FP[-5]
|
|
LoadFieldTOS CP#5
|
|
PopLocal r0
|
|
Push r0
|
|
PopLocal r2
|
|
Try #0 start:
|
|
PushConstant CP#27
|
|
PushConstant CP#28
|
|
IndirectStaticCall 1, CP#7
|
|
Drop1
|
|
Jump L1
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
Push r2
|
|
PopLocal r0
|
|
MoveSpecial r2, exception
|
|
MoveSpecial r3, stackTrace
|
|
Push r2
|
|
PushConstant CP#12
|
|
PushConstant CP#12
|
|
PushConstant CP#29
|
|
InstanceCall1 4, CP#31
|
|
PushConstant CP#32
|
|
IfNeStrictTOS
|
|
Jump L2
|
|
Push r2
|
|
PopLocal r4
|
|
PushConstant CP#12
|
|
PushConstant CP#20
|
|
CreateArrayTOS
|
|
StoreLocal r5
|
|
Push r5
|
|
PushConstant CP#21
|
|
PushConstant CP#33
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushConstant CP#1
|
|
Push r4
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushConstant CP#3
|
|
PushConstant CP#34
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushConstant CP#11
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
StoreIndexedTOS
|
|
PushConstant CP#35
|
|
IndirectStaticCall 1, CP#7
|
|
PushConstant CP#36
|
|
IndirectStaticCall 1, CP#7
|
|
Drop1
|
|
Jump L1
|
|
L2:
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L1:
|
|
PushConstant CP#12
|
|
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]
|
|
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 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 11, end 24, handler 24, 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
|
|
PushConstant CP#4
|
|
IfNeStrictTOS
|
|
Jump L1
|
|
Try #0 start:
|
|
Push r0
|
|
PushConstant CP#5
|
|
InstanceCall1 2, CP#6
|
|
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 11, end 19, handler 19, 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
|
|
StoreLocal r1
|
|
Push r1
|
|
Push r0
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
Push FP[-5]
|
|
StoreFieldTOS CP#1
|
|
Push r0
|
|
LoadFieldTOS CP#1
|
|
PopLocal r2
|
|
Push r2
|
|
PushConstant CP#3
|
|
InstanceCall2 2, CP#4
|
|
PushConstant CP#5
|
|
IfEqStrictTOS
|
|
Jump L1
|
|
Push r2
|
|
PushConstant CP#6
|
|
InstanceCall2 2, CP#7
|
|
PushConstant CP#5
|
|
IfEqStrictTOS
|
|
Jump L2
|
|
Jump L3
|
|
L1:
|
|
Push r0
|
|
PopLocal r3
|
|
Try #0 start:
|
|
AllocateContext 1
|
|
StoreLocal r1
|
|
Push r1
|
|
Push r0
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
PushConstant CP#8
|
|
PushConstant CP#10
|
|
IndirectStaticCall 1, CP#9
|
|
Drop1
|
|
Push r0
|
|
PushConstant CP#11
|
|
StoreFieldTOS CP#1
|
|
Push r0
|
|
PopLocal r5
|
|
Try #1 start:
|
|
PushConstant CP#12
|
|
PushConstant CP#13
|
|
IndirectStaticCall 1, CP#9
|
|
Drop1
|
|
Allocate CP#20
|
|
StoreLocal r8
|
|
Push r8
|
|
PushConstant CP#18
|
|
StoreFieldTOS CP#21
|
|
Push r8
|
|
PushConstant CP#18
|
|
StoreFieldTOS CP#22
|
|
Push r8
|
|
PushConstant CP#14
|
|
StoreFieldTOS CP#23
|
|
Push r8
|
|
Push r0
|
|
StoreFieldTOS CP#15
|
|
PopLocal r7
|
|
Push r7
|
|
InstanceCall1 1, CP#24
|
|
Drop1
|
|
Jump L4
|
|
Jump L5
|
|
Try #1 end:
|
|
Try #1 handler:
|
|
Push r5
|
|
PopLocal r0
|
|
MoveSpecial r5, exception
|
|
MoveSpecial r6, stackTrace
|
|
PushConstant CP#26
|
|
PushConstant CP#27
|
|
IndirectStaticCall 1, CP#9
|
|
Drop1
|
|
Push r5
|
|
Push r6
|
|
Throw 1
|
|
L4:
|
|
Push r5
|
|
PopLocal r0
|
|
PushConstant CP#26
|
|
PushConstant CP#28
|
|
IndirectStaticCall 1, CP#9
|
|
Drop1
|
|
Jump L6
|
|
L5:
|
|
Push r5
|
|
PopLocal r0
|
|
PushConstant CP#26
|
|
PushConstant CP#29
|
|
IndirectStaticCall 1, CP#9
|
|
Drop1
|
|
PushConstant CP#30
|
|
PushConstant CP#31
|
|
IndirectStaticCall 1, CP#9
|
|
Drop1
|
|
Push r0
|
|
LoadFieldTOS CP#0
|
|
PopLocal r0
|
|
Jump L7
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
Push r3
|
|
PopLocal r0
|
|
MoveSpecial r3, exception
|
|
MoveSpecial r4, stackTrace
|
|
PushConstant CP#32
|
|
PushConstant CP#33
|
|
IndirectStaticCall 1, CP#9
|
|
Drop1
|
|
Push r3
|
|
Push r4
|
|
Throw 1
|
|
L6:
|
|
Push r3
|
|
PopLocal r0
|
|
PushConstant CP#32
|
|
PushConstant CP#34
|
|
IndirectStaticCall 1, CP#9
|
|
Drop1
|
|
Jump L2
|
|
L7:
|
|
Push r3
|
|
PopLocal r0
|
|
PushConstant CP#32
|
|
PushConstant CP#35
|
|
IndirectStaticCall 1, CP#9
|
|
Drop1
|
|
Jump L3
|
|
L2:
|
|
PushConstant CP#36
|
|
PushConstant CP#37
|
|
IndirectStaticCall 1, CP#9
|
|
Drop1
|
|
Jump L3
|
|
L3:
|
|
PushConstant CP#18
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 29, end 100, handler 100, needs-stack-trace, types [CP#25]
|
|
try-index 1, outer 0, start 44, end 68, handler 68, needs-stack-trace, types [CP#25]
|
|
}
|
|
ConstantPool {
|
|
[0] = ContextOffset parent
|
|
[1] = ContextOffset var [0]
|
|
[2] = ArgDesc num-args 2, num-type-args 0, names []
|
|
[3] = Int 1
|
|
[4] = ICData target-name '==', arg-desc CP#2
|
|
[5] = Bool true
|
|
[6] = Int 2
|
|
[7] = ICData target-name '==', arg-desc CP#2
|
|
[8] = String 'before try 1'
|
|
[9] = ArgDesc num-args 1, num-type-args 0, names []
|
|
[10] = StaticICData target 'dart.core::print', arg-desc CP#9
|
|
[11] = Int 3
|
|
[12] = String 'try'
|
|
[13] = StaticICData target 'dart.core::print', arg-desc CP#9
|
|
[14] = ClosureFunction foo () → void;
|
|
[15] = FieldOffset dart.core::_Closure::_context
|
|
[16] = StaticICData target 'dart.core::print', arg-desc CP#9
|
|
[17] = StaticICData target 'dart.core::print', arg-desc CP#9
|
|
[18] = Null
|
|
[19] = EndClosureFunctionScope
|
|
[20] = Class dart.core::_Closure
|
|
[21] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
|
|
[22] = FieldOffset dart.core::_Closure::_function_type_arguments
|
|
[23] = FieldOffset dart.core::_Closure::_function
|
|
[24] = ICData target-name 'call', arg-desc CP#9
|
|
[25] = Type dynamic
|
|
[26] = String 'finally 1'
|
|
[27] = StaticICData target 'dart.core::print', arg-desc CP#9
|
|
[28] = StaticICData target 'dart.core::print', arg-desc CP#9
|
|
[29] = StaticICData target 'dart.core::print', arg-desc CP#9
|
|
[30] = String 'after try 1'
|
|
[31] = StaticICData target 'dart.core::print', arg-desc CP#9
|
|
[32] = String 'finally 2'
|
|
[33] = StaticICData target 'dart.core::print', arg-desc CP#9
|
|
[34] = StaticICData target 'dart.core::print', arg-desc CP#9
|
|
[35] = StaticICData target 'dart.core::print', arg-desc CP#9
|
|
[36] = String 'case 2'
|
|
[37] = StaticICData target 'dart.core::print', arg-desc CP#9
|
|
}
|
|
Closure CP#14 {
|
|
Entry 2
|
|
CheckStack
|
|
Push FP[-5]
|
|
LoadFieldTOS CP#15
|
|
PopLocal r0
|
|
Push r0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#1
|
|
PushConstant CP#16
|
|
IndirectStaticCall 1, CP#9
|
|
Drop1
|
|
Push r0
|
|
LoadFieldTOS CP#1
|
|
PushConstant CP#17
|
|
IndirectStaticCall 1, CP#9
|
|
Drop1
|
|
PushConstant CP#18
|
|
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
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
PushConstant CP#1
|
|
StoreFieldTOS CP#2
|
|
PushConstant CP#3
|
|
PopLocal r2
|
|
Push r0
|
|
PopLocal r3
|
|
Try #0 start:
|
|
Allocate CP#27
|
|
StoreLocal r5
|
|
Push r5
|
|
PushConstant CP#3
|
|
StoreFieldTOS CP#28
|
|
Push r5
|
|
PushConstant CP#3
|
|
StoreFieldTOS CP#29
|
|
Push r5
|
|
PushConstant CP#4
|
|
StoreFieldTOS CP#30
|
|
Push r5
|
|
Push r0
|
|
StoreFieldTOS CP#5
|
|
StoreLocal r2
|
|
Drop1
|
|
Jump L1
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
Push r3
|
|
PopLocal r0
|
|
MoveSpecial r3, exception
|
|
MoveSpecial r4, stackTrace
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
PushConstant CP#31
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
Push r2
|
|
InstanceCall1 1, CP#32
|
|
Drop1
|
|
Push r3
|
|
Push r4
|
|
Throw 1
|
|
L1:
|
|
Push r3
|
|
PopLocal r0
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
PushConstant CP#33
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
Push r2
|
|
InstanceCall1 1, CP#34
|
|
Drop1
|
|
Push r0
|
|
LoadFieldTOS CP#0
|
|
PopLocal r0
|
|
PushConstant CP#3
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 15, end 32, handler 32, needs-stack-trace, types [CP#11]
|
|
}
|
|
ConstantPool {
|
|
[0] = ContextOffset parent
|
|
[1] = Int 11
|
|
[2] = ContextOffset var [0]
|
|
[3] = Null
|
|
[4] = ClosureFunction <anonymous closure> () → dart.core::int;
|
|
[5] = FieldOffset dart.core::_Closure::_context
|
|
[6] = ArgDesc num-args 1, num-type-args 0, names []
|
|
[7] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[8] = String 'try 1'
|
|
[9] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[10] = Int 42
|
|
[11] = Type dynamic
|
|
[12] = String 'try 2'
|
|
[13] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[14] = Int 43
|
|
[15] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[16] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[17] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[18] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[19] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[20] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[21] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[22] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[23] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[24] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[25] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[26] = EndClosureFunctionScope
|
|
[27] = Class dart.core::_Closure
|
|
[28] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
|
|
[29] = FieldOffset dart.core::_Closure::_function_type_arguments
|
|
[30] = FieldOffset dart.core::_Closure::_function
|
|
[31] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[32] = ICData target-name 'call', arg-desc CP#6
|
|
[33] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[34] = ICData target-name 'call', arg-desc CP#6
|
|
}
|
|
Closure CP#4 {
|
|
Entry 6
|
|
CheckStack
|
|
Push FP[-5]
|
|
LoadFieldTOS CP#5
|
|
PopLocal r0
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
PushConstant CP#7
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
Push r0
|
|
PopLocal r2
|
|
Try #0 start:
|
|
PushConstant CP#8
|
|
PushConstant CP#9
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
PushConstant CP#10
|
|
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#12
|
|
PushConstant CP#13
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
PushConstant CP#14
|
|
Jump L3
|
|
Jump L4
|
|
Try #1 end:
|
|
Try #1 handler:
|
|
Push r4
|
|
PopLocal r0
|
|
MoveSpecial r4, exception
|
|
MoveSpecial r5, stackTrace
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
PushConstant CP#15
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
Push r4
|
|
Push r5
|
|
Throw 1
|
|
L3:
|
|
Push r4
|
|
PopLocal r0
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
PushConstant CP#16
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
ReturnTOS
|
|
L4:
|
|
Push r4
|
|
PopLocal r0
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
PushConstant CP#17
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L1:
|
|
Push r2
|
|
PopLocal r0
|
|
Push r0
|
|
PopLocal r4
|
|
Try #2 start:
|
|
PushConstant CP#12
|
|
PushConstant CP#18
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
PushConstant CP#14
|
|
Jump L5
|
|
Jump L6
|
|
Try #2 end:
|
|
Try #2 handler:
|
|
Push r4
|
|
PopLocal r0
|
|
MoveSpecial r4, exception
|
|
MoveSpecial r5, stackTrace
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
PushConstant CP#19
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
Push r4
|
|
Push r5
|
|
Throw 1
|
|
L5:
|
|
Push r4
|
|
PopLocal r0
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
PushConstant CP#20
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
ReturnTOS
|
|
L6:
|
|
Push r4
|
|
PopLocal r0
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
PushConstant CP#21
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
ReturnTOS
|
|
L2:
|
|
Push r2
|
|
PopLocal r0
|
|
Push r0
|
|
PopLocal r4
|
|
Try #3 start:
|
|
PushConstant CP#12
|
|
PushConstant CP#22
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
PushConstant CP#14
|
|
Jump L7
|
|
Jump L8
|
|
Try #3 end:
|
|
Try #3 handler:
|
|
Push r4
|
|
PopLocal r0
|
|
MoveSpecial r4, exception
|
|
MoveSpecial r5, stackTrace
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
PushConstant CP#23
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
Push r4
|
|
Push r5
|
|
Throw 1
|
|
L7:
|
|
Push r4
|
|
PopLocal r0
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
PushConstant CP#24
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
ReturnTOS
|
|
L8:
|
|
Push r4
|
|
PopLocal r0
|
|
Push r0
|
|
LoadFieldTOS CP#2
|
|
PushConstant CP#25
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
PushConstant CP#3
|
|
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 {}
|