61f0f5bc43
This change replaces kernel AST declarations of fields and functions with bytecode declarations. Size of dilp files is reduced by 11-12%. Startup latency: Time to the first full frame: 1.945s -> 1.687s FinalizeClass: 554ms -> 277ms FinishClassLoading: 296ms -> 156ms There are following regressions in bytecode mode, which will be fixed in future: * dart:mirrors are not supported yet (implementation of mirrors relies on reading kernel AST in certain cases). As the result, lib_2/mirrors/* tests fail. * native extensions are not supported yet (annotations on libraries and classes in AST are cleaned up as they could reference members which are now removed from AST). As the result, standalone_2/entrypoints_verification_test test fails. * language_2/spread_collections/const_error_test/* tests fail due to https://github.com/dart-lang/sdk/issues/36286. Change-Id: I5130f401fd7b84038b136136e7ccc1a6e51b6cea Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97561 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
1197 lines
29 KiB
Plaintext
1197 lines
29 KiB
Plaintext
main = #lib::main;
|
|
[@vm.bytecode=
|
|
ComponentBytecodeMetadata {
|
|
|
|
Bytecode (version: stable)
|
|
Main library: #lib
|
|
|
|
}
|
|
] [@vm.bytecode=
|
|
MembersBytecodeMetadata {
|
|
|
|
Members {
|
|
|
|
Function 'testTryCatch1', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
|
|
Bytecode {
|
|
Entry 4
|
|
CheckStack 0
|
|
Try #0 start:
|
|
PushConstant CP#0
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Jump L1
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 4
|
|
MoveSpecial exception, r0
|
|
MoveSpecial stackTrace, r1
|
|
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
|
|
DirectCall 1, CP#5
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Jump L1
|
|
L1:
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 2, end 6, handler 6, types [CP#3]
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef 'danger!'
|
|
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = Reserved
|
|
[3] = Type dynamic
|
|
[4] = ObjectRef 'caught '
|
|
[5] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
|
|
[6] = Reserved
|
|
}
|
|
|
|
|
|
Function 'testTryCatch2', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
|
|
Bytecode {
|
|
Entry 5
|
|
CheckStack 0
|
|
Try #0 start:
|
|
PushConstant CP#0
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Jump L1
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 5
|
|
MoveSpecial exception, r0
|
|
MoveSpecial stackTrace, r1
|
|
Push r0
|
|
PushConstant CP#3
|
|
InterfaceCall 2, CP#4
|
|
JumpIfFalse L2
|
|
PushConstant CP#6
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Jump L1
|
|
L2:
|
|
Push r0
|
|
PushConstant CP#7
|
|
InterfaceCall 2, CP#4
|
|
JumpIfFalse L3
|
|
Push r0
|
|
PopLocal r2
|
|
PushNull
|
|
PushInt 2
|
|
CreateArrayTOS
|
|
StoreLocal r3
|
|
Push r3
|
|
PushInt 0
|
|
PushConstant CP#8
|
|
StoreIndexedTOS
|
|
Push r3
|
|
PushInt 1
|
|
Push r2
|
|
StoreIndexedTOS
|
|
DirectCall 1, CP#9
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Jump L1
|
|
L3:
|
|
Push r0
|
|
PushConstant CP#11
|
|
InterfaceCall 2, CP#4
|
|
JumpIfFalse L4
|
|
Push r0
|
|
PopLocal r2
|
|
Push r1
|
|
PopLocal r3
|
|
PushNull
|
|
PushInt 4
|
|
CreateArrayTOS
|
|
StoreLocal r4
|
|
Push r4
|
|
PushInt 0
|
|
PushConstant CP#12
|
|
StoreIndexedTOS
|
|
Push r4
|
|
PushInt 1
|
|
Push r2
|
|
StoreIndexedTOS
|
|
Push r4
|
|
PushInt 2
|
|
PushConstant CP#13
|
|
StoreIndexedTOS
|
|
Push r4
|
|
PushInt 3
|
|
Push r3
|
|
StoreIndexedTOS
|
|
DirectCall 1, CP#9
|
|
DirectCall 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#15
|
|
StoreIndexedTOS
|
|
Push r4
|
|
PushInt 1
|
|
Push r2
|
|
StoreIndexedTOS
|
|
Push r4
|
|
PushInt 2
|
|
PushConstant CP#13
|
|
StoreIndexedTOS
|
|
Push r4
|
|
PushInt 3
|
|
Push r3
|
|
StoreIndexedTOS
|
|
DirectCall 1, CP#9
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Jump L1
|
|
L1:
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 2, end 6, handler 6, needs-stack-trace, types [CP#3, CP#7, CP#11, CP#14]
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef 'danger!'
|
|
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = Reserved
|
|
[3] = Type dart:core::TypeError
|
|
[4] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
|
|
[5] = Reserved
|
|
[6] = ObjectRef 'caught type error'
|
|
[7] = Type dart:core::AssertionError
|
|
[8] = ObjectRef 'caught assertion error '
|
|
[9] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
|
|
[10] = Reserved
|
|
[11] = Type dart:core::Error
|
|
[12] = ObjectRef 'caught error '
|
|
[13] = ObjectRef ' '
|
|
[14] = Type dynamic
|
|
[15] = ObjectRef 'caught something '
|
|
}
|
|
|
|
|
|
Function 'testTryCatch3', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
|
|
Bytecode {
|
|
Entry 7
|
|
CheckStack 0
|
|
AllocateContext 0, 3
|
|
PopLocal r0
|
|
Push r0
|
|
PushInt 1
|
|
StoreContextVar 0, 0
|
|
Push r0
|
|
PopLocal r2
|
|
Try #0 start:
|
|
Push r0
|
|
PushInt 2
|
|
StoreContextVar 0, 1
|
|
Allocate CP#8
|
|
StoreLocal r5
|
|
Push r5
|
|
PushNull
|
|
StoreFieldTOS CP#9
|
|
Push r5
|
|
PushNull
|
|
StoreFieldTOS CP#11
|
|
Push r5
|
|
PushConstant CP#13
|
|
StoreFieldTOS CP#14
|
|
Push r5
|
|
PushConstant CP#0
|
|
StoreFieldTOS CP#16
|
|
Push r5
|
|
Push r0
|
|
StoreFieldTOS CP#1
|
|
PopLocal r4
|
|
Push r4
|
|
DynamicCall 1, CP#19
|
|
Drop1
|
|
Push r0
|
|
LoadContextVar 0, 1
|
|
DirectCall 1, CP#4
|
|
Drop1
|
|
Jump L1
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 7
|
|
Push r2
|
|
PopLocal r0
|
|
MoveSpecial exception, r2
|
|
MoveSpecial stackTrace, r3
|
|
Push r2
|
|
PopLocal r4
|
|
Push r0
|
|
Push r3
|
|
StoreContextVar 0, 2
|
|
PushNull
|
|
PushInt 4
|
|
CreateArrayTOS
|
|
StoreLocal r5
|
|
Push r5
|
|
PushInt 0
|
|
PushConstant CP#20
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 1
|
|
Push r4
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 2
|
|
PushConstant CP#21
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 3
|
|
Push r0
|
|
LoadContextVar 0, 2
|
|
StoreIndexedTOS
|
|
DirectCall 1, CP#22
|
|
DirectCall 1, CP#4
|
|
Drop1
|
|
Allocate CP#8
|
|
StoreLocal r5
|
|
Push r5
|
|
PushNull
|
|
StoreFieldTOS CP#9
|
|
Push r5
|
|
PushNull
|
|
StoreFieldTOS CP#11
|
|
Push r5
|
|
PushConstant CP#13
|
|
StoreFieldTOS CP#14
|
|
Push r5
|
|
PushConstant CP#24
|
|
StoreFieldTOS CP#16
|
|
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 38, handler 38, needs-stack-trace, types [CP#6]
|
|
}
|
|
ConstantPool {
|
|
[0] = ClosureFunction 0
|
|
[1] = InstanceField dart:core::_Closure::_context (field)
|
|
[2] = Reserved
|
|
[3] = ObjectRef 'danger foo'
|
|
[4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[5] = Reserved
|
|
[6] = Type dynamic
|
|
[7] = EndClosureFunctionScope
|
|
[8] = Class dart:core::_Closure
|
|
[9] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
|
|
[10] = Reserved
|
|
[11] = InstanceField dart:core::_Closure::_function_type_arguments (field)
|
|
[12] = Reserved
|
|
[13] = EmptyTypeArguments
|
|
[14] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
|
|
[15] = Reserved
|
|
[16] = InstanceField dart:core::_Closure::_function (field)
|
|
[17] = Reserved
|
|
[18] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
|
[19] = ICData dynamic target-name 'call', arg-desc CP#18
|
|
[20] = ObjectRef 'caught '
|
|
[21] = ObjectRef ' '
|
|
[22] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
|
|
[23] = Reserved
|
|
[24] = ClosureFunction 1
|
|
[25] = ObjectRef 'danger bar'
|
|
[26] = Type dart:core::Error
|
|
[27] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
|
|
[28] = Reserved
|
|
[29] = ObjectRef 'error '
|
|
[30] = ObjectRef ', captured stack trace: '
|
|
[31] = EndClosureFunctionScope
|
|
}
|
|
Closure #lib::testTryCatch3::'foo' () -> void
|
|
ClosureCode {
|
|
EntryFixed 1, 6
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
LoadFieldTOS CP#1
|
|
PopLocal r0
|
|
Push r0
|
|
PopLocal r2
|
|
Try #0 start:
|
|
PushConstant CP#3
|
|
DirectCall 1, CP#4
|
|
Drop1
|
|
Jump L1
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 6
|
|
Push r2
|
|
PopLocal r0
|
|
MoveSpecial exception, r2
|
|
MoveSpecial stackTrace, r3
|
|
Push r2
|
|
PopLocal r4
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
DirectCall 1, CP#4
|
|
Drop1
|
|
Push r0
|
|
PushInt 3
|
|
StoreContextVar 0, 1
|
|
Jump L1
|
|
L1:
|
|
PushNull
|
|
ReturnTOS
|
|
|
|
}
|
|
|
|
Closure #lib::testTryCatch3::'bar' () -> void
|
|
ClosureCode {
|
|
EntryFixed 1, 6
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
LoadFieldTOS CP#1
|
|
PopLocal r0
|
|
Push r0
|
|
PopLocal r2
|
|
Try #0 start:
|
|
PushConstant CP#25
|
|
DirectCall 1, CP#4
|
|
Drop1
|
|
Jump L1
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 6
|
|
Push r2
|
|
PopLocal r0
|
|
MoveSpecial exception, r2
|
|
MoveSpecial stackTrace, r3
|
|
Push r2
|
|
PushConstant CP#26
|
|
InterfaceCall 2, CP#27
|
|
JumpIfFalse L2
|
|
Push r2
|
|
PopLocal r4
|
|
PushNull
|
|
PushInt 4
|
|
CreateArrayTOS
|
|
StoreLocal r5
|
|
Push r5
|
|
PushInt 0
|
|
PushConstant CP#29
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 1
|
|
Push r4
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 2
|
|
PushConstant CP#30
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 3
|
|
Push r0
|
|
LoadContextVar 0, 2
|
|
StoreIndexedTOS
|
|
DirectCall 1, CP#22
|
|
DirectCall 1, CP#4
|
|
Drop1
|
|
Jump L1
|
|
L2:
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L1:
|
|
PushNull
|
|
ReturnTOS
|
|
|
|
}
|
|
|
|
|
|
Function 'testRethrow', static, reflectable, debuggable
|
|
parameters [dart:core::bool 'cond'] (required: 1)
|
|
return-type dynamic
|
|
|
|
|
|
Bytecode {
|
|
Entry 8
|
|
CheckStack 0
|
|
Try #0 start:
|
|
Try #1 start:
|
|
PushConstant CP#0
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Jump L1
|
|
Try #1 end:
|
|
Try #1 handler:
|
|
SetFrame 8
|
|
MoveSpecial exception, r2
|
|
MoveSpecial stackTrace, r3
|
|
Push r2
|
|
PopLocal r4
|
|
Try #2 start:
|
|
PushConstant CP#4
|
|
DirectCall 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 exception, r5
|
|
MoveSpecial stackTrace, r6
|
|
Push r5
|
|
PopLocal r7
|
|
PushConstant CP#5
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Jump L3
|
|
L3:
|
|
Jump L1
|
|
L1:
|
|
Jump L4
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 8
|
|
MoveSpecial exception, r0
|
|
MoveSpecial stackTrace, r1
|
|
Push r0
|
|
PopLocal r2
|
|
Push r1
|
|
PopLocal r3
|
|
PushConstant CP#6
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Push r3
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Jump L4
|
|
L4:
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 2, end 32, handler 32, needs-stack-trace, types [CP#3]
|
|
try-index 1, outer 0, start 2, end 6, handler 6, needs-stack-trace, types [CP#3]
|
|
try-index 2, outer 0, start 11, end 21, handler 21, types [CP#3]
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef 'try 1 > try 2'
|
|
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = Reserved
|
|
[3] = Type dynamic
|
|
[4] = ObjectRef 'try 1 > catch 2 > try 3'
|
|
[5] = ObjectRef 'try 1 > catch 2 > catch 3'
|
|
[6] = ObjectRef 'catch 1'
|
|
}
|
|
|
|
|
|
Function 'testTryFinally1', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
|
|
Bytecode {
|
|
Entry 3
|
|
CheckStack 0
|
|
PushInt 0
|
|
PopLocal r0
|
|
L5:
|
|
CheckStack 1
|
|
Push r0
|
|
PushInt 10
|
|
CompareIntLt
|
|
JumpIfFalse L1
|
|
Try #0 start:
|
|
Push r0
|
|
PushInt 5
|
|
CompareIntGt
|
|
JumpIfFalse L2
|
|
Jump L3
|
|
L2:
|
|
Jump L4
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 3
|
|
MoveSpecial exception, r1
|
|
MoveSpecial stackTrace, r2
|
|
Push r0
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Push r1
|
|
Push r2
|
|
Throw 1
|
|
L3:
|
|
Push r0
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Jump L1
|
|
L4:
|
|
Push r0
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Push r0
|
|
PushInt 1
|
|
AddInt
|
|
StoreLocal r0
|
|
Drop1
|
|
Jump L5
|
|
L1:
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 9, end 15, handler 15, needs-stack-trace, types [CP#0]
|
|
}
|
|
ConstantPool {
|
|
[0] = Type dynamic
|
|
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = Reserved
|
|
}
|
|
|
|
|
|
Function 'testTryFinally2', static, reflectable, debuggable
|
|
parameters [dart:core::int 'x'] (required: 1)
|
|
return-type dynamic
|
|
|
|
|
|
Bytecode {
|
|
Entry 9
|
|
CheckStack 0
|
|
AllocateContext 0, 2
|
|
PopLocal r0
|
|
Push r0
|
|
Push FP[-5]
|
|
StoreContextVar 0, 0
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
PopLocal r2
|
|
Push r2
|
|
PushInt 1
|
|
InterfaceCall 2, CP#0
|
|
JumpIfTrue L1
|
|
Push r2
|
|
PushInt 2
|
|
InterfaceCall 2, CP#0
|
|
JumpIfTrue L2
|
|
Jump L3
|
|
L1:
|
|
Push r0
|
|
PopLocal r3
|
|
Try #0 start:
|
|
PushConstant CP#2
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Push r0
|
|
PushInt 3
|
|
StoreContextVar 0, 1
|
|
Push r0
|
|
PopLocal r5
|
|
Try #1 start:
|
|
PushConstant CP#5
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Allocate CP#10
|
|
StoreLocal r8
|
|
Push r8
|
|
PushNull
|
|
StoreFieldTOS CP#11
|
|
Push r8
|
|
PushNull
|
|
StoreFieldTOS CP#13
|
|
Push r8
|
|
PushConstant CP#15
|
|
StoreFieldTOS CP#16
|
|
Push r8
|
|
PushConstant CP#6
|
|
StoreFieldTOS CP#18
|
|
Push r8
|
|
Push r0
|
|
StoreFieldTOS CP#7
|
|
PopLocal r7
|
|
Push r7
|
|
DynamicCall 1, CP#21
|
|
Drop1
|
|
Jump L4
|
|
Try #1 end:
|
|
Try #1 handler:
|
|
SetFrame 9
|
|
Push r5
|
|
PopLocal r0
|
|
MoveSpecial exception, r5
|
|
MoveSpecial stackTrace, r6
|
|
PushConstant CP#23
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Push r5
|
|
Push r6
|
|
Throw 1
|
|
L4:
|
|
Push r5
|
|
PopLocal r0
|
|
PushConstant CP#23
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Jump L5
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 9
|
|
Push r3
|
|
PopLocal r0
|
|
MoveSpecial exception, r3
|
|
MoveSpecial stackTrace, r4
|
|
PushConstant CP#25
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Push r3
|
|
Push r4
|
|
Throw 1
|
|
L5:
|
|
Push r3
|
|
PopLocal r0
|
|
PushConstant CP#25
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Jump L2
|
|
L2:
|
|
PushConstant CP#26
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Jump L3
|
|
L3:
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 21, end 71, handler 71, needs-stack-trace, types [CP#22]
|
|
try-index 1, outer 0, start 29, end 54, handler 54, needs-stack-trace, types [CP#22]
|
|
}
|
|
ConstantPool {
|
|
[0] = InterfaceCall 'dart:core::Object::==', ArgDesc num-args 2, num-type-args 0, names []
|
|
[1] = Reserved
|
|
[2] = ObjectRef 'before try 1'
|
|
[3] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[4] = Reserved
|
|
[5] = ObjectRef 'try'
|
|
[6] = ClosureFunction 0
|
|
[7] = InstanceField dart:core::_Closure::_context (field)
|
|
[8] = Reserved
|
|
[9] = EndClosureFunctionScope
|
|
[10] = Class dart:core::_Closure
|
|
[11] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
|
|
[12] = Reserved
|
|
[13] = InstanceField dart:core::_Closure::_function_type_arguments (field)
|
|
[14] = Reserved
|
|
[15] = EmptyTypeArguments
|
|
[16] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
|
|
[17] = Reserved
|
|
[18] = InstanceField dart:core::_Closure::_function (field)
|
|
[19] = Reserved
|
|
[20] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
|
[21] = ICData dynamic target-name 'call', arg-desc CP#20
|
|
[22] = Type dynamic
|
|
[23] = ObjectRef 'finally 1'
|
|
[24] = ObjectRef 'after try 1'
|
|
[25] = ObjectRef 'finally 2'
|
|
[26] = ObjectRef 'case 2'
|
|
}
|
|
Closure #lib::testTryFinally2::'foo' () -> void
|
|
ClosureCode {
|
|
EntryFixed 1, 2
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
LoadFieldTOS CP#7
|
|
PopLocal r0
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Push r0
|
|
LoadContextVar 0, 1
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
|
|
}
|
|
|
|
|
|
Function 'testTryFinally3', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
|
|
Bytecode {
|
|
Entry 6
|
|
CheckStack 0
|
|
AllocateContext 0, 1
|
|
PopLocal r0
|
|
Push r0
|
|
PushInt 11
|
|
StoreContextVar 0, 0
|
|
PushNull
|
|
PopLocal r2
|
|
Push r0
|
|
PopLocal r3
|
|
Try #0 start:
|
|
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 r2
|
|
Jump L1
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 6
|
|
Push r3
|
|
PopLocal r0
|
|
MoveSpecial exception, r3
|
|
MoveSpecial stackTrace, r4
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Push r2
|
|
DynamicCall 1, CP#20
|
|
Drop1
|
|
Push r3
|
|
Push r4
|
|
Throw 1
|
|
L1:
|
|
Push r3
|
|
PopLocal r0
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Push r2
|
|
DynamicCall 1, CP#21
|
|
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#6]
|
|
}
|
|
ConstantPool {
|
|
[0] = ClosureFunction 0
|
|
[1] = InstanceField dart:core::_Closure::_context (field)
|
|
[2] = Reserved
|
|
[3] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[4] = Reserved
|
|
[5] = ObjectRef 'try 1'
|
|
[6] = Type dynamic
|
|
[7] = ObjectRef 'try 2'
|
|
[8] = EndClosureFunctionScope
|
|
[9] = Class dart:core::_Closure
|
|
[10] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
|
|
[11] = Reserved
|
|
[12] = InstanceField dart:core::_Closure::_function_type_arguments (field)
|
|
[13] = Reserved
|
|
[14] = EmptyTypeArguments
|
|
[15] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
|
|
[16] = Reserved
|
|
[17] = InstanceField dart:core::_Closure::_function (field)
|
|
[18] = Reserved
|
|
[19] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
|
[20] = ICData dynamic target-name 'call', arg-desc CP#19
|
|
[21] = ICData dynamic target-name 'call', arg-desc CP#19
|
|
}
|
|
Closure #lib::testTryFinally3::'<anonymous closure>' () -> dart:core::int
|
|
ClosureCode {
|
|
EntryFixed 1, 6
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
LoadFieldTOS CP#1
|
|
PopLocal r0
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Push r0
|
|
PopLocal r2
|
|
Try #0 start:
|
|
PushConstant CP#5
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Jump L1
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 6
|
|
Push r2
|
|
PopLocal r0
|
|
MoveSpecial exception, r2
|
|
MoveSpecial stackTrace, r3
|
|
Push r0
|
|
PopLocal r4
|
|
Try #1 start:
|
|
PushConstant CP#7
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Jump L2
|
|
Try #1 end:
|
|
Try #1 handler:
|
|
SetFrame 6
|
|
Push r4
|
|
PopLocal r0
|
|
MoveSpecial exception, r4
|
|
MoveSpecial stackTrace, r5
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Push r4
|
|
Push r5
|
|
Throw 1
|
|
L2:
|
|
Push r4
|
|
PopLocal r0
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
PushInt 43
|
|
ReturnTOS
|
|
L1:
|
|
Push r2
|
|
PopLocal r0
|
|
Push r0
|
|
PopLocal r4
|
|
Try #2 start:
|
|
PushConstant CP#7
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Jump L3
|
|
Try #2 end:
|
|
Try #2 handler:
|
|
SetFrame 6
|
|
Push r4
|
|
PopLocal r0
|
|
MoveSpecial exception, r4
|
|
MoveSpecial stackTrace, r5
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
Push r4
|
|
Push r5
|
|
Throw 1
|
|
L3:
|
|
Push r4
|
|
PopLocal r0
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
DirectCall 1, CP#3
|
|
Drop1
|
|
PushInt 43
|
|
ReturnTOS
|
|
|
|
}
|
|
|
|
|
|
Function 'testTryCatchFinally', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
|
|
Bytecode {
|
|
Entry 5
|
|
CheckStack 0
|
|
Try #0 start:
|
|
Try #1 start:
|
|
PushConstant CP#0
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Jump L1
|
|
Try #1 end:
|
|
Try #1 handler:
|
|
SetFrame 5
|
|
MoveSpecial exception, r2
|
|
MoveSpecial stackTrace, r3
|
|
Push r2
|
|
PopLocal r4
|
|
PushConstant CP#4
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Jump L1
|
|
L1:
|
|
Jump L2
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 5
|
|
MoveSpecial exception, r0
|
|
MoveSpecial stackTrace, r1
|
|
PushConstant CP#5
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
Push r0
|
|
Push r1
|
|
Throw 1
|
|
L2:
|
|
PushConstant CP#5
|
|
DirectCall 1, CP#1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 2, end 16, handler 16, needs-stack-trace, types [CP#3]
|
|
try-index 1, outer 0, start 2, end 6, handler 6, types [CP#3]
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef 'try'
|
|
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = Reserved
|
|
[3] = Type dynamic
|
|
[4] = ObjectRef 'catch'
|
|
[5] = ObjectRef 'finally'
|
|
}
|
|
|
|
|
|
Function 'main', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
]library #lib from "#lib" as #lib {
|
|
|
|
static method testTryCatch1() → dynamic {
|
|
try {
|
|
dart.core::print("danger!");
|
|
}
|
|
on dynamic catch(final dynamic e) {
|
|
dart.core::print("caught ${e}");
|
|
}
|
|
}
|
|
static method testTryCatch2() → dynamic {
|
|
try {
|
|
dart.core::print("danger!");
|
|
}
|
|
on dart.core::TypeError catch(no-exception-var) {
|
|
dart.core::print("caught type error");
|
|
}
|
|
on dart.core::AssertionError catch(final dart.core::AssertionError e) {
|
|
dart.core::print("caught assertion error ${e}");
|
|
}
|
|
on dart.core::Error catch(final dart.core::Error e, final dart.core::StackTrace st) {
|
|
dart.core::print("caught error ${e} ${st}");
|
|
}
|
|
on dynamic catch(final dynamic e, final dart.core::StackTrace st) {
|
|
dart.core::print("caught something ${e} ${st}");
|
|
}
|
|
}
|
|
static method testTryCatch3() → dynamic {
|
|
dart.core::int x = 1;
|
|
try {
|
|
dart.core::int y = 2;
|
|
function foo() → void {
|
|
try {
|
|
dart.core::print("danger foo");
|
|
}
|
|
on dynamic catch(final dynamic e) {
|
|
dart.core::print(x);
|
|
y = 3;
|
|
}
|
|
}
|
|
[@vm.call-site-attributes.metadata=receiverType:() → void] foo.call();
|
|
dart.core::print(y);
|
|
}
|
|
on dynamic catch(final dynamic e, final dart.core::StackTrace st) {
|
|
dart.core::print("caught ${e} ${st}");
|
|
function bar() → void {
|
|
try {
|
|
dart.core::print("danger bar");
|
|
}
|
|
on dart.core::Error catch(final dart.core::Error e) {
|
|
dart.core::print("error ${e}, captured stack trace: ${st}");
|
|
}
|
|
}
|
|
return bar;
|
|
}
|
|
}
|
|
static method testRethrow(dart.core::bool cond) → dynamic {
|
|
try {
|
|
try {
|
|
dart.core::print("try 1 > try 2");
|
|
}
|
|
on dynamic catch(final dynamic e) {
|
|
try {
|
|
dart.core::print("try 1 > catch 2 > try 3");
|
|
if(cond) {
|
|
rethrow;
|
|
}
|
|
}
|
|
on dynamic catch(final dynamic e) {
|
|
dart.core::print("try 1 > catch 2 > catch 3");
|
|
}
|
|
}
|
|
}
|
|
on dynamic catch(final dynamic e, final dart.core::StackTrace st) {
|
|
dart.core::print("catch 1");
|
|
dart.core::print(st);
|
|
}
|
|
}
|
|
static method testTryFinally1() → dynamic {
|
|
#L1:
|
|
for (dart.core::int i = 0; i.{dart.core::num::<}(10); i = i.{dart.core::num::+}(1)) {
|
|
try {
|
|
if(i.{dart.core::num::>}(5)) {
|
|
break #L1;
|
|
}
|
|
}
|
|
finally {
|
|
dart.core::print(i);
|
|
}
|
|
}
|
|
}
|
|
static method testTryFinally2(dart.core::int x) → dynamic {
|
|
#L2:
|
|
switch(x) {
|
|
#L3:
|
|
case 1:
|
|
{
|
|
try {
|
|
dart.core::print("before try 1");
|
|
dart.core::int y = 3;
|
|
try {
|
|
dart.core::print("try");
|
|
function foo() → void {
|
|
dart.core::print(x);
|
|
dart.core::print(y);
|
|
}
|
|
[@vm.call-site-attributes.metadata=receiverType:() → void] foo.call();
|
|
continue #L4;
|
|
}
|
|
finally {
|
|
dart.core::print("finally 1");
|
|
}
|
|
dart.core::print("after try 1");
|
|
}
|
|
finally {
|
|
dart.core::print("finally 2");
|
|
}
|
|
break #L2;
|
|
}
|
|
#L4:
|
|
case 2:
|
|
{
|
|
dart.core::print("case 2");
|
|
break #L2;
|
|
}
|
|
}
|
|
}
|
|
static method testTryFinally3() → dynamic {
|
|
dart.core::int x = 11;
|
|
dynamic y;
|
|
try {
|
|
y = () → dart.core::int {
|
|
dart.core::print(x);
|
|
try {
|
|
dart.core::print("try 1");
|
|
return 42;
|
|
}
|
|
finally {
|
|
try {
|
|
dart.core::print("try 2");
|
|
return 43;
|
|
}
|
|
finally {
|
|
dart.core::print(x);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
finally {
|
|
dart.core::print(x);
|
|
[@vm.call-site-attributes.metadata=receiverType:dynamic] y.call();
|
|
}
|
|
}
|
|
static method testTryCatchFinally() → dynamic {
|
|
try
|
|
try {
|
|
dart.core::print("try");
|
|
}
|
|
on dynamic catch(final dynamic e) {
|
|
dart.core::print("catch");
|
|
}
|
|
finally {
|
|
dart.core::print("finally");
|
|
}
|
|
}
|
|
static method main() → dynamic {}
|
|
}
|