d52d060950
Implicit argument for type arguments vector is not counted in the number of arguments in ArgumentsDescriptor when calling generic functions, but VM requires it to be counted when calling factory constructors. Bytecode generator is adjusted to cope with this discrepancy. Change-Id: Id041563dfc68491b87593bcb6dff5cae64bfedc6 Reviewed-on: https://dart-review.googlesource.com/58961 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Régis Crelier <regis@google.com> Reviewed-by: Zach Anderson <zra@google.com>
2184 lines
61 KiB
Plaintext
2184 lines
61 KiB
Plaintext
library #lib;
|
|
import self as self;
|
|
import "dart:async" as asy;
|
|
import "dart:core" as core;
|
|
|
|
[@vm.bytecode=
|
|
Bytecode {
|
|
Entry 7
|
|
CheckStack
|
|
AllocateContext 4
|
|
StoreLocal r1
|
|
Push r1
|
|
Push r0
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
PushConstant CP#1
|
|
PushConstant CP#3
|
|
IndirectStaticCall 1, CP#2
|
|
StoreFieldTOS CP#4
|
|
Push r0
|
|
PushConstant CP#5
|
|
StoreFieldTOS CP#6
|
|
PushConstant CP#5
|
|
PopLocal r2
|
|
PushConstant CP#5
|
|
PopLocal r3
|
|
PushConstant CP#5
|
|
PopLocal r4
|
|
Push r0
|
|
PushConstant CP#7
|
|
StoreFieldTOS CP#8
|
|
Push r0
|
|
PushConstant CP#5
|
|
StoreFieldTOS CP#9
|
|
Allocate CP#19
|
|
StoreLocal r6
|
|
Push r6
|
|
PushConstant CP#5
|
|
StoreFieldTOS CP#20
|
|
Push r6
|
|
PushConstant CP#5
|
|
StoreFieldTOS CP#21
|
|
Push r6
|
|
PushConstant CP#10
|
|
StoreFieldTOS CP#22
|
|
Push r6
|
|
Push r0
|
|
StoreFieldTOS CP#11
|
|
PopLocal r5
|
|
Push r5
|
|
PushConstant CP#23
|
|
IndirectStaticCall 1, CP#2
|
|
StoreLocal r2
|
|
Drop1
|
|
Push r5
|
|
PushConstant CP#24
|
|
IndirectStaticCall 1, CP#2
|
|
StoreLocal r3
|
|
Drop1
|
|
Push r5
|
|
PushConstant CP#25
|
|
IndirectStaticCall 1, CP#2
|
|
StoreLocal r4
|
|
Drop1
|
|
PushConstant CP#26
|
|
Push r5
|
|
PushConstant CP#27
|
|
IndirectStaticCall 2, CP#13
|
|
Drop1
|
|
Push r0
|
|
LoadFieldTOS CP#4
|
|
InstanceCall1 1, CP#28
|
|
ReturnTOS
|
|
Push r0
|
|
LoadFieldTOS CP#0
|
|
PopLocal r0
|
|
PushConstant CP#5
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ContextOffset parent
|
|
[1] = TypeArgs [dart.core::int]
|
|
[2] = ArgDesc num-args 1, num-type-args 0, names []
|
|
[3] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#2
|
|
[4] = ContextOffset var [3]
|
|
[5] = Null
|
|
[6] = ContextOffset var [2]
|
|
[7] = Int 0
|
|
[8] = ContextOffset var [0]
|
|
[9] = ContextOffset var [1]
|
|
[10] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
|
|
[11] = FieldOffset dart.core::_Closure::_context
|
|
[12] = Int 42
|
|
[13] = ArgDesc num-args 2, num-type-args 0, names []
|
|
[14] = ICData target-name 'complete', arg-desc CP#13
|
|
[15] = Type dynamic
|
|
[16] = ArgDesc num-args 3, num-type-args 0, names []
|
|
[17] = ICData target-name 'completeError', arg-desc CP#16
|
|
[18] = EndClosureFunctionScope
|
|
[19] = Class dart.core::_Closure
|
|
[20] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
|
|
[21] = FieldOffset dart.core::_Closure::_function_type_arguments
|
|
[22] = FieldOffset dart.core::_Closure::_function
|
|
[23] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#2
|
|
[24] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#2
|
|
[25] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#2
|
|
[26] = TypeArgs [dynamic]
|
|
[27] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#13
|
|
[28] = ICData get target-name 'future', arg-desc CP#2
|
|
}
|
|
Closure CP#10 {
|
|
EntryOptional 1, 3, 0
|
|
LoadConstant r1, CP#5
|
|
LoadConstant r2, CP#5
|
|
LoadConstant r3, CP#5
|
|
Frame 6
|
|
CheckStack
|
|
Push r0
|
|
LoadFieldTOS CP#11
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#8
|
|
StoreLocal r5
|
|
PushConstant CP#7
|
|
IfNeStrictNumTOS
|
|
Jump L1
|
|
Push r4
|
|
PopLocal r6
|
|
Try #0 start:
|
|
Push r4
|
|
PushConstant CP#12
|
|
StoreLocal r8
|
|
StoreFieldTOS CP#6
|
|
Push r8
|
|
Drop1
|
|
Jump L2
|
|
L2:
|
|
Push r4
|
|
LoadFieldTOS CP#4
|
|
Push r4
|
|
LoadFieldTOS CP#6
|
|
InstanceCall1 2, CP#14
|
|
Drop1
|
|
PushConstant CP#5
|
|
ReturnTOS
|
|
Jump L3
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
Push r6
|
|
PopLocal r4
|
|
MoveSpecial r6, exception
|
|
MoveSpecial r7, stackTrace
|
|
Push r6
|
|
PopLocal r8
|
|
Push r7
|
|
PopLocal r9
|
|
Push r4
|
|
LoadFieldTOS CP#4
|
|
Push r8
|
|
Push r9
|
|
InstanceCall1 3, CP#17
|
|
Drop1
|
|
Jump L3
|
|
L3:
|
|
PushConstant CP#5
|
|
ReturnTOS
|
|
L1:
|
|
Trap
|
|
|
|
}
|
|
]static method foo() → asy::Future<core::int> /* originally async */ {
|
|
final asy::Completer<core::int> :async_completer = asy::Completer::sync<core::int>();
|
|
asy::FutureOr<core::int> :return_value;
|
|
dynamic :async_stack_trace;
|
|
dynamic :async_op_then;
|
|
dynamic :async_op_error;
|
|
dynamic :await_jump_var = 0;
|
|
dynamic :await_ctx_var;
|
|
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
|
|
try {
|
|
#L1:
|
|
{
|
|
:return_value = 42;
|
|
break #L1;
|
|
}
|
|
:async_completer.{asy::Completer::complete}(:return_value);
|
|
return;
|
|
}
|
|
on dynamic catch(dynamic :exception, dynamic :stack_trace) {
|
|
:async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
|
|
}
|
|
:async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
|
|
:async_op_then = asy::_asyncThenWrapperHelper(:async_op);
|
|
:async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
|
|
asy::Future::microtask<dynamic>(:async_op);
|
|
return :async_completer.{asy::Completer::future};
|
|
}
|
|
[@vm.bytecode=
|
|
Bytecode {
|
|
Entry 4
|
|
CheckStack
|
|
AllocateContext 2
|
|
StoreLocal r1
|
|
Push r1
|
|
Push r0
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
Push FP[-6]
|
|
StoreFieldTOS CP#1
|
|
Push r0
|
|
Push FP[-5]
|
|
StoreFieldTOS CP#2
|
|
AllocateContext 9
|
|
StoreLocal r1
|
|
Push r1
|
|
Push r0
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
PushConstant CP#3
|
|
PushConstant CP#5
|
|
IndirectStaticCall 1, CP#4
|
|
StoreFieldTOS CP#6
|
|
Push r0
|
|
PushConstant CP#7
|
|
StoreFieldTOS CP#8
|
|
PushConstant CP#7
|
|
PopLocal r2
|
|
Push r0
|
|
PushConstant CP#7
|
|
StoreFieldTOS CP#9
|
|
Push r0
|
|
PushConstant CP#7
|
|
StoreFieldTOS CP#10
|
|
Push r0
|
|
PushConstant CP#11
|
|
StoreFieldTOS CP#1
|
|
Push r0
|
|
PushConstant CP#7
|
|
StoreFieldTOS CP#2
|
|
Push r0
|
|
PushConstant CP#7
|
|
StoreFieldTOS CP#12
|
|
Push r0
|
|
PushConstant CP#7
|
|
StoreFieldTOS CP#13
|
|
Push r0
|
|
Allocate CP#29
|
|
StoreLocal r3
|
|
Push r3
|
|
PushConstant CP#7
|
|
StoreFieldTOS CP#30
|
|
Push r3
|
|
PushConstant CP#7
|
|
StoreFieldTOS CP#31
|
|
Push r3
|
|
PushConstant CP#14
|
|
StoreFieldTOS CP#32
|
|
Push r3
|
|
Push r0
|
|
StoreFieldTOS CP#15
|
|
StoreFieldTOS CP#17
|
|
Push r0
|
|
LoadFieldTOS CP#17
|
|
PushConstant CP#33
|
|
IndirectStaticCall 1, CP#4
|
|
StoreLocal r2
|
|
Drop1
|
|
Push r0
|
|
Push r0
|
|
LoadFieldTOS CP#17
|
|
PushConstant CP#34
|
|
IndirectStaticCall 1, CP#4
|
|
StoreLocal r3
|
|
StoreFieldTOS CP#9
|
|
Push r3
|
|
Drop1
|
|
Push r0
|
|
Push r0
|
|
LoadFieldTOS CP#17
|
|
PushConstant CP#35
|
|
IndirectStaticCall 1, CP#4
|
|
StoreLocal r3
|
|
StoreFieldTOS CP#10
|
|
Push r3
|
|
Drop1
|
|
PushConstant CP#36
|
|
Push r0
|
|
LoadFieldTOS CP#17
|
|
PushConstant CP#37
|
|
IndirectStaticCall 2, CP#22
|
|
Drop1
|
|
Push r0
|
|
LoadFieldTOS CP#6
|
|
InstanceCall1 1, CP#38
|
|
ReturnTOS
|
|
Push r0
|
|
LoadFieldTOS CP#0
|
|
PopLocal r0
|
|
PushConstant CP#7
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ContextOffset parent
|
|
[1] = ContextOffset var [0]
|
|
[2] = ContextOffset var [1]
|
|
[3] = TypeArgs [dart.core::int]
|
|
[4] = ArgDesc num-args 1, num-type-args 0, names []
|
|
[5] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#4
|
|
[6] = ContextOffset var [8]
|
|
[7] = Null
|
|
[8] = ContextOffset var [7]
|
|
[9] = ContextOffset var [3]
|
|
[10] = ContextOffset var [4]
|
|
[11] = Int 0
|
|
[12] = ContextOffset var [2]
|
|
[13] = ContextOffset var [6]
|
|
[14] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
|
|
[15] = FieldOffset dart.core::_Closure::_context
|
|
[16] = Int 1
|
|
[17] = ContextOffset var [5]
|
|
[18] = ArgDesc num-args 4, num-type-args 0, names []
|
|
[19] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#18
|
|
[20] = Int 2
|
|
[21] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#18
|
|
[22] = ArgDesc num-args 2, num-type-args 0, names []
|
|
[23] = ICData target-name '+', arg-desc CP#22
|
|
[24] = ICData target-name 'complete', arg-desc CP#22
|
|
[25] = Type dynamic
|
|
[26] = ArgDesc num-args 3, num-type-args 0, names []
|
|
[27] = ICData target-name 'completeError', arg-desc CP#26
|
|
[28] = EndClosureFunctionScope
|
|
[29] = Class dart.core::_Closure
|
|
[30] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
|
|
[31] = FieldOffset dart.core::_Closure::_function_type_arguments
|
|
[32] = FieldOffset dart.core::_Closure::_function
|
|
[33] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#4
|
|
[34] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#4
|
|
[35] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#4
|
|
[36] = TypeArgs [dynamic]
|
|
[37] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#22
|
|
[38] = ICData get target-name 'future', arg-desc CP#4
|
|
}
|
|
Closure CP#14 {
|
|
EntryOptional 1, 3, 0
|
|
LoadConstant r1, CP#7
|
|
LoadConstant r2, CP#7
|
|
LoadConstant r3, CP#7
|
|
Frame 6
|
|
CheckStack
|
|
Push r0
|
|
LoadFieldTOS CP#15
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r5
|
|
PushConstant CP#11
|
|
IfNeStrictNumTOS
|
|
Jump L1
|
|
Push r4
|
|
Push r4
|
|
StoreFieldTOS CP#12
|
|
Try #0 start:
|
|
Push r4
|
|
PushConstant CP#16
|
|
StoreFieldTOS CP#1
|
|
Push r4
|
|
Push r4
|
|
StoreFieldTOS CP#2
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#9
|
|
Push r4
|
|
LoadFieldTOS CP#10
|
|
Push r4
|
|
LoadFieldTOS CP#17
|
|
PushConstant CP#19
|
|
IndirectStaticCall 4, CP#18
|
|
PopLocal r8
|
|
PushConstant CP#7
|
|
ReturnTOS
|
|
L6:
|
|
IfEqNull r2
|
|
Jump L2
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L2:
|
|
Push r4
|
|
Push r1
|
|
StoreLocal r8
|
|
StoreFieldTOS CP#13
|
|
Push r8
|
|
Drop1
|
|
Push r4
|
|
PushConstant CP#20
|
|
StoreFieldTOS CP#1
|
|
Push r4
|
|
Push r4
|
|
StoreFieldTOS CP#2
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#2
|
|
Push r4
|
|
LoadFieldTOS CP#9
|
|
Push r4
|
|
LoadFieldTOS CP#10
|
|
Push r4
|
|
LoadFieldTOS CP#17
|
|
PushConstant CP#21
|
|
IndirectStaticCall 4, CP#18
|
|
PopLocal r9
|
|
PushConstant CP#7
|
|
ReturnTOS
|
|
L7:
|
|
IfEqNull r2
|
|
Jump L3
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L3:
|
|
Push r4
|
|
Push r4
|
|
LoadFieldTOS CP#13
|
|
Push r1
|
|
InstanceCall1 2, CP#23
|
|
StoreLocal r8
|
|
StoreFieldTOS CP#8
|
|
Push r8
|
|
Drop1
|
|
Jump L4
|
|
L4:
|
|
Push r4
|
|
LoadFieldTOS CP#6
|
|
Push r4
|
|
LoadFieldTOS CP#8
|
|
InstanceCall1 2, CP#24
|
|
Drop1
|
|
PushConstant CP#7
|
|
ReturnTOS
|
|
Jump L5
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
Push r0
|
|
LoadFieldTOS CP#15
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#12
|
|
PopLocal r4
|
|
MoveSpecial r6, exception
|
|
MoveSpecial r7, stackTrace
|
|
Push r6
|
|
PopLocal r8
|
|
Push r7
|
|
PopLocal r9
|
|
Push r4
|
|
LoadFieldTOS CP#6
|
|
Push r8
|
|
Push r9
|
|
InstanceCall1 3, CP#27
|
|
Drop1
|
|
Jump L5
|
|
L5:
|
|
PushConstant CP#7
|
|
ReturnTOS
|
|
L1:
|
|
Push r4
|
|
LoadFieldTOS CP#2
|
|
PopLocal r4
|
|
Push r5
|
|
PushConstant CP#16
|
|
IfEqStrictNumTOS
|
|
Jump L6
|
|
Jump L7
|
|
|
|
}
|
|
]static method simpleAsyncAwait(asy::Future<core::int> a, asy::Future<core::int> b) → asy::Future<core::int> /* originally async */ {
|
|
final asy::Completer<core::int> :async_completer = asy::Completer::sync<core::int>();
|
|
asy::FutureOr<core::int> :return_value;
|
|
dynamic :async_stack_trace;
|
|
dynamic :async_op_then;
|
|
dynamic :async_op_error;
|
|
dynamic :await_jump_var = 0;
|
|
dynamic :await_ctx_var;
|
|
dynamic :saved_try_context_var0;
|
|
dynamic :async_temporary_0;
|
|
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
|
|
try {
|
|
#L2:
|
|
{
|
|
[yield] let dynamic #t1 = asy::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
|
|
:async_temporary_0 = :result;
|
|
[yield] let dynamic #t2 = asy::_awaitHelper(b, :async_op_then, :async_op_error, :async_op) in null;
|
|
:return_value = :async_temporary_0.{core::num::+}(:result);
|
|
break #L2;
|
|
}
|
|
:async_completer.{asy::Completer::complete}(:return_value);
|
|
return;
|
|
}
|
|
on dynamic catch(dynamic :exception, dynamic :stack_trace) {
|
|
:async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
|
|
}
|
|
:async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
|
|
:async_op_then = asy::_asyncThenWrapperHelper(:async_op);
|
|
:async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
|
|
asy::Future::microtask<dynamic>(:async_op);
|
|
return :async_completer.{asy::Completer::future};
|
|
}
|
|
[@vm.bytecode=
|
|
Bytecode {
|
|
Entry 4
|
|
CheckStack
|
|
AllocateContext 1
|
|
StoreLocal r1
|
|
Push r1
|
|
Push r0
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
Push FP[-5]
|
|
StoreFieldTOS CP#1
|
|
AllocateContext 10
|
|
StoreLocal r1
|
|
Push r1
|
|
Push r0
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
PushConstant CP#2
|
|
PushConstant CP#4
|
|
IndirectStaticCall 1, CP#3
|
|
StoreFieldTOS CP#5
|
|
Push r0
|
|
PushConstant CP#6
|
|
StoreFieldTOS CP#7
|
|
PushConstant CP#6
|
|
PopLocal r2
|
|
Push r0
|
|
PushConstant CP#6
|
|
StoreFieldTOS CP#8
|
|
Push r0
|
|
PushConstant CP#6
|
|
StoreFieldTOS CP#9
|
|
Push r0
|
|
PushConstant CP#10
|
|
StoreFieldTOS CP#1
|
|
Push r0
|
|
PushConstant CP#6
|
|
StoreFieldTOS CP#11
|
|
Push r0
|
|
PushConstant CP#6
|
|
StoreFieldTOS CP#12
|
|
Push r0
|
|
PushConstant CP#6
|
|
StoreFieldTOS CP#13
|
|
Push r0
|
|
PushConstant CP#6
|
|
StoreFieldTOS CP#14
|
|
Push r0
|
|
Allocate CP#42
|
|
StoreLocal r3
|
|
Push r3
|
|
PushConstant CP#6
|
|
StoreFieldTOS CP#43
|
|
Push r3
|
|
PushConstant CP#6
|
|
StoreFieldTOS CP#44
|
|
Push r3
|
|
PushConstant CP#15
|
|
StoreFieldTOS CP#45
|
|
Push r3
|
|
Push r0
|
|
StoreFieldTOS CP#16
|
|
StoreFieldTOS CP#28
|
|
Push r0
|
|
LoadFieldTOS CP#28
|
|
PushConstant CP#46
|
|
IndirectStaticCall 1, CP#3
|
|
StoreLocal r2
|
|
Drop1
|
|
Push r0
|
|
Push r0
|
|
LoadFieldTOS CP#28
|
|
PushConstant CP#47
|
|
IndirectStaticCall 1, CP#3
|
|
StoreLocal r3
|
|
StoreFieldTOS CP#8
|
|
Push r3
|
|
Drop1
|
|
Push r0
|
|
Push r0
|
|
LoadFieldTOS CP#28
|
|
PushConstant CP#48
|
|
IndirectStaticCall 1, CP#3
|
|
StoreLocal r3
|
|
StoreFieldTOS CP#9
|
|
Push r3
|
|
Drop1
|
|
PushConstant CP#49
|
|
Push r0
|
|
LoadFieldTOS CP#28
|
|
PushConstant CP#50
|
|
IndirectStaticCall 2, CP#18
|
|
Drop1
|
|
Push r0
|
|
LoadFieldTOS CP#5
|
|
InstanceCall1 1, CP#51
|
|
ReturnTOS
|
|
Push r0
|
|
LoadFieldTOS CP#0
|
|
PopLocal r0
|
|
PushConstant CP#6
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ContextOffset parent
|
|
[1] = ContextOffset var [0]
|
|
[2] = TypeArgs [dart.core::int]
|
|
[3] = ArgDesc num-args 1, num-type-args 0, names []
|
|
[4] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#3
|
|
[5] = ContextOffset var [9]
|
|
[6] = Null
|
|
[7] = ContextOffset var [8]
|
|
[8] = ContextOffset var [5]
|
|
[9] = ContextOffset var [6]
|
|
[10] = Int 0
|
|
[11] = ContextOffset var [1]
|
|
[12] = ContextOffset var [4]
|
|
[13] = ContextOffset var [3]
|
|
[14] = ContextOffset var [2]
|
|
[15] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
|
|
[16] = FieldOffset dart.core::_Closure::_context
|
|
[17] = Int 10
|
|
[18] = ArgDesc num-args 2, num-type-args 0, names []
|
|
[19] = ICData target-name '<', arg-desc CP#18
|
|
[20] = Bool true
|
|
[21] = ICData get target-name 'iterator', arg-desc CP#3
|
|
[22] = ICData target-name 'moveNext', arg-desc CP#3
|
|
[23] = ICData get target-name 'current', arg-desc CP#3
|
|
[24] = ICData target-name '+', arg-desc CP#18
|
|
[25] = Int 1
|
|
[26] = ArgDesc num-args 0, num-type-args 0, names []
|
|
[27] = StaticICData target '#lib::foo', arg-desc CP#26
|
|
[28] = ContextOffset var [7]
|
|
[29] = ArgDesc num-args 4, num-type-args 0, names []
|
|
[30] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#29
|
|
[31] = ICData target-name '+', arg-desc CP#18
|
|
[32] = ICData target-name '+', arg-desc CP#18
|
|
[33] = ICData target-name '+', arg-desc CP#18
|
|
[34] = ICData target-name '<', arg-desc CP#18
|
|
[35] = ICData target-name '+', arg-desc CP#18
|
|
[36] = ICData target-name '+', arg-desc CP#18
|
|
[37] = ICData target-name 'complete', arg-desc CP#18
|
|
[38] = Type dynamic
|
|
[39] = ArgDesc num-args 3, num-type-args 0, names []
|
|
[40] = ICData target-name 'completeError', arg-desc CP#39
|
|
[41] = EndClosureFunctionScope
|
|
[42] = Class dart.core::_Closure
|
|
[43] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
|
|
[44] = FieldOffset dart.core::_Closure::_function_type_arguments
|
|
[45] = FieldOffset dart.core::_Closure::_function
|
|
[46] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#3
|
|
[47] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#3
|
|
[48] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#3
|
|
[49] = TypeArgs [dynamic]
|
|
[50] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#18
|
|
[51] = ICData get target-name 'future', arg-desc CP#3
|
|
}
|
|
Closure CP#15 {
|
|
EntryOptional 1, 3, 0
|
|
LoadConstant r1, CP#6
|
|
LoadConstant r2, CP#6
|
|
LoadConstant r3, CP#6
|
|
Frame 7
|
|
CheckStack
|
|
Push r0
|
|
LoadFieldTOS CP#16
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r5
|
|
PushConstant CP#10
|
|
IfNeStrictNumTOS
|
|
Jump L1
|
|
Push r4
|
|
Push r4
|
|
StoreFieldTOS CP#12
|
|
Try #0 start:
|
|
AllocateContext 1
|
|
StoreLocal r5
|
|
Push r5
|
|
Push r4
|
|
StoreFieldTOS CP#0
|
|
PopLocal r4
|
|
Push r4
|
|
PushConstant CP#10
|
|
StoreFieldTOS CP#1
|
|
AllocateContext 1
|
|
StoreLocal r5
|
|
Push r5
|
|
Push r4
|
|
StoreFieldTOS CP#0
|
|
PopLocal r4
|
|
Push r4
|
|
PushConstant CP#10
|
|
StoreFieldTOS CP#1
|
|
L6:
|
|
CheckStack
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
PushConstant CP#17
|
|
InstanceCall1 2, CP#19
|
|
PushConstant CP#20
|
|
IfNeStrictTOS
|
|
Jump L2
|
|
AllocateContext 1
|
|
StoreLocal r5
|
|
Push r5
|
|
Push r4
|
|
StoreFieldTOS CP#0
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#1
|
|
InstanceCall1 1, CP#21
|
|
PopLocal r8
|
|
Push r4
|
|
Push r8
|
|
StoreFieldTOS CP#1
|
|
L5:
|
|
CheckStack
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r8
|
|
InstanceCall1 1, CP#22
|
|
PushConstant CP#20
|
|
IfNeStrictTOS
|
|
Jump L3
|
|
AllocateContext 1
|
|
StoreLocal r5
|
|
Push r5
|
|
Push r4
|
|
StoreFieldTOS CP#0
|
|
PopLocal r4
|
|
Push r4
|
|
Push r8
|
|
InstanceCall1 1, CP#23
|
|
StoreFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r9
|
|
StoreFieldTOS CP#14
|
|
Push r9
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
InstanceCall1 2, CP#24
|
|
StoreLocal r9
|
|
StoreFieldTOS CP#13
|
|
Push r9
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
PushConstant CP#25
|
|
StoreFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
StoreFieldTOS CP#11
|
|
PushConstant CP#27
|
|
IndirectStaticCall 0, CP#26
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#8
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#9
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#28
|
|
PushConstant CP#30
|
|
IndirectStaticCall 4, CP#29
|
|
PopLocal r10
|
|
PushConstant CP#6
|
|
ReturnTOS
|
|
L11:
|
|
IfEqNull r2
|
|
Jump L4
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L4:
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#14
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#13
|
|
Push r1
|
|
InstanceCall1 2, CP#31
|
|
InstanceCall1 2, CP#32
|
|
StoreLocal r9
|
|
StoreFieldTOS CP#1
|
|
Push r9
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PopLocal r4
|
|
Jump L5
|
|
L3:
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PopLocal r4
|
|
Push r4
|
|
CloneContext
|
|
PopLocal r4
|
|
Push r4
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
PushConstant CP#25
|
|
InstanceCall1 2, CP#33
|
|
StoreLocal r8
|
|
StoreFieldTOS CP#1
|
|
Push r8
|
|
Drop1
|
|
Jump L6
|
|
L2:
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PopLocal r4
|
|
PushConstant CP#10
|
|
PopLocal r8
|
|
L8:
|
|
CheckStack
|
|
Push r8
|
|
PushConstant CP#17
|
|
InstanceCall1 2, CP#34
|
|
PushConstant CP#20
|
|
IfNeStrictTOS
|
|
Jump L7
|
|
Push r4
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
Push r8
|
|
InstanceCall1 2, CP#35
|
|
StoreLocal r9
|
|
StoreFieldTOS CP#1
|
|
Push r9
|
|
Drop1
|
|
Push r8
|
|
PushConstant CP#25
|
|
InstanceCall1 2, CP#36
|
|
StoreLocal r8
|
|
Drop1
|
|
Jump L8
|
|
L7:
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r8
|
|
StoreFieldTOS CP#7
|
|
Push r8
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PopLocal r4
|
|
Jump L9
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PopLocal r4
|
|
L9:
|
|
Push r4
|
|
LoadFieldTOS CP#5
|
|
Push r4
|
|
LoadFieldTOS CP#7
|
|
InstanceCall1 2, CP#37
|
|
Drop1
|
|
PushConstant CP#6
|
|
ReturnTOS
|
|
Jump L10
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
Push r0
|
|
LoadFieldTOS CP#16
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#12
|
|
PopLocal r4
|
|
MoveSpecial r6, exception
|
|
MoveSpecial r7, stackTrace
|
|
Push r6
|
|
PopLocal r8
|
|
Push r7
|
|
PopLocal r9
|
|
Push r4
|
|
LoadFieldTOS CP#5
|
|
Push r8
|
|
Push r9
|
|
InstanceCall1 3, CP#40
|
|
Drop1
|
|
Jump L10
|
|
L10:
|
|
PushConstant CP#6
|
|
ReturnTOS
|
|
L1:
|
|
Push r4
|
|
LoadFieldTOS CP#11
|
|
PopLocal r4
|
|
Jump L11
|
|
|
|
}
|
|
]static method loops(core::List<core::int> list) → asy::Future<core::int> /* originally async */ {
|
|
final asy::Completer<core::int> :async_completer = asy::Completer::sync<core::int>();
|
|
asy::FutureOr<core::int> :return_value;
|
|
dynamic :async_stack_trace;
|
|
dynamic :async_op_then;
|
|
dynamic :async_op_error;
|
|
dynamic :await_jump_var = 0;
|
|
dynamic :await_ctx_var;
|
|
dynamic :saved_try_context_var0;
|
|
dynamic :async_temporary_0;
|
|
dynamic :async_temporary_1;
|
|
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
|
|
try {
|
|
#L3:
|
|
{
|
|
core::int sum = 0;
|
|
for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
|
|
for (core::int j in list) {
|
|
:async_temporary_1 = sum;
|
|
:async_temporary_0 = i.{core::num::+}(j);
|
|
[yield] let dynamic #t3 = asy::_awaitHelper(self::foo(), :async_op_then, :async_op_error, :async_op) in null;
|
|
sum = :async_temporary_1.{core::num::+}(:async_temporary_0.{core::num::+}(:result));
|
|
}
|
|
}
|
|
for (core::int k = 0; k.{core::num::<}(10); k = k.{core::num::+}(1)) {
|
|
sum = sum.{core::num::+}(k);
|
|
}
|
|
:return_value = sum;
|
|
break #L3;
|
|
}
|
|
:async_completer.{asy::Completer::complete}(:return_value);
|
|
return;
|
|
}
|
|
on dynamic catch(dynamic :exception, dynamic :stack_trace) {
|
|
:async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
|
|
}
|
|
:async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
|
|
:async_op_then = asy::_asyncThenWrapperHelper(:async_op);
|
|
:async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
|
|
asy::Future::microtask<dynamic>(:async_op);
|
|
return :async_completer.{asy::Completer::future};
|
|
}
|
|
[@vm.bytecode=
|
|
Bytecode {
|
|
Entry 4
|
|
CheckStack
|
|
AllocateContext 3
|
|
StoreLocal r1
|
|
Push r1
|
|
Push r0
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
Push FP[-7]
|
|
StoreFieldTOS CP#1
|
|
Push r0
|
|
Push FP[-6]
|
|
StoreFieldTOS CP#2
|
|
Push r0
|
|
Push FP[-5]
|
|
StoreFieldTOS CP#3
|
|
AllocateContext 13
|
|
StoreLocal r1
|
|
Push r1
|
|
Push r0
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
PushConstant CP#4
|
|
PushConstant CP#6
|
|
IndirectStaticCall 1, CP#5
|
|
StoreFieldTOS CP#7
|
|
Push r0
|
|
PushConstant CP#8
|
|
StoreFieldTOS CP#9
|
|
PushConstant CP#8
|
|
PopLocal r2
|
|
Push r0
|
|
PushConstant CP#8
|
|
StoreFieldTOS CP#10
|
|
Push r0
|
|
PushConstant CP#8
|
|
StoreFieldTOS CP#11
|
|
Push r0
|
|
PushConstant CP#12
|
|
StoreFieldTOS CP#1
|
|
Push r0
|
|
PushConstant CP#8
|
|
StoreFieldTOS CP#2
|
|
Push r0
|
|
PushConstant CP#8
|
|
StoreFieldTOS CP#13
|
|
Push r0
|
|
PushConstant CP#8
|
|
StoreFieldTOS CP#14
|
|
Push r0
|
|
PushConstant CP#8
|
|
StoreFieldTOS CP#15
|
|
Push r0
|
|
PushConstant CP#8
|
|
StoreFieldTOS CP#16
|
|
Push r0
|
|
PushConstant CP#8
|
|
StoreFieldTOS CP#17
|
|
Push r0
|
|
PushConstant CP#8
|
|
StoreFieldTOS CP#3
|
|
Push r0
|
|
Allocate CP#51
|
|
StoreLocal r3
|
|
Push r3
|
|
PushConstant CP#8
|
|
StoreFieldTOS CP#52
|
|
Push r3
|
|
PushConstant CP#8
|
|
StoreFieldTOS CP#53
|
|
Push r3
|
|
PushConstant CP#18
|
|
StoreFieldTOS CP#54
|
|
Push r3
|
|
Push r0
|
|
StoreFieldTOS CP#19
|
|
StoreFieldTOS CP#21
|
|
Push r0
|
|
LoadFieldTOS CP#21
|
|
PushConstant CP#55
|
|
IndirectStaticCall 1, CP#5
|
|
StoreLocal r2
|
|
Drop1
|
|
Push r0
|
|
Push r0
|
|
LoadFieldTOS CP#21
|
|
PushConstant CP#56
|
|
IndirectStaticCall 1, CP#5
|
|
StoreLocal r3
|
|
StoreFieldTOS CP#10
|
|
Push r3
|
|
Drop1
|
|
Push r0
|
|
Push r0
|
|
LoadFieldTOS CP#21
|
|
PushConstant CP#57
|
|
IndirectStaticCall 1, CP#5
|
|
StoreLocal r3
|
|
StoreFieldTOS CP#11
|
|
Push r3
|
|
Drop1
|
|
PushConstant CP#58
|
|
Push r0
|
|
LoadFieldTOS CP#21
|
|
PushConstant CP#59
|
|
IndirectStaticCall 2, CP#24
|
|
Drop1
|
|
Push r0
|
|
LoadFieldTOS CP#7
|
|
InstanceCall1 1, CP#60
|
|
ReturnTOS
|
|
Push r0
|
|
LoadFieldTOS CP#0
|
|
PopLocal r0
|
|
PushConstant CP#8
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ContextOffset parent
|
|
[1] = ContextOffset var [0]
|
|
[2] = ContextOffset var [1]
|
|
[3] = ContextOffset var [2]
|
|
[4] = TypeArgs [dart.core::int]
|
|
[5] = ArgDesc num-args 1, num-type-args 0, names []
|
|
[6] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#5
|
|
[7] = ContextOffset var [12]
|
|
[8] = Null
|
|
[9] = ContextOffset var [9]
|
|
[10] = ContextOffset var [6]
|
|
[11] = ContextOffset var [7]
|
|
[12] = Int 0
|
|
[13] = ContextOffset var [3]
|
|
[14] = ContextOffset var [4]
|
|
[15] = ContextOffset var [5]
|
|
[16] = ContextOffset var [10]
|
|
[17] = ContextOffset var [11]
|
|
[18] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
|
|
[19] = FieldOffset dart.core::_Closure::_context
|
|
[20] = Int 1
|
|
[21] = ContextOffset var [8]
|
|
[22] = ArgDesc num-args 4, num-type-args 0, names []
|
|
[23] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#22
|
|
[24] = ArgDesc num-args 2, num-type-args 0, names []
|
|
[25] = ICData target-name '+', arg-desc CP#24
|
|
[26] = Type dynamic
|
|
[27] = Type dart.core::Error
|
|
[28] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#22
|
|
[29] = Bool true
|
|
[30] = Int 42
|
|
[31] = Int 2
|
|
[32] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#22
|
|
[33] = ICData target-name '+', arg-desc CP#24
|
|
[34] = String 'fin'
|
|
[35] = StaticICData target 'dart.core::print', arg-desc CP#5
|
|
[36] = Int 3
|
|
[37] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#22
|
|
[38] = ICData target-name '+', arg-desc CP#24
|
|
[39] = StaticICData target 'dart.core::print', arg-desc CP#5
|
|
[40] = Int 4
|
|
[41] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#22
|
|
[42] = ICData target-name '+', arg-desc CP#24
|
|
[43] = StaticICData target 'dart.core::print', arg-desc CP#5
|
|
[44] = Int 5
|
|
[45] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#22
|
|
[46] = ICData target-name '+', arg-desc CP#24
|
|
[47] = ICData target-name 'complete', arg-desc CP#24
|
|
[48] = ArgDesc num-args 3, num-type-args 0, names []
|
|
[49] = ICData target-name 'completeError', arg-desc CP#48
|
|
[50] = EndClosureFunctionScope
|
|
[51] = Class dart.core::_Closure
|
|
[52] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
|
|
[53] = FieldOffset dart.core::_Closure::_function_type_arguments
|
|
[54] = FieldOffset dart.core::_Closure::_function
|
|
[55] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#5
|
|
[56] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#5
|
|
[57] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#5
|
|
[58] = TypeArgs [dynamic]
|
|
[59] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#24
|
|
[60] = ICData get target-name 'future', arg-desc CP#5
|
|
}
|
|
Closure CP#18 {
|
|
EntryOptional 1, 3, 0
|
|
LoadConstant r1, CP#8
|
|
LoadConstant r2, CP#8
|
|
LoadConstant r3, CP#8
|
|
Frame 10
|
|
CheckStack
|
|
Push r0
|
|
LoadFieldTOS CP#19
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r5
|
|
PushConstant CP#12
|
|
IfNeStrictNumTOS
|
|
Jump L1
|
|
Push r4
|
|
Push r4
|
|
StoreFieldTOS CP#13
|
|
Try #0 start:
|
|
AllocateContext 1
|
|
StoreLocal r5
|
|
Push r5
|
|
Push r4
|
|
StoreFieldTOS CP#0
|
|
PopLocal r4
|
|
Push r4
|
|
PushConstant CP#20
|
|
StoreFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
StoreFieldTOS CP#14
|
|
Try #1 start:
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
StoreFieldTOS CP#15
|
|
Try #2 start:
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r12
|
|
StoreFieldTOS CP#3
|
|
Push r12
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PushConstant CP#20
|
|
StoreFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
StoreFieldTOS CP#2
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#10
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#11
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#21
|
|
PushConstant CP#23
|
|
IndirectStaticCall 4, CP#22
|
|
PopLocal r13
|
|
PushConstant CP#8
|
|
ReturnTOS
|
|
L13:
|
|
IfEqNull r2
|
|
Jump L2
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L2:
|
|
Push r4
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#3
|
|
Push r1
|
|
InstanceCall1 2, CP#25
|
|
StoreLocal r12
|
|
StoreFieldTOS CP#1
|
|
Push r12
|
|
Drop1
|
|
Jump L3
|
|
Try #2 end:
|
|
Try #2 handler:
|
|
Push r0
|
|
LoadFieldTOS CP#19
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#15
|
|
PopLocal r4
|
|
MoveSpecial r10, exception
|
|
MoveSpecial r11, stackTrace
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r10
|
|
StoreFieldTOS CP#16
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r11
|
|
StoreFieldTOS CP#17
|
|
AllocateContext 1
|
|
StoreLocal r5
|
|
Push r5
|
|
Push r4
|
|
StoreFieldTOS CP#0
|
|
PopLocal r4
|
|
Push r4
|
|
Push r10
|
|
StoreFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
PushConstant CP#8
|
|
PushConstant CP#8
|
|
PushConstant CP#27
|
|
InstanceCall1 4, CP#28
|
|
PushConstant CP#29
|
|
IfNeStrictTOS
|
|
Jump L4
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
PushConstant CP#30
|
|
StoreLocal r12
|
|
StoreFieldTOS CP#9
|
|
Push r12
|
|
Drop1
|
|
Jump L5
|
|
L4:
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r12
|
|
StoreFieldTOS CP#3
|
|
Push r12
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
PushConstant CP#31
|
|
StoreFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
StoreFieldTOS CP#2
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#2
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#10
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#11
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#21
|
|
PushConstant CP#32
|
|
IndirectStaticCall 4, CP#22
|
|
PopLocal r13
|
|
PushConstant CP#8
|
|
ReturnTOS
|
|
L14:
|
|
IfEqNull r2
|
|
Jump L6
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L6:
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#3
|
|
Push r1
|
|
InstanceCall1 2, CP#33
|
|
StoreLocal r12
|
|
StoreFieldTOS CP#1
|
|
Push r12
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#16
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#17
|
|
Throw 1
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PopLocal r4
|
|
Jump L3
|
|
L3:
|
|
Jump L7
|
|
Try #1 end:
|
|
Try #1 handler:
|
|
Push r0
|
|
LoadFieldTOS CP#19
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#14
|
|
PopLocal r4
|
|
MoveSpecial r8, exception
|
|
MoveSpecial r9, stackTrace
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r8
|
|
StoreFieldTOS CP#16
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r9
|
|
StoreFieldTOS CP#17
|
|
PushConstant CP#34
|
|
PushConstant CP#35
|
|
IndirectStaticCall 1, CP#5
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r10
|
|
StoreFieldTOS CP#3
|
|
Push r10
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PushConstant CP#36
|
|
StoreFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
StoreFieldTOS CP#2
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#3
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#10
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#11
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#21
|
|
PushConstant CP#37
|
|
IndirectStaticCall 4, CP#22
|
|
PopLocal r12
|
|
PushConstant CP#8
|
|
ReturnTOS
|
|
L15:
|
|
IfEqNull r2
|
|
Jump L8
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L8:
|
|
Push r4
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#3
|
|
Push r1
|
|
InstanceCall1 2, CP#38
|
|
StoreLocal r10
|
|
StoreFieldTOS CP#1
|
|
Push r10
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r10
|
|
StoreFieldTOS CP#9
|
|
Push r10
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PopLocal r4
|
|
Jump L9
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#16
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#17
|
|
Throw 1
|
|
L5:
|
|
Push r0
|
|
LoadFieldTOS CP#19
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#14
|
|
PopLocal r4
|
|
PushConstant CP#34
|
|
PushConstant CP#39
|
|
IndirectStaticCall 1, CP#5
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r10
|
|
StoreFieldTOS CP#3
|
|
Push r10
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PushConstant CP#40
|
|
StoreFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
StoreFieldTOS CP#2
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#3
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#10
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#11
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#21
|
|
PushConstant CP#41
|
|
IndirectStaticCall 4, CP#22
|
|
PopLocal r12
|
|
PushConstant CP#8
|
|
ReturnTOS
|
|
L16:
|
|
IfEqNull r2
|
|
Jump L10
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L10:
|
|
Push r4
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#3
|
|
Push r1
|
|
InstanceCall1 2, CP#42
|
|
StoreLocal r10
|
|
StoreFieldTOS CP#1
|
|
Push r10
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r10
|
|
StoreFieldTOS CP#9
|
|
Push r10
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PopLocal r4
|
|
Jump L9
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PopLocal r4
|
|
Jump L9
|
|
L7:
|
|
Push r0
|
|
LoadFieldTOS CP#19
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#14
|
|
PopLocal r4
|
|
PushConstant CP#34
|
|
PushConstant CP#43
|
|
IndirectStaticCall 1, CP#5
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r10
|
|
StoreFieldTOS CP#3
|
|
Push r10
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PushConstant CP#44
|
|
StoreFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
StoreFieldTOS CP#2
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#3
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#10
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#11
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#21
|
|
PushConstant CP#45
|
|
IndirectStaticCall 4, CP#22
|
|
PopLocal r12
|
|
PushConstant CP#8
|
|
ReturnTOS
|
|
L17:
|
|
IfEqNull r2
|
|
Jump L11
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L11:
|
|
Push r4
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#3
|
|
Push r1
|
|
InstanceCall1 2, CP#46
|
|
StoreLocal r10
|
|
StoreFieldTOS CP#1
|
|
Push r10
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r10
|
|
StoreFieldTOS CP#9
|
|
Push r10
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PopLocal r4
|
|
Jump L9
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PopLocal r4
|
|
L9:
|
|
Push r4
|
|
LoadFieldTOS CP#7
|
|
Push r4
|
|
LoadFieldTOS CP#9
|
|
InstanceCall1 2, CP#47
|
|
Drop1
|
|
PushConstant CP#8
|
|
ReturnTOS
|
|
Jump L12
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
Push r0
|
|
LoadFieldTOS CP#19
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#13
|
|
PopLocal r4
|
|
MoveSpecial r6, exception
|
|
MoveSpecial r7, stackTrace
|
|
Push r6
|
|
PopLocal r8
|
|
Push r7
|
|
PopLocal r9
|
|
Push r4
|
|
LoadFieldTOS CP#7
|
|
Push r8
|
|
Push r9
|
|
InstanceCall1 3, CP#49
|
|
Drop1
|
|
Jump L12
|
|
L12:
|
|
PushConstant CP#8
|
|
ReturnTOS
|
|
L1:
|
|
Push r4
|
|
LoadFieldTOS CP#2
|
|
PopLocal r4
|
|
Push r5
|
|
PushConstant CP#20
|
|
IfEqStrictNumTOS
|
|
Jump L13
|
|
Push r5
|
|
PushConstant CP#31
|
|
IfEqStrictNumTOS
|
|
Jump L14
|
|
Push r5
|
|
PushConstant CP#36
|
|
IfEqStrictNumTOS
|
|
Jump L15
|
|
Push r5
|
|
PushConstant CP#40
|
|
IfEqStrictNumTOS
|
|
Jump L16
|
|
Jump L17
|
|
|
|
}
|
|
]static method tryCatchRethrow(asy::Future<core::int> a, asy::Future<core::int> b, asy::Future<core::int> c) → asy::Future<core::int> /* originally async */ {
|
|
final asy::Completer<core::int> :async_completer = asy::Completer::sync<core::int>();
|
|
asy::FutureOr<core::int> :return_value;
|
|
dynamic :async_stack_trace;
|
|
dynamic :async_op_then;
|
|
dynamic :async_op_error;
|
|
dynamic :await_jump_var = 0;
|
|
dynamic :await_ctx_var;
|
|
dynamic :saved_try_context_var0;
|
|
dynamic :saved_try_context_var1;
|
|
dynamic :saved_try_context_var2;
|
|
dynamic :exception0;
|
|
dynamic :stack_trace0;
|
|
dynamic :async_temporary_0;
|
|
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
|
|
try {
|
|
#L4:
|
|
{
|
|
core::int x = 1;
|
|
try
|
|
try {
|
|
:async_temporary_0 = x;
|
|
[yield] let dynamic #t4 = asy::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
|
|
x = :async_temporary_0.{core::num::+}(:result);
|
|
}
|
|
on dynamic catch(final dynamic e) {
|
|
if(e is core::Error) {
|
|
:return_value = 42;
|
|
break #L4;
|
|
}
|
|
:async_temporary_0 = x;
|
|
[yield] let dynamic #t5 = asy::_awaitHelper(b, :async_op_then, :async_op_error, :async_op) in null;
|
|
x = :async_temporary_0.{core::num::+}(:result);
|
|
rethrow;
|
|
}
|
|
finally {
|
|
core::print("fin");
|
|
:async_temporary_0 = x;
|
|
[yield] let dynamic #t6 = asy::_awaitHelper(c, :async_op_then, :async_op_error, :async_op) in null;
|
|
x = :async_temporary_0.{core::num::+}(:result);
|
|
:return_value = x;
|
|
break #L4;
|
|
}
|
|
}
|
|
:async_completer.{asy::Completer::complete}(:return_value);
|
|
return;
|
|
}
|
|
on dynamic catch(dynamic :exception, dynamic :stack_trace) {
|
|
:async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
|
|
}
|
|
:async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
|
|
:async_op_then = asy::_asyncThenWrapperHelper(:async_op);
|
|
:async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
|
|
asy::Future::microtask<dynamic>(:async_op);
|
|
return :async_completer.{asy::Completer::future};
|
|
}
|
|
[@vm.bytecode=
|
|
Bytecode {
|
|
Entry 4
|
|
CheckStack
|
|
AllocateContext 1
|
|
StoreLocal r1
|
|
Push r1
|
|
Push r0
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
Push FP[-5]
|
|
StoreFieldTOS CP#1
|
|
AllocateContext 1
|
|
StoreLocal r1
|
|
Push r1
|
|
Push r0
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
PushConstant CP#2
|
|
StoreFieldTOS CP#1
|
|
Allocate CP#35
|
|
StoreLocal r3
|
|
Push r3
|
|
PushConstant CP#9
|
|
StoreFieldTOS CP#36
|
|
Push r3
|
|
PushConstant CP#9
|
|
StoreFieldTOS CP#37
|
|
Push r3
|
|
PushConstant CP#3
|
|
StoreFieldTOS CP#38
|
|
Push r3
|
|
Push r0
|
|
StoreFieldTOS CP#4
|
|
PopLocal r2
|
|
Push r2
|
|
ReturnTOS
|
|
Push r0
|
|
LoadFieldTOS CP#0
|
|
PopLocal r0
|
|
PushConstant CP#9
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ContextOffset parent
|
|
[1] = ContextOffset var [0]
|
|
[2] = Int 3
|
|
[3] = ClosureFunction nested () → dart.async::Future<dart.core::int> /* originally async */ ;
|
|
[4] = FieldOffset dart.core::_Closure::_context
|
|
[5] = TypeArgs [dart.core::int]
|
|
[6] = ArgDesc num-args 1, num-type-args 0, names []
|
|
[7] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#6
|
|
[8] = ContextOffset var [8]
|
|
[9] = Null
|
|
[10] = ContextOffset var [7]
|
|
[11] = ContextOffset var [4]
|
|
[12] = ContextOffset var [5]
|
|
[13] = Int 0
|
|
[14] = ContextOffset var [1]
|
|
[15] = ContextOffset var [2]
|
|
[16] = ContextOffset var [3]
|
|
[17] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
|
|
[18] = Int 4
|
|
[19] = Int 5
|
|
[20] = Int 1
|
|
[21] = ContextOffset var [6]
|
|
[22] = ArgDesc num-args 4, num-type-args 0, names []
|
|
[23] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#22
|
|
[24] = ArgDesc num-args 2, num-type-args 0, names []
|
|
[25] = ICData target-name '+', arg-desc CP#24
|
|
[26] = Type dynamic
|
|
[27] = String 'fin'
|
|
[28] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[29] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[30] = StaticICData target 'dart.core::print', arg-desc CP#6
|
|
[31] = ICData target-name 'complete', arg-desc CP#24
|
|
[32] = ArgDesc num-args 3, num-type-args 0, names []
|
|
[33] = ICData target-name 'completeError', arg-desc CP#32
|
|
[34] = EndClosureFunctionScope
|
|
[35] = Class dart.core::_Closure
|
|
[36] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
|
|
[37] = FieldOffset dart.core::_Closure::_function_type_arguments
|
|
[38] = FieldOffset dart.core::_Closure::_function
|
|
[39] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#6
|
|
[40] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#6
|
|
[41] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#6
|
|
[42] = TypeArgs [dynamic]
|
|
[43] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#24
|
|
[44] = ICData get target-name 'future', arg-desc CP#6
|
|
[45] = EndClosureFunctionScope
|
|
}
|
|
Closure CP#17 {
|
|
EntryOptional 1, 3, 0
|
|
LoadConstant r1, CP#9
|
|
LoadConstant r2, CP#9
|
|
LoadConstant r3, CP#9
|
|
Frame 8
|
|
CheckStack
|
|
Push r0
|
|
LoadFieldTOS CP#4
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
StoreLocal r5
|
|
PushConstant CP#13
|
|
IfNeStrictNumTOS
|
|
Jump L1
|
|
Push r4
|
|
Push r4
|
|
StoreFieldTOS CP#15
|
|
Try #0 start:
|
|
AllocateContext 1
|
|
StoreLocal r5
|
|
Push r5
|
|
Push r4
|
|
StoreFieldTOS CP#0
|
|
PopLocal r4
|
|
Push r4
|
|
PushConstant CP#18
|
|
StoreFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
StoreFieldTOS CP#16
|
|
Try #1 start:
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
PushConstant CP#19
|
|
StoreLocal r10
|
|
StoreFieldTOS CP#1
|
|
Push r10
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PushConstant CP#20
|
|
StoreFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
StoreFieldTOS CP#14
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#11
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#12
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#21
|
|
PushConstant CP#23
|
|
IndirectStaticCall 4, CP#22
|
|
PopLocal r11
|
|
PushConstant CP#9
|
|
ReturnTOS
|
|
L6:
|
|
Push r4
|
|
Push r1
|
|
StoreLocal r10
|
|
StoreFieldTOS CP#1
|
|
Push r10
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#0
|
|
LoadFieldTOS CP#1
|
|
Push r4
|
|
LoadFieldTOS CP#1
|
|
InstanceCall1 2, CP#25
|
|
StoreLocal r10
|
|
StoreFieldTOS CP#10
|
|
Push r10
|
|
Drop1
|
|
Jump L2
|
|
Jump L3
|
|
Try #1 end:
|
|
Try #1 handler:
|
|
Push r0
|
|
LoadFieldTOS CP#4
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#16
|
|
PopLocal r4
|
|
MoveSpecial r8, exception
|
|
MoveSpecial r9, stackTrace
|
|
PushConstant CP#27
|
|
PushConstant CP#28
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
Push r8
|
|
Push r9
|
|
Throw 1
|
|
L2:
|
|
Push r0
|
|
LoadFieldTOS CP#4
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#16
|
|
PopLocal r4
|
|
PushConstant CP#27
|
|
PushConstant CP#29
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PopLocal r4
|
|
Jump L4
|
|
L3:
|
|
Push r0
|
|
LoadFieldTOS CP#4
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#16
|
|
PopLocal r4
|
|
PushConstant CP#27
|
|
PushConstant CP#30
|
|
IndirectStaticCall 1, CP#6
|
|
Drop1
|
|
Push r4
|
|
LoadFieldTOS CP#0
|
|
PopLocal r4
|
|
L4:
|
|
Push r4
|
|
LoadFieldTOS CP#8
|
|
Push r4
|
|
LoadFieldTOS CP#10
|
|
InstanceCall1 2, CP#31
|
|
Drop1
|
|
PushConstant CP#9
|
|
ReturnTOS
|
|
Jump L5
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
Push r0
|
|
LoadFieldTOS CP#4
|
|
PopLocal r4
|
|
Push r4
|
|
LoadFieldTOS CP#15
|
|
PopLocal r4
|
|
MoveSpecial r6, exception
|
|
MoveSpecial r7, stackTrace
|
|
Push r6
|
|
PopLocal r8
|
|
Push r7
|
|
PopLocal r9
|
|
Push r4
|
|
LoadFieldTOS CP#8
|
|
Push r8
|
|
Push r9
|
|
InstanceCall1 3, CP#33
|
|
Drop1
|
|
Jump L5
|
|
L5:
|
|
PushConstant CP#9
|
|
ReturnTOS
|
|
L1:
|
|
Push r4
|
|
LoadFieldTOS CP#14
|
|
PopLocal r4
|
|
Jump L6
|
|
|
|
}
|
|
|
|
Closure CP#3 {
|
|
Entry 4
|
|
CheckStack
|
|
Push FP[-5]
|
|
LoadFieldTOS CP#4
|
|
PopLocal r0
|
|
AllocateContext 9
|
|
StoreLocal r1
|
|
Push r1
|
|
Push r0
|
|
StoreFieldTOS CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
PushConstant CP#5
|
|
PushConstant CP#7
|
|
IndirectStaticCall 1, CP#6
|
|
StoreFieldTOS CP#8
|
|
Push r0
|
|
PushConstant CP#9
|
|
StoreFieldTOS CP#10
|
|
PushConstant CP#9
|
|
PopLocal r2
|
|
Push r0
|
|
PushConstant CP#9
|
|
StoreFieldTOS CP#11
|
|
Push r0
|
|
PushConstant CP#9
|
|
StoreFieldTOS CP#12
|
|
Push r0
|
|
PushConstant CP#13
|
|
StoreFieldTOS CP#1
|
|
Push r0
|
|
PushConstant CP#9
|
|
StoreFieldTOS CP#14
|
|
Push r0
|
|
PushConstant CP#9
|
|
StoreFieldTOS CP#15
|
|
Push r0
|
|
PushConstant CP#9
|
|
StoreFieldTOS CP#16
|
|
Push r0
|
|
Allocate CP#35
|
|
StoreLocal r3
|
|
Push r3
|
|
PushConstant CP#9
|
|
StoreFieldTOS CP#36
|
|
Push r3
|
|
PushConstant CP#9
|
|
StoreFieldTOS CP#37
|
|
Push r3
|
|
PushConstant CP#17
|
|
StoreFieldTOS CP#38
|
|
Push r3
|
|
Push r0
|
|
StoreFieldTOS CP#4
|
|
StoreFieldTOS CP#21
|
|
Push r0
|
|
LoadFieldTOS CP#21
|
|
PushConstant CP#39
|
|
IndirectStaticCall 1, CP#6
|
|
StoreLocal r2
|
|
Drop1
|
|
Push r0
|
|
Push r0
|
|
LoadFieldTOS CP#21
|
|
PushConstant CP#40
|
|
IndirectStaticCall 1, CP#6
|
|
StoreLocal r3
|
|
StoreFieldTOS CP#11
|
|
Push r3
|
|
Drop1
|
|
Push r0
|
|
Push r0
|
|
LoadFieldTOS CP#21
|
|
PushConstant CP#41
|
|
IndirectStaticCall 1, CP#6
|
|
StoreLocal r3
|
|
StoreFieldTOS CP#12
|
|
Push r3
|
|
Drop1
|
|
PushConstant CP#42
|
|
Push r0
|
|
LoadFieldTOS CP#21
|
|
PushConstant CP#43
|
|
IndirectStaticCall 2, CP#24
|
|
Drop1
|
|
Push r0
|
|
LoadFieldTOS CP#8
|
|
InstanceCall1 1, CP#44
|
|
ReturnTOS
|
|
Push r0
|
|
LoadFieldTOS CP#0
|
|
PopLocal r0
|
|
PushConstant CP#9
|
|
ReturnTOS
|
|
|
|
}
|
|
]static method closure(asy::Future<core::int> a) → dynamic {
|
|
core::int x = 3;
|
|
function nested() → asy::Future<core::int> /* originally async */ {
|
|
final asy::Completer<core::int> :async_completer = asy::Completer::sync<core::int>();
|
|
asy::FutureOr<core::int> :return_value;
|
|
dynamic :async_stack_trace;
|
|
dynamic :async_op_then;
|
|
dynamic :async_op_error;
|
|
dynamic :await_jump_var = 0;
|
|
dynamic :await_ctx_var;
|
|
dynamic :saved_try_context_var0;
|
|
dynamic :saved_try_context_var1;
|
|
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
|
|
try {
|
|
#L5:
|
|
{
|
|
core::int y = 4;
|
|
try {
|
|
x = 5;
|
|
[yield] let dynamic #t7 = asy::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
|
|
y = :result;
|
|
:return_value = x.{core::num::+}(y);
|
|
break #L5;
|
|
}
|
|
finally {
|
|
core::print("fin");
|
|
}
|
|
}
|
|
:async_completer.{asy::Completer::complete}(:return_value);
|
|
return;
|
|
}
|
|
on dynamic catch(dynamic :exception, dynamic :stack_trace) {
|
|
:async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
|
|
}
|
|
:async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
|
|
:async_op_then = asy::_asyncThenWrapperHelper(:async_op);
|
|
:async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
|
|
asy::Future::microtask<dynamic>(:async_op);
|
|
return :async_completer.{asy::Completer::future};
|
|
}
|
|
return nested;
|
|
}
|
|
[@vm.bytecode=
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = Null
|
|
}
|
|
]static method main() → dynamic {}
|