| library #lib; |
| import self as self; |
| import "dart:core" as core; |
| |
| [@vm.bytecode= |
| Bytecode { |
| Entry 4 |
| CheckStack 0 |
| Try #0 start: |
| PushConstant CP#0 |
| PushConstant CP#2 |
| IndirectStaticCall 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 |
| PushConstant CP#5 |
| IndirectStaticCall 1, CP#1 |
| PushConstant CP#6 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| Jump L1 |
| L1: |
| PushNull |
| ReturnTOS |
| } |
| ExceptionsTable { |
| try-index 0, outer -1, start 2, end 7, handler 7, types [CP#3] |
| } |
| ConstantPool { |
| [0] = String 'danger!' |
| [1] = ArgDesc num-args 1, num-type-args 0, names [] |
| [2] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| [3] = Type dynamic |
| [4] = String 'caught ' |
| [5] = StaticICData target 'dart:core::_StringBase::_interpolate', arg-desc CP#1 |
| [6] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| } |
| ]static method testTryCatch1() → dynamic { |
| try { |
| core::print("danger!"); |
| } |
| on dynamic catch(final dynamic e) { |
| core::print("caught ${e}"); |
| } |
| } |
| [@vm.bytecode= |
| Bytecode { |
| Entry 5 |
| CheckStack 0 |
| Try #0 start: |
| PushConstant CP#0 |
| PushConstant CP#2 |
| IndirectStaticCall 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#5 |
| JumpIfFalse L2 |
| PushConstant CP#7 |
| PushConstant CP#8 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| Jump L1 |
| L2: |
| Push r0 |
| PushConstant CP#9 |
| InterfaceCall 2, CP#5 |
| JumpIfFalse L3 |
| Push r0 |
| PopLocal r2 |
| PushNull |
| PushInt 2 |
| CreateArrayTOS |
| StoreLocal r3 |
| Push r3 |
| PushInt 0 |
| PushConstant CP#10 |
| StoreIndexedTOS |
| Push r3 |
| PushInt 1 |
| Push r2 |
| StoreIndexedTOS |
| PushConstant CP#11 |
| IndirectStaticCall 1, CP#1 |
| PushConstant CP#12 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| Jump L1 |
| L3: |
| Push r0 |
| PushConstant CP#13 |
| InterfaceCall 2, CP#5 |
| JumpIfFalse L4 |
| Push r0 |
| PopLocal r2 |
| Push r1 |
| PopLocal r3 |
| PushNull |
| PushInt 4 |
| CreateArrayTOS |
| StoreLocal r4 |
| Push r4 |
| PushInt 0 |
| PushConstant CP#14 |
| StoreIndexedTOS |
| Push r4 |
| PushInt 1 |
| Push r2 |
| StoreIndexedTOS |
| Push r4 |
| PushInt 2 |
| PushConstant CP#15 |
| StoreIndexedTOS |
| Push r4 |
| PushInt 3 |
| Push r3 |
| StoreIndexedTOS |
| PushConstant CP#16 |
| IndirectStaticCall 1, CP#1 |
| PushConstant CP#17 |
| IndirectStaticCall 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#19 |
| StoreIndexedTOS |
| Push r4 |
| PushInt 1 |
| Push r2 |
| StoreIndexedTOS |
| Push r4 |
| PushInt 2 |
| PushConstant CP#15 |
| StoreIndexedTOS |
| Push r4 |
| PushInt 3 |
| Push r3 |
| StoreIndexedTOS |
| PushConstant CP#20 |
| IndirectStaticCall 1, CP#1 |
| PushConstant CP#21 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| Jump L1 |
| L1: |
| PushNull |
| ReturnTOS |
| } |
| ExceptionsTable { |
| try-index 0, outer -1, start 2, end 7, handler 7, needs-stack-trace, types [CP#3, CP#9, CP#13, CP#18] |
| } |
| ConstantPool { |
| [0] = String 'danger!' |
| [1] = ArgDesc num-args 1, num-type-args 0, names [] |
| [2] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| [3] = Type dart:core::TypeError |
| [4] = ArgDesc num-args 2, num-type-args 0, names [] |
| [5] = InterfaceCall target-name '_simpleInstanceOf', arg-desc CP#4 |
| [6] = Reserved |
| [7] = String 'caught type error' |
| [8] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| [9] = Type dart:core::AssertionError |
| [10] = String 'caught assertion error ' |
| [11] = StaticICData target 'dart:core::_StringBase::_interpolate', arg-desc CP#1 |
| [12] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| [13] = Type dart:core::Error |
| [14] = String 'caught error ' |
| [15] = String ' ' |
| [16] = StaticICData target 'dart:core::_StringBase::_interpolate', arg-desc CP#1 |
| [17] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| [18] = Type dynamic |
| [19] = String 'caught something ' |
| [20] = StaticICData target 'dart:core::_StringBase::_interpolate', arg-desc CP#1 |
| [21] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| } |
| ]static method testTryCatch2() → dynamic { |
| try { |
| core::print("danger!"); |
| } |
| on core::TypeError catch(no-exception-var) { |
| core::print("caught type error"); |
| } |
| on core::AssertionError catch(final core::AssertionError e) { |
| core::print("caught assertion error ${e}"); |
| } |
| on core::Error catch(final core::Error e, final core::StackTrace st) { |
| core::print("caught error ${e} ${st}"); |
| } |
| on dynamic catch(final dynamic e, final core::StackTrace st) { |
| core::print("caught something ${e} ${st}"); |
| } |
| } |
| [@vm.bytecode= |
| 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#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 r4 |
| Push r4 |
| DynamicCall 1, CP#19 |
| Drop1 |
| Push r0 |
| LoadContextVar 0, 1 |
| PushConstant CP#20 |
| IndirectStaticCall 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#21 |
| StoreIndexedTOS |
| Push r5 |
| PushInt 1 |
| Push r4 |
| StoreIndexedTOS |
| Push r5 |
| PushInt 2 |
| PushConstant CP#22 |
| StoreIndexedTOS |
| Push r5 |
| PushInt 3 |
| Push r0 |
| LoadContextVar 0, 2 |
| StoreIndexedTOS |
| PushConstant CP#23 |
| IndirectStaticCall 1, CP#4 |
| PushConstant CP#24 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| 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#25 |
| StoreFieldTOS CP#17 |
| 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 39, handler 39, needs-stack-trace, types [CP#6] |
| } |
| ConstantPool { |
| [0] = ClosureFunction 0 |
| [1] = InstanceField dart:core::_Closure::_context (field) |
| [2] = Reserved |
| [3] = String 'danger foo' |
| [4] = ArgDesc num-args 1, num-type-args 0, names [] |
| [5] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [6] = Type dynamic |
| [7] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [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] = ICData dynamic target-name 'call', arg-desc CP#4 |
| [20] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [21] = String 'caught ' |
| [22] = String ' ' |
| [23] = StaticICData target 'dart:core::_StringBase::_interpolate', arg-desc CP#4 |
| [24] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [25] = ClosureFunction 1 |
| [26] = String 'danger bar' |
| [27] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [28] = Type dart:core::Error |
| [29] = ArgDesc num-args 2, num-type-args 0, names [] |
| [30] = InterfaceCall target-name '_simpleInstanceOf', arg-desc CP#29 |
| [31] = Reserved |
| [32] = String 'error ' |
| [33] = String ', captured stack trace: ' |
| [34] = StaticICData target 'dart:core::_StringBase::_interpolate', arg-desc CP#4 |
| [35] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [36] = EndClosureFunctionScope |
| } |
| Closure #lib::testTryCatch3::foo () -> void |
| ClosureBytecode { |
| EntryFixed 1, 6 |
| CheckStack 0 |
| Push FP[-5] |
| LoadFieldTOS CP#1 |
| PopLocal r0 |
| Push r0 |
| PopLocal r2 |
| Try #0 start: |
| PushConstant CP#3 |
| PushConstant CP#5 |
| IndirectStaticCall 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 |
| PushConstant CP#7 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| Push r0 |
| PushInt 3 |
| StoreContextVar 0, 1 |
| Jump L1 |
| L1: |
| PushNull |
| ReturnTOS |
| |
| } |
| |
| Closure #lib::testTryCatch3::bar () -> void |
| ClosureBytecode { |
| EntryFixed 1, 6 |
| CheckStack 0 |
| Push FP[-5] |
| LoadFieldTOS CP#1 |
| PopLocal r0 |
| Push r0 |
| PopLocal r2 |
| Try #0 start: |
| PushConstant CP#26 |
| PushConstant CP#27 |
| IndirectStaticCall 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#28 |
| InterfaceCall 2, CP#30 |
| JumpIfFalse L2 |
| Push r2 |
| PopLocal r4 |
| PushNull |
| PushInt 4 |
| CreateArrayTOS |
| StoreLocal r5 |
| Push r5 |
| PushInt 0 |
| PushConstant CP#32 |
| StoreIndexedTOS |
| Push r5 |
| PushInt 1 |
| Push r4 |
| StoreIndexedTOS |
| Push r5 |
| PushInt 2 |
| PushConstant CP#33 |
| StoreIndexedTOS |
| Push r5 |
| PushInt 3 |
| Push r0 |
| LoadContextVar 0, 2 |
| StoreIndexedTOS |
| PushConstant CP#34 |
| IndirectStaticCall 1, CP#4 |
| PushConstant CP#35 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| Jump L1 |
| L2: |
| Push r2 |
| Push r3 |
| Throw 1 |
| L1: |
| PushNull |
| ReturnTOS |
| |
| } |
| ]static method testTryCatch3() → dynamic { |
| core::int x = 1; |
| try { |
| core::int y = 2; |
| function foo() → void { |
| try { |
| core::print("danger foo"); |
| } |
| on dynamic catch(final dynamic e) { |
| core::print(x); |
| y = 3; |
| } |
| } |
| [@vm.call-site-attributes.metadata=receiverType:() → void] foo.call(); |
| core::print(y); |
| } |
| on dynamic catch(final dynamic e, final core::StackTrace st) { |
| core::print("caught ${e} ${st}"); |
| function bar() → void { |
| try { |
| core::print("danger bar"); |
| } |
| on core::Error catch(final core::Error e) { |
| core::print("error ${e}, captured stack trace: ${st}"); |
| } |
| } |
| return bar; |
| } |
| } |
| [@vm.bytecode= |
| Bytecode { |
| Entry 8 |
| CheckStack 0 |
| Try #0 start: |
| Try #1 start: |
| PushConstant CP#0 |
| PushConstant CP#2 |
| IndirectStaticCall 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 |
| PushConstant CP#5 |
| IndirectStaticCall 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#6 |
| PushConstant CP#7 |
| IndirectStaticCall 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#8 |
| PushConstant CP#9 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| Push r3 |
| PushConstant CP#10 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| Jump L4 |
| L4: |
| PushNull |
| ReturnTOS |
| } |
| ExceptionsTable { |
| try-index 0, outer -1, start 2, end 35, handler 35, needs-stack-trace, types [CP#3] |
| try-index 1, outer 0, start 2, end 7, handler 7, needs-stack-trace, types [CP#3] |
| try-index 2, outer 0, start 12, end 23, handler 23, types [CP#3] |
| } |
| ConstantPool { |
| [0] = String 'try 1 > try 2' |
| [1] = ArgDesc num-args 1, num-type-args 0, names [] |
| [2] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| [3] = Type dynamic |
| [4] = String 'try 1 > catch 2 > try 3' |
| [5] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| [6] = String 'try 1 > catch 2 > catch 3' |
| [7] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| [8] = String 'catch 1' |
| [9] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| [10] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| } |
| ]static method testRethrow(core::bool cond) → dynamic { |
| try { |
| try { |
| core::print("try 1 > try 2"); |
| } |
| on dynamic catch(final dynamic e) { |
| try { |
| core::print("try 1 > catch 2 > try 3"); |
| if(cond) { |
| rethrow; |
| } |
| } |
| on dynamic catch(final dynamic e) { |
| core::print("try 1 > catch 2 > catch 3"); |
| } |
| } |
| } |
| on dynamic catch(final dynamic e, final core::StackTrace st) { |
| core::print("catch 1"); |
| core::print(st); |
| } |
| } |
| [@vm.bytecode= |
| 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 |
| PushConstant CP#2 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| Push r1 |
| Push r2 |
| Throw 1 |
| L3: |
| Push r0 |
| PushConstant CP#3 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| Jump L1 |
| L4: |
| Push r0 |
| PushConstant CP#4 |
| IndirectStaticCall 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] = ArgDesc num-args 1, num-type-args 0, names [] |
| [2] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| [3] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| [4] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| } |
| ]static method testTryFinally1() → dynamic { |
| #L1: |
| for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) { |
| try { |
| if(i.{core::num::>}(5)) { |
| break #L1; |
| } |
| } |
| finally { |
| core::print(i); |
| } |
| } |
| } |
| [@vm.bytecode= |
| 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#1 |
| JumpIfTrue L1 |
| Push r2 |
| PushInt 2 |
| InterfaceCall 2, CP#1 |
| JumpIfTrue L2 |
| Jump L3 |
| L1: |
| Push r0 |
| PopLocal r3 |
| Try #0 start: |
| PushConstant CP#3 |
| PushConstant CP#5 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| Push r0 |
| PushInt 3 |
| StoreContextVar 0, 1 |
| Push r0 |
| PopLocal r5 |
| Try #1 start: |
| PushConstant CP#6 |
| PushConstant CP#7 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| Allocate CP#14 |
| StoreLocal r8 |
| Push r8 |
| PushNull |
| StoreFieldTOS CP#15 |
| Push r8 |
| PushNull |
| StoreFieldTOS CP#17 |
| Push r8 |
| PushConstant CP#19 |
| StoreFieldTOS CP#20 |
| Push r8 |
| PushConstant CP#8 |
| StoreFieldTOS CP#22 |
| Push r8 |
| Push r0 |
| StoreFieldTOS CP#9 |
| PopLocal r7 |
| Push r7 |
| DynamicCall 1, CP#24 |
| Drop1 |
| Jump L4 |
| Try #1 end: |
| Try #1 handler: |
| SetFrame 9 |
| Push r5 |
| PopLocal r0 |
| MoveSpecial exception, r5 |
| MoveSpecial stackTrace, r6 |
| PushConstant CP#26 |
| PushConstant CP#27 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| Push r5 |
| Push r6 |
| Throw 1 |
| L4: |
| Push r5 |
| PopLocal r0 |
| PushConstant CP#26 |
| PushConstant CP#28 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| Jump L5 |
| Try #0 end: |
| Try #0 handler: |
| SetFrame 9 |
| Push r3 |
| PopLocal r0 |
| MoveSpecial exception, r3 |
| MoveSpecial stackTrace, r4 |
| PushConstant CP#31 |
| PushConstant CP#32 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| Push r3 |
| Push r4 |
| Throw 1 |
| L5: |
| Push r3 |
| PopLocal r0 |
| PushConstant CP#31 |
| PushConstant CP#33 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| Jump L2 |
| L2: |
| PushConstant CP#34 |
| PushConstant CP#35 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| Jump L3 |
| L3: |
| PushNull |
| ReturnTOS |
| } |
| ExceptionsTable { |
| try-index 0, outer -1, start 21, end 75, handler 75, needs-stack-trace, types [CP#25] |
| try-index 1, outer 0, start 30, end 56, handler 56, needs-stack-trace, types [CP#25] |
| } |
| ConstantPool { |
| [0] = ArgDesc num-args 2, num-type-args 0, names [] |
| [1] = InterfaceCall target-name '==', arg-desc CP#0 |
| [2] = Reserved |
| [3] = String 'before try 1' |
| [4] = ArgDesc num-args 1, num-type-args 0, names [] |
| [5] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [6] = String 'try' |
| [7] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [8] = ClosureFunction 0 |
| [9] = InstanceField dart:core::_Closure::_context (field) |
| [10] = Reserved |
| [11] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [12] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [13] = EndClosureFunctionScope |
| [14] = Class dart:core::_Closure |
| [15] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field) |
| [16] = Reserved |
| [17] = InstanceField dart:core::_Closure::_function_type_arguments (field) |
| [18] = Reserved |
| [19] = EmptyTypeArguments |
| [20] = InstanceField dart:core::_Closure::_delayed_type_arguments (field) |
| [21] = Reserved |
| [22] = InstanceField dart:core::_Closure::_function (field) |
| [23] = Reserved |
| [24] = ICData dynamic target-name 'call', arg-desc CP#4 |
| [25] = Type dynamic |
| [26] = String 'finally 1' |
| [27] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [28] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [29] = String 'after try 1' |
| [30] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [31] = String 'finally 2' |
| [32] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [33] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| [34] = String 'case 2' |
| [35] = StaticICData target 'dart:core::print', arg-desc CP#4 |
| } |
| Closure #lib::testTryFinally2::foo () -> void |
| ClosureBytecode { |
| EntryFixed 1, 2 |
| CheckStack 0 |
| Push FP[-5] |
| LoadFieldTOS CP#9 |
| PopLocal r0 |
| Push r0 |
| LoadContextVar 0, 0 |
| PushConstant CP#11 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| Push r0 |
| LoadContextVar 0, 1 |
| PushConstant CP#12 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| PushNull |
| ReturnTOS |
| |
| } |
| ]static method testTryFinally2(core::int x) → dynamic { |
| #L2: |
| switch(x) { |
| #L3: |
| case 1: |
| { |
| try { |
| core::print("before try 1"); |
| core::int y = 3; |
| try { |
| core::print("try"); |
| function foo() → void { |
| core::print(x); |
| core::print(y); |
| } |
| [@vm.call-site-attributes.metadata=receiverType:() → void] foo.call(); |
| continue #L4; |
| } |
| finally { |
| core::print("finally 1"); |
| } |
| core::print("after try 1"); |
| } |
| finally { |
| core::print("finally 2"); |
| } |
| break #L2; |
| } |
| #L4: |
| case 2: |
| { |
| core::print("case 2"); |
| break #L2; |
| } |
| } |
| } |
| [@vm.bytecode= |
| 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#16 |
| StoreLocal r5 |
| Push r5 |
| PushNull |
| StoreFieldTOS CP#17 |
| Push r5 |
| PushNull |
| StoreFieldTOS CP#19 |
| Push r5 |
| PushConstant CP#21 |
| StoreFieldTOS CP#22 |
| Push r5 |
| PushConstant CP#0 |
| StoreFieldTOS CP#24 |
| 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 |
| PushConstant CP#26 |
| IndirectStaticCall 1, CP#3 |
| Drop1 |
| Push r2 |
| DynamicCall 1, CP#27 |
| Drop1 |
| Push r3 |
| Push r4 |
| Throw 1 |
| L1: |
| Push r3 |
| PopLocal r0 |
| Push r0 |
| LoadContextVar 0, 0 |
| PushConstant CP#28 |
| IndirectStaticCall 1, CP#3 |
| Drop1 |
| Push r2 |
| DynamicCall 1, CP#29 |
| 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#7] |
| } |
| ConstantPool { |
| [0] = ClosureFunction 0 |
| [1] = InstanceField dart:core::_Closure::_context (field) |
| [2] = Reserved |
| [3] = ArgDesc num-args 1, num-type-args 0, names [] |
| [4] = StaticICData target 'dart:core::print', arg-desc CP#3 |
| [5] = String 'try 1' |
| [6] = StaticICData target 'dart:core::print', arg-desc CP#3 |
| [7] = Type dynamic |
| [8] = String 'try 2' |
| [9] = StaticICData target 'dart:core::print', arg-desc CP#3 |
| [10] = StaticICData target 'dart:core::print', arg-desc CP#3 |
| [11] = StaticICData target 'dart:core::print', arg-desc CP#3 |
| [12] = StaticICData target 'dart:core::print', arg-desc CP#3 |
| [13] = StaticICData target 'dart:core::print', arg-desc CP#3 |
| [14] = StaticICData target 'dart:core::print', arg-desc CP#3 |
| [15] = EndClosureFunctionScope |
| [16] = Class dart:core::_Closure |
| [17] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field) |
| [18] = Reserved |
| [19] = InstanceField dart:core::_Closure::_function_type_arguments (field) |
| [20] = Reserved |
| [21] = EmptyTypeArguments |
| [22] = InstanceField dart:core::_Closure::_delayed_type_arguments (field) |
| [23] = Reserved |
| [24] = InstanceField dart:core::_Closure::_function (field) |
| [25] = Reserved |
| [26] = StaticICData target 'dart:core::print', arg-desc CP#3 |
| [27] = ICData dynamic target-name 'call', arg-desc CP#3 |
| [28] = StaticICData target 'dart:core::print', arg-desc CP#3 |
| [29] = ICData dynamic target-name 'call', arg-desc CP#3 |
| } |
| Closure #lib::testTryFinally3::<anonymous closure> () -> dart:core::int |
| ClosureBytecode { |
| EntryFixed 1, 6 |
| CheckStack 0 |
| Push FP[-5] |
| LoadFieldTOS CP#1 |
| PopLocal r0 |
| Push r0 |
| LoadContextVar 0, 0 |
| PushConstant CP#4 |
| IndirectStaticCall 1, CP#3 |
| Drop1 |
| Push r0 |
| PopLocal r2 |
| Try #0 start: |
| PushConstant CP#5 |
| PushConstant CP#6 |
| IndirectStaticCall 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#8 |
| PushConstant CP#9 |
| IndirectStaticCall 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 |
| PushConstant CP#10 |
| IndirectStaticCall 1, CP#3 |
| Drop1 |
| Push r4 |
| Push r5 |
| Throw 1 |
| L2: |
| Push r4 |
| PopLocal r0 |
| Push r0 |
| LoadContextVar 0, 0 |
| PushConstant CP#11 |
| IndirectStaticCall 1, CP#3 |
| Drop1 |
| PushInt 43 |
| ReturnTOS |
| L1: |
| Push r2 |
| PopLocal r0 |
| Push r0 |
| PopLocal r4 |
| Try #2 start: |
| PushConstant CP#8 |
| PushConstant CP#12 |
| IndirectStaticCall 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 |
| PushConstant CP#13 |
| IndirectStaticCall 1, CP#3 |
| Drop1 |
| Push r4 |
| Push r5 |
| Throw 1 |
| L3: |
| Push r4 |
| PopLocal r0 |
| Push r0 |
| LoadContextVar 0, 0 |
| PushConstant CP#14 |
| IndirectStaticCall 1, CP#3 |
| Drop1 |
| PushInt 43 |
| ReturnTOS |
| |
| } |
| ]static method testTryFinally3() → dynamic { |
| core::int x = 11; |
| dynamic y; |
| try { |
| y = () → core::int { |
| core::print(x); |
| try { |
| core::print("try 1"); |
| return 42; |
| } |
| finally { |
| try { |
| core::print("try 2"); |
| return 43; |
| } |
| finally { |
| core::print(x); |
| } |
| } |
| }; |
| } |
| finally { |
| core::print(x); |
| [@vm.call-site-attributes.metadata=receiverType:dynamic] y.call(); |
| } |
| } |
| [@vm.bytecode= |
| Bytecode { |
| Entry 5 |
| CheckStack 0 |
| Try #0 start: |
| Try #1 start: |
| PushConstant CP#0 |
| PushConstant CP#2 |
| IndirectStaticCall 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 |
| PushConstant CP#5 |
| IndirectStaticCall 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#6 |
| PushConstant CP#7 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| Push r0 |
| Push r1 |
| Throw 1 |
| L2: |
| PushConstant CP#6 |
| PushConstant CP#8 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| PushNull |
| ReturnTOS |
| } |
| ExceptionsTable { |
| try-index 0, outer -1, start 2, end 18, handler 18, needs-stack-trace, types [CP#3] |
| try-index 1, outer 0, start 2, end 7, handler 7, types [CP#3] |
| } |
| ConstantPool { |
| [0] = String 'try' |
| [1] = ArgDesc num-args 1, num-type-args 0, names [] |
| [2] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| [3] = Type dynamic |
| [4] = String 'catch' |
| [5] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| [6] = String 'finally' |
| [7] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| [8] = StaticICData target 'dart:core::print', arg-desc CP#1 |
| } |
| ]static method testTryCatchFinally() → dynamic { |
| try |
| try { |
| core::print("try"); |
| } |
| on dynamic catch(final dynamic e) { |
| core::print("catch"); |
| } |
| finally { |
| core::print("finally"); |
| } |
| } |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack 0 |
| PushNull |
| ReturnTOS |
| } |
| ConstantPool { |
| } |
| ]static method main() → dynamic {} |