fa43799461
Fixes https://github.com/dart-lang/sdk/issues/39283 Change-Id: I5a5fdf158c6a7ce068be36754ea0487cb754584b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/124470 Reviewed-by: Régis Crelier <regis@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
1167 lines
28 KiB
Plaintext
1167 lines
28 KiB
Plaintext
main = #lib::main;
|
|
[@vm.bytecode=
|
|
BytecodeMetadata {
|
|
Bytecode (version: stable)
|
|
Main library: #lib
|
|
Library '#lib'
|
|
name '#lib'
|
|
script '#lib'
|
|
|
|
Class '', script = '#lib'
|
|
|
|
|
|
Function 'testTryCatch1', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
Bytecode {
|
|
Entry 4
|
|
CheckStack 0
|
|
Try #0 start:
|
|
PushConstant CP#0
|
|
DirectCall CP#1, 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 CP#5, 1
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
Jump L1
|
|
L1:
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 4, end 14, handler 14, 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 CP#1, 1
|
|
Drop1
|
|
Jump L1
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 5
|
|
MoveSpecial exception, r0
|
|
MoveSpecial stackTrace, r1
|
|
Push r0
|
|
PushConstant CP#3
|
|
InterfaceCall CP#4, 2
|
|
JumpIfFalse L2
|
|
PushConstant CP#6
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
Jump L1
|
|
L2:
|
|
Push r0
|
|
PushConstant CP#7
|
|
InterfaceCall CP#4, 2
|
|
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 CP#9, 1
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
Jump L1
|
|
L3:
|
|
Push r0
|
|
PushConstant CP#11
|
|
InterfaceCall CP#4, 2
|
|
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 CP#9, 1
|
|
DirectCall CP#1, 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 CP#9, 1
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
Jump L1
|
|
L1:
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 4, end 14, handler 14, 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
|
|
AllocateClosure CP#0
|
|
StoreLocal r5
|
|
Push r5
|
|
PushNull
|
|
StoreFieldTOS CP#8
|
|
Push r5
|
|
PushNull
|
|
StoreFieldTOS CP#10
|
|
Push r5
|
|
PushConstant CP#0
|
|
StoreFieldTOS CP#12
|
|
Push r5
|
|
Push r0
|
|
StoreFieldTOS CP#1
|
|
PopLocal r4
|
|
Push r4
|
|
StoreLocal r5
|
|
Push r5
|
|
UncheckedClosureCall CP#14, 1
|
|
Drop1
|
|
Push r0
|
|
LoadContextVar 0, 1
|
|
DirectCall CP#4, 1
|
|
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#15
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 1
|
|
Push r4
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 2
|
|
PushConstant CP#16
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 3
|
|
Push r0
|
|
LoadContextVar 0, 2
|
|
StoreIndexedTOS
|
|
DirectCall CP#17, 1
|
|
DirectCall CP#4, 1
|
|
Drop1
|
|
AllocateClosure CP#19
|
|
StoreLocal r5
|
|
Push r5
|
|
PushNull
|
|
StoreFieldTOS CP#8
|
|
Push r5
|
|
PushNull
|
|
StoreFieldTOS CP#10
|
|
Push r5
|
|
PushConstant CP#19
|
|
StoreFieldTOS CP#12
|
|
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 20, end 78, handler 78, 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] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
|
|
[9] = Reserved
|
|
[10] = InstanceField dart:core::_Closure::_function_type_arguments (field)
|
|
[11] = Reserved
|
|
[12] = InstanceField dart:core::_Closure::_function (field)
|
|
[13] = Reserved
|
|
[14] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
|
[15] = ObjectRef 'caught '
|
|
[16] = ObjectRef ' '
|
|
[17] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
|
|
[18] = Reserved
|
|
[19] = ClosureFunction 1
|
|
[20] = ObjectRef 'danger bar'
|
|
[21] = Type dart:core::Error
|
|
[22] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
|
|
[23] = Reserved
|
|
[24] = ObjectRef 'error '
|
|
[25] = ObjectRef ', captured stack trace: '
|
|
[26] = EndClosureFunctionScope
|
|
}
|
|
Closure #lib::testTryCatch3::'foo' () -> void
|
|
ClosureCode {
|
|
EntryFixed 1, 6
|
|
Push FP[-5]
|
|
LoadFieldTOS CP#1
|
|
PopLocal r0
|
|
CheckFunctionTypeArgs 0, r1
|
|
CheckStack 0
|
|
Push r0
|
|
PopLocal r2
|
|
Try #0 start:
|
|
PushConstant CP#3
|
|
DirectCall CP#4, 1
|
|
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 CP#4, 1
|
|
Drop1
|
|
Push r0
|
|
PushInt 3
|
|
StoreContextVar 0, 1
|
|
Jump L1
|
|
L1:
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
|
|
Closure #lib::testTryCatch3::'bar' () -> void
|
|
ClosureCode {
|
|
EntryFixed 1, 6
|
|
Push FP[-5]
|
|
LoadFieldTOS CP#1
|
|
PopLocal r0
|
|
CheckFunctionTypeArgs 0, r1
|
|
CheckStack 0
|
|
Push r0
|
|
PopLocal r2
|
|
Try #0 start:
|
|
PushConstant CP#20
|
|
DirectCall CP#4, 1
|
|
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#21
|
|
InterfaceCall CP#22, 2
|
|
JumpIfFalse L2
|
|
Push r2
|
|
PopLocal r4
|
|
PushNull
|
|
PushInt 4
|
|
CreateArrayTOS
|
|
StoreLocal r5
|
|
Push r5
|
|
PushInt 0
|
|
PushConstant CP#24
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 1
|
|
Push r4
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 2
|
|
PushConstant CP#25
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 3
|
|
Push r0
|
|
LoadContextVar 0, 2
|
|
StoreIndexedTOS
|
|
DirectCall CP#17, 1
|
|
DirectCall CP#4, 1
|
|
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 CP#1, 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 CP#1, 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 CP#1, 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 CP#1, 1
|
|
Drop1
|
|
Push r3
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
Jump L4
|
|
L4:
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 4, end 80, handler 80, needs-stack-trace, types [CP#3]
|
|
try-index 1, outer 0, start 4, end 14, handler 14, needs-stack-trace, types [CP#3]
|
|
try-index 2, outer 0, start 26, end 50, handler 50, 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 CP#1, 1
|
|
Drop1
|
|
Push r1
|
|
Push r2
|
|
Throw 1
|
|
L3:
|
|
Push r0
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
Jump L1
|
|
L4:
|
|
Push r0
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
Push r0
|
|
PushInt 1
|
|
AddInt
|
|
StoreLocal r0
|
|
Drop1
|
|
Jump L5
|
|
L1:
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 19, end 36, handler 36, needs-stack-trace, synthetic, 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
|
|
PushInt 1
|
|
Push r2
|
|
InterfaceCall CP#0, 2
|
|
JumpIfTrue L1
|
|
PushInt 2
|
|
Push r2
|
|
InterfaceCall CP#0, 2
|
|
JumpIfTrue L2
|
|
Jump L3
|
|
L1:
|
|
Push r0
|
|
PopLocal r3
|
|
Try #0 start:
|
|
PushConstant CP#2
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
Push r0
|
|
PushInt 3
|
|
StoreContextVar 0, 1
|
|
Push r0
|
|
PopLocal r5
|
|
Try #1 start:
|
|
PushConstant CP#5
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
AllocateClosure CP#6
|
|
StoreLocal r8
|
|
Push r8
|
|
PushNull
|
|
StoreFieldTOS CP#10
|
|
Push r8
|
|
PushNull
|
|
StoreFieldTOS CP#12
|
|
Push r8
|
|
PushConstant CP#6
|
|
StoreFieldTOS CP#14
|
|
Push r8
|
|
Push r0
|
|
StoreFieldTOS CP#7
|
|
PopLocal r7
|
|
Push r7
|
|
StoreLocal r8
|
|
Push r8
|
|
UncheckedClosureCall CP#16, 1
|
|
Drop1
|
|
Jump L4
|
|
Try #1 end:
|
|
Try #1 handler:
|
|
SetFrame 9
|
|
Push r5
|
|
PopLocal r0
|
|
MoveSpecial exception, r5
|
|
MoveSpecial stackTrace, r6
|
|
PushConstant CP#18
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
Push r5
|
|
Push r6
|
|
Throw 1
|
|
L4:
|
|
Push r5
|
|
PopLocal r0
|
|
PushConstant CP#18
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
Jump L5
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 9
|
|
Push r3
|
|
PopLocal r0
|
|
MoveSpecial exception, r3
|
|
MoveSpecial stackTrace, r4
|
|
PushConstant CP#20
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
Push r3
|
|
Push r4
|
|
Throw 1
|
|
L5:
|
|
Push r3
|
|
PopLocal r0
|
|
PushConstant CP#20
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
Jump L2
|
|
L2:
|
|
PushConstant CP#21
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
Jump L3
|
|
L3:
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 53, end 156, handler 156, needs-stack-trace, synthetic, types [CP#17]
|
|
try-index 1, outer 0, start 70, end 118, handler 118, needs-stack-trace, synthetic, types [CP#17]
|
|
}
|
|
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] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
|
|
[11] = Reserved
|
|
[12] = InstanceField dart:core::_Closure::_function_type_arguments (field)
|
|
[13] = Reserved
|
|
[14] = InstanceField dart:core::_Closure::_function (field)
|
|
[15] = Reserved
|
|
[16] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
|
[17] = Type dynamic
|
|
[18] = ObjectRef 'finally 1'
|
|
[19] = ObjectRef 'after try 1'
|
|
[20] = ObjectRef 'finally 2'
|
|
[21] = ObjectRef 'case 2'
|
|
}
|
|
Closure #lib::testTryFinally2::'foo' () -> void
|
|
ClosureCode {
|
|
EntryFixed 1, 2
|
|
Push FP[-5]
|
|
LoadFieldTOS CP#7
|
|
PopLocal r0
|
|
CheckFunctionTypeArgs 0, r1
|
|
CheckStack 0
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
Push r0
|
|
LoadContextVar 0, 1
|
|
DirectCall CP#3, 1
|
|
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:
|
|
AllocateClosure CP#0
|
|
StoreLocal r5
|
|
Push r5
|
|
PushNull
|
|
StoreFieldTOS CP#9
|
|
Push r5
|
|
PushNull
|
|
StoreFieldTOS CP#11
|
|
Push r5
|
|
PushConstant CP#0
|
|
StoreFieldTOS CP#13
|
|
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 CP#3, 1
|
|
Drop1
|
|
Push r2
|
|
DynamicCall CP#15, 1
|
|
Drop1
|
|
Push r3
|
|
Push r4
|
|
Throw 1
|
|
L1:
|
|
Push r3
|
|
PopLocal r0
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
Push r2
|
|
DynamicCall CP#15, 1
|
|
Drop1
|
|
Push r0
|
|
LoadContextParent
|
|
PopLocal r0
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 23, end 55, handler 55, needs-stack-trace, synthetic, 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] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
|
|
[10] = Reserved
|
|
[11] = InstanceField dart:core::_Closure::_function_type_arguments (field)
|
|
[12] = Reserved
|
|
[13] = InstanceField dart:core::_Closure::_function (field)
|
|
[14] = Reserved
|
|
[15] = DynamicCall 'call', ArgDesc num-args 1, num-type-args 0, names []
|
|
[16] = Reserved
|
|
}
|
|
Closure #lib::testTryFinally3::'<anonymous closure>' () -> dart:core::int
|
|
ClosureCode {
|
|
EntryFixed 1, 6
|
|
Push FP[-5]
|
|
LoadFieldTOS CP#1
|
|
PopLocal r0
|
|
CheckFunctionTypeArgs 0, r1
|
|
CheckStack 0
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
Push r0
|
|
PopLocal r2
|
|
Try #0 start:
|
|
PushConstant CP#5
|
|
DirectCall CP#3, 1
|
|
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 CP#3, 1
|
|
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 CP#3, 1
|
|
Drop1
|
|
Push r4
|
|
Push r5
|
|
Throw 1
|
|
L2:
|
|
Push r4
|
|
PopLocal r0
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
PushInt 43
|
|
ReturnTOS
|
|
L1:
|
|
Push r2
|
|
PopLocal r0
|
|
Push r0
|
|
PopLocal r4
|
|
Try #2 start:
|
|
PushConstant CP#7
|
|
DirectCall CP#3, 1
|
|
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 CP#3, 1
|
|
Drop1
|
|
Push r4
|
|
Push r5
|
|
Throw 1
|
|
L3:
|
|
Push r4
|
|
PopLocal r0
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
DirectCall CP#3, 1
|
|
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 CP#1, 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 CP#1, 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 CP#1, 1
|
|
Drop1
|
|
Push r0
|
|
Push r1
|
|
Throw 1
|
|
L2:
|
|
PushConstant CP#5
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 4, end 40, handler 40, needs-stack-trace, synthetic, types [CP#3]
|
|
try-index 1, outer 0, start 4, end 14, handler 14, 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 #C1:
|
|
{
|
|
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 #C2:
|
|
{
|
|
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 {}
|
|
}
|
|
constants {
|
|
#C1 = 1
|
|
#C2 = 2
|
|
}
|