Files
sdk/pkg/vm/testcases/bytecode/try_blocks.dart.expect
T
Johnni Winther 7fce125300 [cfe,kernel] Add AstPrinter
This CL adds a Node.toText method together with an AstPrinter. These
facility and better toString implementation on AST nodes while allowing
for toString independent printing of AST to use in testing. This also
add support for an integrated toString of custom/internal nodes.

Some work is still needed in bringing the toString implementation on
all nodes to the old quality, and not all internal nodes have
customized textual representations yet. This work is left for future
CLs.

Change-Id: Ib0bf8a0bc02f489dfacdc8aa5f96da9c52f26058
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150923
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
2020-06-16 17:15:10 +00:00

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 Function()*] 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 Function()*] 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
}