Files
sdk/pkg/vm/testcases/bytecode/try_blocks.dart.expect
T
Alexander Markov 61f0f5bc43 [vm/bytecode] Declare members in bytecode
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>
2019-03-26 21:40:10 +00:00

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 {}
}