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