blob: b6575db56255e6f4e2cb985d4385b7d75ae3a03a [file] [log] [blame]
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
AllocateClosure CP#0
StoreLocal r5
Push r5
PushNull
StoreFieldTOS CP#8
Push r5
PushNull
StoreFieldTOS CP#10
Push r5
PushConstant CP#12
StoreFieldTOS CP#13
Push r5
PushConstant CP#0
StoreFieldTOS CP#15
Push r5
Push r0
StoreFieldTOS CP#1
PopLocal r4
Push r4
DynamicCall 1, CP#18
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#19
StoreIndexedTOS
Push r5
PushInt 1
Push r4
StoreIndexedTOS
Push r5
PushInt 2
PushConstant CP#20
StoreIndexedTOS
Push r5
PushInt 3
Push r0
LoadContextVar 0, 2
StoreIndexedTOS
DirectCall 1, CP#21
DirectCall 1, CP#4
Drop1
AllocateClosure CP#23
StoreLocal r5
Push r5
PushNull
StoreFieldTOS CP#8
Push r5
PushNull
StoreFieldTOS CP#10
Push r5
PushConstant CP#12
StoreFieldTOS CP#13
Push r5
PushConstant CP#23
StoreFieldTOS CP#15
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] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
[9] = Reserved
[10] = InstanceField dart:core::_Closure::_function_type_arguments (field)
[11] = Reserved
[12] = EmptyTypeArguments
[13] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
[14] = Reserved
[15] = InstanceField dart:core::_Closure::_function (field)
[16] = Reserved
[17] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
[18] = ICData dynamic target-name 'call', arg-desc CP#17
[19] = ObjectRef 'caught '
[20] = ObjectRef ' '
[21] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
[22] = Reserved
[23] = ClosureFunction 1
[24] = ObjectRef 'danger bar'
[25] = Type dart:core::Error
[26] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
[27] = Reserved
[28] = ObjectRef 'error '
[29] = ObjectRef ', captured stack trace: '
[30] = 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#24
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#25
InterfaceCall 2, CP#26
JumpIfFalse L2
Push r2
PopLocal r4
PushNull
PushInt 4
CreateArrayTOS
StoreLocal r5
Push r5
PushInt 0
PushConstant CP#28
StoreIndexedTOS
Push r5
PushInt 1
Push r4
StoreIndexedTOS
Push r5
PushInt 2
PushConstant CP#29
StoreIndexedTOS
Push r5
PushInt 3
Push r0
LoadContextVar 0, 2
StoreIndexedTOS
DirectCall 1, CP#21
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
AllocateClosure CP#6
StoreLocal r8
Push r8
PushNull
StoreFieldTOS CP#10
Push r8
PushNull
StoreFieldTOS CP#12
Push r8
PushConstant CP#14
StoreFieldTOS CP#15
Push r8
PushConstant CP#6
StoreFieldTOS CP#17
Push r8
Push r0
StoreFieldTOS CP#7
PopLocal r7
Push r7
DynamicCall 1, CP#20
Drop1
Jump L4
Try #1 end:
Try #1 handler:
SetFrame 9
Push r5
PopLocal r0
MoveSpecial exception, r5
MoveSpecial stackTrace, r6
PushConstant CP#22
DirectCall 1, CP#3
Drop1
Push r5
Push r6
Throw 1
L4:
Push r5
PopLocal r0
PushConstant CP#22
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#24
DirectCall 1, CP#3
Drop1
Push r3
Push r4
Throw 1
L5:
Push r3
PopLocal r0
PushConstant CP#24
DirectCall 1, CP#3
Drop1
Jump L2
L2:
PushConstant CP#25
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#21]
try-index 1, outer 0, start 29, end 54, handler 54, needs-stack-trace, types [CP#21]
}
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] = 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] = Type dynamic
[22] = ObjectRef 'finally 1'
[23] = ObjectRef 'after try 1'
[24] = ObjectRef 'finally 2'
[25] = 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:
AllocateClosure CP#0
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 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#19
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#20
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] = 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] = ICData dynamic target-name 'call', arg-desc CP#18
}
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 #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
}