a9abc64613
This CL adds context ID operand to AllocateContext, CloneContext, LoadContextVar and StoreContextVar bytecode instructions. The context ID will be used to create distinct Slots and disambiguate accesses to context objects corresponding to different scopes. Change-Id: I98850ab763017b71c1dcacfccaffc085bd850e00 Reviewed-on: https://dart-review.googlesource.com/c/84681 Auto-Submit: Alexander Markov <alexmarkov@google.com> Commit-Queue: Régis Crelier <regis@google.com> Reviewed-by: Régis Crelier <regis@google.com>
2405 lines
68 KiB
Plaintext
2405 lines
68 KiB
Plaintext
library #lib;
|
|
import self as self;
|
|
import "dart:async" as asy;
|
|
import "dart:core" as core;
|
|
|
|
[@vm.bytecode=
|
|
Bytecode (version: stable) {
|
|
Entry 3
|
|
CheckStack 0
|
|
Allocate CP#19
|
|
StoreLocal r2
|
|
Push r2
|
|
PushNull
|
|
StoreFieldTOS CP#20
|
|
Push r2
|
|
PushNull
|
|
StoreFieldTOS CP#22
|
|
Push r2
|
|
PushConstant CP#24
|
|
StoreFieldTOS CP#25
|
|
Push r2
|
|
PushConstant CP#0
|
|
StoreFieldTOS CP#27
|
|
Push r2
|
|
Push r0
|
|
StoreFieldTOS CP#1
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ClosureFunction <anonymous closure> (dart.async::Future<dart.core::int> x) → dart.async::Future<dart.core::Null> /* originally async */ ;
|
|
[1] = InstanceField dart.core::_Closure::_context
|
|
[2] = Reserved
|
|
[3] = Type dart.async::Future<dart.core::int>
|
|
[4] = String 'x'
|
|
[5] = SubtypeTestCache
|
|
[6] = TypeArgumentsForInstanceAllocation dart.async::Completer [dart.core::Null]
|
|
[7] = ArgDesc num-args 1, num-type-args 0, names []
|
|
[8] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#7
|
|
[9] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
|
|
[10] = Null
|
|
[11] = ArgDesc num-args 4, num-type-args 0, names []
|
|
[12] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#11
|
|
[13] = ArgDesc num-args 2, num-type-args 0, names []
|
|
[14] = StaticICData target 'dart.async::_completeOnAsyncReturn', 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] = InstanceField dart.core::_Closure::_instantiator_type_arguments
|
|
[21] = Reserved
|
|
[22] = InstanceField dart.core::_Closure::_function_type_arguments
|
|
[23] = Reserved
|
|
[24] = EmptyTypeArguments
|
|
[25] = InstanceField dart.core::_Closure::_delayed_type_arguments
|
|
[26] = Reserved
|
|
[27] = InstanceField dart.core::_Closure::_function
|
|
[28] = Reserved
|
|
[29] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#7
|
|
[30] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#7
|
|
[31] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#7
|
|
[32] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
|
|
[33] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#13
|
|
[34] = ICData get target-name 'future', arg-desc CP#7
|
|
[35] = EndClosureFunctionScope
|
|
}
|
|
Closure CP#9 {
|
|
EntryOptional 1, 3, 0
|
|
LoadConstant r1, CP#10
|
|
LoadConstant r2, CP#10
|
|
LoadConstant r3, CP#10
|
|
Frame 6
|
|
CheckStack 0
|
|
Push r0
|
|
LoadFieldTOS CP#1
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 5
|
|
StoreLocal r5
|
|
PushInt 0
|
|
JumpIfNeStrict L1
|
|
Push r4
|
|
Push r4
|
|
StoreContextVar 0, 7
|
|
Try #0 start:
|
|
Push r4
|
|
PushInt 1
|
|
StoreContextVar 0, 5
|
|
Push r4
|
|
Push r4
|
|
StoreContextVar 0, 6
|
|
Push r4
|
|
LoadContextVar 0, 0
|
|
Push r4
|
|
LoadContextVar 0, 3
|
|
Push r4
|
|
LoadContextVar 0, 4
|
|
Push r4
|
|
LoadContextVar 0, 8
|
|
PushConstant CP#12
|
|
IndirectStaticCall 4, CP#11
|
|
PopLocal r8
|
|
PushNull
|
|
ReturnTOS
|
|
L4:
|
|
Push r2
|
|
JumpIfNull L2
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L2:
|
|
Push r1
|
|
Drop1
|
|
Push r4
|
|
LoadContextVar 0, 1
|
|
Push r4
|
|
LoadContextVar 0, 2
|
|
PushConstant CP#14
|
|
IndirectStaticCall 2, CP#13
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 10
|
|
Push r0
|
|
LoadFieldTOS CP#1
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 7
|
|
PopLocal r4
|
|
MoveSpecial exception, r6
|
|
MoveSpecial stackTrace, r7
|
|
Push r6
|
|
PopLocal r8
|
|
Push r7
|
|
PopLocal r9
|
|
Push r4
|
|
LoadContextVar 0, 1
|
|
Push r8
|
|
Push r9
|
|
InstanceCall 3, CP#17
|
|
Drop1
|
|
Jump L3
|
|
L3:
|
|
PushNull
|
|
ReturnTOS
|
|
L1:
|
|
Push r4
|
|
LoadContextVar 0, 6
|
|
PopLocal r4
|
|
Jump L4
|
|
|
|
}
|
|
|
|
Closure CP#0 {
|
|
EntryFixed 2, 4
|
|
CheckStack 0
|
|
Push FP[-6]
|
|
LoadFieldTOS CP#1
|
|
PopLocal r0
|
|
AllocateContext 0, 9
|
|
PopLocal r0
|
|
Push r0
|
|
Push FP[-5]
|
|
StoreContextVar 0, 0
|
|
Push FP[-5]
|
|
PushConstant CP#3
|
|
PushNull
|
|
PushNull
|
|
PushConstant CP#4
|
|
AssertAssignable 0, CP#5
|
|
Drop1
|
|
Push r0
|
|
PushConstant CP#6
|
|
PushConstant CP#8
|
|
IndirectStaticCall 1, CP#7
|
|
StoreContextVar 0, 1
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 2
|
|
PushNull
|
|
PopLocal r2
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 3
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 4
|
|
Push r0
|
|
PushInt 0
|
|
StoreContextVar 0, 5
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 6
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 7
|
|
Push r0
|
|
Allocate CP#19
|
|
StoreLocal r3
|
|
Push r3
|
|
PushNull
|
|
StoreFieldTOS CP#20
|
|
Push r3
|
|
PushNull
|
|
StoreFieldTOS CP#22
|
|
Push r3
|
|
PushConstant CP#24
|
|
StoreFieldTOS CP#25
|
|
Push r3
|
|
PushConstant CP#9
|
|
StoreFieldTOS CP#27
|
|
Push r3
|
|
Push r0
|
|
StoreFieldTOS CP#1
|
|
StoreContextVar 0, 8
|
|
Push r0
|
|
LoadContextVar 0, 8
|
|
PushConstant CP#29
|
|
IndirectStaticCall 1, CP#7
|
|
PopLocal r2
|
|
Push r0
|
|
Push r0
|
|
LoadContextVar 0, 8
|
|
PushConstant CP#30
|
|
IndirectStaticCall 1, CP#7
|
|
StoreContextVar 0, 3
|
|
Push r0
|
|
Push r0
|
|
LoadContextVar 0, 8
|
|
PushConstant CP#31
|
|
IndirectStaticCall 1, CP#7
|
|
StoreContextVar 0, 4
|
|
PushConstant CP#32
|
|
Push r0
|
|
LoadContextVar 0, 8
|
|
PushConstant CP#33
|
|
IndirectStaticCall 2, CP#13
|
|
Drop1
|
|
Push r0
|
|
LoadContextVar 0, 1
|
|
InstanceCall 1, CP#34
|
|
ReturnTOS
|
|
|
|
}
|
|
]static field (asy::Future<core::int>) → asy::Future<core::Null> asyncInFieldInitializer = (asy::Future<core::int> x) → asy::Future<core::Null> /* originally async */ {
|
|
final asy::Completer<core::Null> :async_completer = asy::Completer::sync<core::Null>();
|
|
asy::FutureOr<core::Null> :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;
|
|
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
|
|
try {
|
|
#L1:
|
|
{
|
|
[yield] let dynamic #t1 = asy::_awaitHelper(x, :async_op_then, :async_op_error, :async_op) in null;
|
|
:result;
|
|
}
|
|
asy::_completeOnAsyncReturn(:async_completer, :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 (version: stable) {
|
|
Entry 7
|
|
CheckStack 0
|
|
AllocateContext 0, 4
|
|
PopLocal r0
|
|
Push r0
|
|
PushConstant CP#0
|
|
PushConstant CP#2
|
|
IndirectStaticCall 1, CP#1
|
|
StoreContextVar 0, 0
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 1
|
|
PushNull
|
|
PopLocal r2
|
|
PushNull
|
|
PopLocal r3
|
|
PushNull
|
|
PopLocal r4
|
|
Push r0
|
|
PushInt 0
|
|
StoreContextVar 0, 2
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 3
|
|
Allocate CP#13
|
|
StoreLocal r6
|
|
Push r6
|
|
PushNull
|
|
StoreFieldTOS CP#14
|
|
Push r6
|
|
PushNull
|
|
StoreFieldTOS CP#16
|
|
Push r6
|
|
PushConstant CP#18
|
|
StoreFieldTOS CP#19
|
|
Push r6
|
|
PushConstant CP#3
|
|
StoreFieldTOS CP#21
|
|
Push r6
|
|
Push r0
|
|
StoreFieldTOS CP#5
|
|
PopLocal r5
|
|
Push r5
|
|
PushConstant CP#23
|
|
IndirectStaticCall 1, CP#1
|
|
PopLocal r2
|
|
Push r5
|
|
PushConstant CP#24
|
|
IndirectStaticCall 1, CP#1
|
|
PopLocal r3
|
|
Push r5
|
|
PushConstant CP#25
|
|
IndirectStaticCall 1, CP#1
|
|
PopLocal r4
|
|
PushConstant CP#26
|
|
Push r5
|
|
PushConstant CP#27
|
|
IndirectStaticCall 2, CP#7
|
|
Drop1
|
|
Push r0
|
|
LoadContextVar 0, 0
|
|
InstanceCall 1, CP#28
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = TypeArgumentsForInstanceAllocation dart.async::Completer [dart.core::int]
|
|
[1] = ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#1
|
|
[3] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
|
|
[4] = Null
|
|
[5] = InstanceField dart.core::_Closure::_context
|
|
[6] = Reserved
|
|
[7] = ArgDesc num-args 2, num-type-args 0, names []
|
|
[8] = StaticICData target 'dart.async::_completeOnAsyncReturn', arg-desc CP#7
|
|
[9] = Type dynamic
|
|
[10] = ArgDesc num-args 3, num-type-args 0, names []
|
|
[11] = ICData target-name 'completeError', arg-desc CP#10
|
|
[12] = EndClosureFunctionScope
|
|
[13] = Class dart.core::_Closure
|
|
[14] = InstanceField dart.core::_Closure::_instantiator_type_arguments
|
|
[15] = Reserved
|
|
[16] = InstanceField dart.core::_Closure::_function_type_arguments
|
|
[17] = Reserved
|
|
[18] = EmptyTypeArguments
|
|
[19] = InstanceField dart.core::_Closure::_delayed_type_arguments
|
|
[20] = Reserved
|
|
[21] = InstanceField dart.core::_Closure::_function
|
|
[22] = Reserved
|
|
[23] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
|
|
[24] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
|
|
[25] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
|
|
[26] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
|
|
[27] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#7
|
|
[28] = ICData get target-name 'future', arg-desc CP#1
|
|
}
|
|
Closure CP#3 {
|
|
EntryOptional 1, 3, 0
|
|
LoadConstant r1, CP#4
|
|
LoadConstant r2, CP#4
|
|
LoadConstant r3, CP#4
|
|
Frame 6
|
|
CheckStack 0
|
|
Push r0
|
|
LoadFieldTOS CP#5
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 2
|
|
StoreLocal r5
|
|
PushInt 0
|
|
JumpIfNeStrict L1
|
|
Push r4
|
|
PopLocal r6
|
|
Try #0 start:
|
|
Push r4
|
|
PushInt 42
|
|
StoreContextVar 0, 1
|
|
Jump L2
|
|
L2:
|
|
Push r4
|
|
LoadContextVar 0, 0
|
|
Push r4
|
|
LoadContextVar 0, 1
|
|
PushConstant CP#8
|
|
IndirectStaticCall 2, CP#7
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 10
|
|
Push r6
|
|
PopLocal r4
|
|
MoveSpecial exception, r6
|
|
MoveSpecial stackTrace, r7
|
|
Push r6
|
|
PopLocal r8
|
|
Push r7
|
|
PopLocal r9
|
|
Push r4
|
|
LoadContextVar 0, 0
|
|
Push r8
|
|
Push r9
|
|
InstanceCall 3, CP#11
|
|
Drop1
|
|
Jump L3
|
|
L3:
|
|
PushNull
|
|
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 {
|
|
#L2:
|
|
{
|
|
:return_value = 42;
|
|
break #L2;
|
|
}
|
|
asy::_completeOnAsyncReturn(:async_completer, :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 (version: stable) {
|
|
Entry 4
|
|
CheckStack 0
|
|
AllocateContext 0, 11
|
|
PopLocal r0
|
|
Push r0
|
|
Push FP[-6]
|
|
StoreContextVar 0, 0
|
|
Push r0
|
|
Push FP[-5]
|
|
StoreContextVar 0, 1
|
|
Push r0
|
|
PushConstant CP#0
|
|
PushConstant CP#2
|
|
IndirectStaticCall 1, CP#1
|
|
StoreContextVar 0, 2
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 3
|
|
PushNull
|
|
PopLocal r2
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 4
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 5
|
|
Push r0
|
|
PushInt 0
|
|
StoreContextVar 0, 6
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 7
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 8
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 9
|
|
Push r0
|
|
Allocate CP#17
|
|
StoreLocal r3
|
|
Push r3
|
|
PushNull
|
|
StoreFieldTOS CP#18
|
|
Push r3
|
|
PushNull
|
|
StoreFieldTOS CP#20
|
|
Push r3
|
|
PushConstant CP#22
|
|
StoreFieldTOS CP#23
|
|
Push r3
|
|
PushConstant CP#3
|
|
StoreFieldTOS CP#25
|
|
Push r3
|
|
Push r0
|
|
StoreFieldTOS CP#5
|
|
StoreContextVar 0, 10
|
|
Push r0
|
|
LoadContextVar 0, 10
|
|
PushConstant CP#27
|
|
IndirectStaticCall 1, CP#1
|
|
PopLocal r2
|
|
Push r0
|
|
Push r0
|
|
LoadContextVar 0, 10
|
|
PushConstant CP#28
|
|
IndirectStaticCall 1, CP#1
|
|
StoreContextVar 0, 4
|
|
Push r0
|
|
Push r0
|
|
LoadContextVar 0, 10
|
|
PushConstant CP#29
|
|
IndirectStaticCall 1, CP#1
|
|
StoreContextVar 0, 5
|
|
PushConstant CP#30
|
|
Push r0
|
|
LoadContextVar 0, 10
|
|
PushConstant CP#31
|
|
IndirectStaticCall 2, CP#10
|
|
Drop1
|
|
Push r0
|
|
LoadContextVar 0, 2
|
|
InstanceCall 1, CP#32
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = TypeArgumentsForInstanceAllocation dart.async::Completer [dart.core::int]
|
|
[1] = ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#1
|
|
[3] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
|
|
[4] = Null
|
|
[5] = InstanceField dart.core::_Closure::_context
|
|
[6] = Reserved
|
|
[7] = ArgDesc num-args 4, num-type-args 0, names []
|
|
[8] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
|
|
[9] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
|
|
[10] = ArgDesc num-args 2, num-type-args 0, names []
|
|
[11] = ICData target-name '+', arg-desc CP#10
|
|
[12] = StaticICData target 'dart.async::_completeOnAsyncReturn', arg-desc CP#10
|
|
[13] = Type dynamic
|
|
[14] = ArgDesc num-args 3, num-type-args 0, names []
|
|
[15] = ICData target-name 'completeError', arg-desc CP#14
|
|
[16] = EndClosureFunctionScope
|
|
[17] = Class dart.core::_Closure
|
|
[18] = InstanceField dart.core::_Closure::_instantiator_type_arguments
|
|
[19] = Reserved
|
|
[20] = InstanceField dart.core::_Closure::_function_type_arguments
|
|
[21] = Reserved
|
|
[22] = EmptyTypeArguments
|
|
[23] = InstanceField dart.core::_Closure::_delayed_type_arguments
|
|
[24] = Reserved
|
|
[25] = InstanceField dart.core::_Closure::_function
|
|
[26] = Reserved
|
|
[27] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
|
|
[28] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
|
|
[29] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
|
|
[30] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
|
|
[31] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#10
|
|
[32] = ICData get target-name 'future', arg-desc CP#1
|
|
}
|
|
Closure CP#3 {
|
|
EntryOptional 1, 3, 0
|
|
LoadConstant r1, CP#4
|
|
LoadConstant r2, CP#4
|
|
LoadConstant r3, CP#4
|
|
Frame 6
|
|
CheckStack 0
|
|
Push r0
|
|
LoadFieldTOS CP#5
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 6
|
|
StoreLocal r5
|
|
PushInt 0
|
|
JumpIfNeStrict L1
|
|
Push r4
|
|
Push r4
|
|
StoreContextVar 0, 8
|
|
Try #0 start:
|
|
Push r4
|
|
PushInt 1
|
|
StoreContextVar 0, 6
|
|
Push r4
|
|
Push r4
|
|
StoreContextVar 0, 7
|
|
Push r4
|
|
LoadContextVar 0, 0
|
|
Push r4
|
|
LoadContextVar 0, 4
|
|
Push r4
|
|
LoadContextVar 0, 5
|
|
Push r4
|
|
LoadContextVar 0, 10
|
|
PushConstant CP#8
|
|
IndirectStaticCall 4, CP#7
|
|
PopLocal r8
|
|
PushNull
|
|
ReturnTOS
|
|
L6:
|
|
Push r2
|
|
JumpIfNull L2
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L2:
|
|
Push r4
|
|
Push r1
|
|
StoreContextVar 0, 9
|
|
Push r4
|
|
PushInt 2
|
|
StoreContextVar 0, 6
|
|
Push r4
|
|
Push r4
|
|
StoreContextVar 0, 7
|
|
Push r4
|
|
LoadContextVar 0, 1
|
|
Push r4
|
|
LoadContextVar 0, 4
|
|
Push r4
|
|
LoadContextVar 0, 5
|
|
Push r4
|
|
LoadContextVar 0, 10
|
|
PushConstant CP#9
|
|
IndirectStaticCall 4, CP#7
|
|
PopLocal r9
|
|
PushNull
|
|
ReturnTOS
|
|
L7:
|
|
Push r2
|
|
JumpIfNull L3
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L3:
|
|
Push r4
|
|
Push r4
|
|
LoadContextVar 0, 9
|
|
Push r1
|
|
InstanceCall 2, CP#11
|
|
StoreContextVar 0, 3
|
|
Jump L4
|
|
L4:
|
|
Push r4
|
|
LoadContextVar 0, 2
|
|
Push r4
|
|
LoadContextVar 0, 3
|
|
PushConstant CP#12
|
|
IndirectStaticCall 2, CP#10
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 10
|
|
Push r0
|
|
LoadFieldTOS CP#5
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 8
|
|
PopLocal r4
|
|
MoveSpecial exception, r6
|
|
MoveSpecial stackTrace, r7
|
|
Push r6
|
|
PopLocal r8
|
|
Push r7
|
|
PopLocal r9
|
|
Push r4
|
|
LoadContextVar 0, 2
|
|
Push r8
|
|
Push r9
|
|
InstanceCall 3, CP#15
|
|
Drop1
|
|
Jump L5
|
|
L5:
|
|
PushNull
|
|
ReturnTOS
|
|
L1:
|
|
Push r4
|
|
LoadContextVar 0, 7
|
|
PopLocal r4
|
|
Push r5
|
|
PushInt 1
|
|
JumpIfEqStrict 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 {
|
|
#L3:
|
|
{
|
|
[yield] let dynamic #t2 = asy::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
|
|
:async_temporary_0 = :result;
|
|
[yield] let dynamic #t3 = asy::_awaitHelper(b, :async_op_then, :async_op_error, :async_op) in null;
|
|
:return_value = :async_temporary_0.{core::num::+}(:result);
|
|
break #L3;
|
|
}
|
|
asy::_completeOnAsyncReturn(:async_completer, :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 (version: stable) {
|
|
Entry 4
|
|
CheckStack 0
|
|
AllocateContext 0, 11
|
|
PopLocal r0
|
|
Push r0
|
|
Push FP[-5]
|
|
StoreContextVar 0, 0
|
|
Push r0
|
|
PushConstant CP#0
|
|
PushConstant CP#2
|
|
IndirectStaticCall 1, CP#1
|
|
StoreContextVar 0, 1
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 2
|
|
PushNull
|
|
PopLocal r2
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 3
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 4
|
|
Push r0
|
|
PushInt 0
|
|
StoreContextVar 0, 5
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 6
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 7
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 8
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 9
|
|
Push r0
|
|
Allocate CP#22
|
|
StoreLocal r3
|
|
Push r3
|
|
PushNull
|
|
StoreFieldTOS CP#23
|
|
Push r3
|
|
PushNull
|
|
StoreFieldTOS CP#25
|
|
Push r3
|
|
PushConstant CP#27
|
|
StoreFieldTOS CP#28
|
|
Push r3
|
|
PushConstant CP#3
|
|
StoreFieldTOS CP#30
|
|
Push r3
|
|
Push r0
|
|
StoreFieldTOS CP#5
|
|
StoreContextVar 0, 10
|
|
Push r0
|
|
LoadContextVar 0, 10
|
|
PushConstant CP#32
|
|
IndirectStaticCall 1, CP#1
|
|
PopLocal r2
|
|
Push r0
|
|
Push r0
|
|
LoadContextVar 0, 10
|
|
PushConstant CP#33
|
|
IndirectStaticCall 1, CP#1
|
|
StoreContextVar 0, 3
|
|
Push r0
|
|
Push r0
|
|
LoadContextVar 0, 10
|
|
PushConstant CP#34
|
|
IndirectStaticCall 1, CP#1
|
|
StoreContextVar 0, 4
|
|
PushConstant CP#35
|
|
Push r0
|
|
LoadContextVar 0, 10
|
|
PushConstant CP#36
|
|
IndirectStaticCall 2, CP#14
|
|
Drop1
|
|
Push r0
|
|
LoadContextVar 0, 1
|
|
InstanceCall 1, CP#37
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = TypeArgumentsForInstanceAllocation dart.async::Completer [dart.core::int]
|
|
[1] = ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#1
|
|
[3] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
|
|
[4] = Null
|
|
[5] = InstanceField dart.core::_Closure::_context
|
|
[6] = Reserved
|
|
[7] = ICData get target-name 'iterator', arg-desc CP#1
|
|
[8] = ICData target-name 'moveNext', arg-desc CP#1
|
|
[9] = ICData get target-name 'current', arg-desc CP#1
|
|
[10] = ArgDesc num-args 0, num-type-args 0, names []
|
|
[11] = StaticICData target '#lib::foo', arg-desc CP#10
|
|
[12] = ArgDesc num-args 4, num-type-args 0, names []
|
|
[13] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#12
|
|
[14] = ArgDesc num-args 2, num-type-args 0, names []
|
|
[15] = ICData target-name '+', arg-desc CP#14
|
|
[16] = ICData target-name '+', arg-desc CP#14
|
|
[17] = StaticICData target 'dart.async::_completeOnAsyncReturn', arg-desc CP#14
|
|
[18] = Type dynamic
|
|
[19] = ArgDesc num-args 3, num-type-args 0, names []
|
|
[20] = ICData target-name 'completeError', arg-desc CP#19
|
|
[21] = EndClosureFunctionScope
|
|
[22] = Class dart.core::_Closure
|
|
[23] = InstanceField dart.core::_Closure::_instantiator_type_arguments
|
|
[24] = Reserved
|
|
[25] = InstanceField dart.core::_Closure::_function_type_arguments
|
|
[26] = Reserved
|
|
[27] = EmptyTypeArguments
|
|
[28] = InstanceField dart.core::_Closure::_delayed_type_arguments
|
|
[29] = Reserved
|
|
[30] = InstanceField dart.core::_Closure::_function
|
|
[31] = Reserved
|
|
[32] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
|
|
[33] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
|
|
[34] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
|
|
[35] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
|
|
[36] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#14
|
|
[37] = ICData get target-name 'future', arg-desc CP#1
|
|
}
|
|
Closure CP#3 {
|
|
EntryOptional 1, 3, 0
|
|
LoadConstant r1, CP#4
|
|
LoadConstant r2, CP#4
|
|
LoadConstant r3, CP#4
|
|
Frame 7
|
|
CheckStack 0
|
|
Push r0
|
|
LoadFieldTOS CP#5
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 5
|
|
StoreLocal r5
|
|
PushInt 0
|
|
JumpIfNeStrict L1
|
|
Push r4
|
|
Push r4
|
|
StoreContextVar 0, 7
|
|
Try #0 start:
|
|
AllocateContext 1, 1
|
|
StoreLocal r5
|
|
Push r5
|
|
Push r4
|
|
StoreContextParent
|
|
PopLocal r4
|
|
Push r4
|
|
PushInt 0
|
|
StoreContextVar 1, 0
|
|
AllocateContext 2, 2
|
|
StoreLocal r5
|
|
Push r5
|
|
Push r4
|
|
StoreContextParent
|
|
PopLocal r4
|
|
Push r4
|
|
PushInt 0
|
|
StoreContextVar 2, 0
|
|
L6:
|
|
CheckStack 1
|
|
Push r4
|
|
LoadContextVar 2, 0
|
|
PushInt 10
|
|
CompareIntLt
|
|
JumpIfFalse L2
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextVar 0, 0
|
|
InstanceCall 1, CP#7
|
|
PopLocal r8
|
|
Push r4
|
|
Push r8
|
|
StoreContextVar 2, 1
|
|
L5:
|
|
CheckStack 2
|
|
Push r4
|
|
LoadContextVar 2, 1
|
|
StoreLocal r8
|
|
InstanceCall 1, CP#8
|
|
JumpIfFalse L3
|
|
AllocateContext 3, 1
|
|
StoreLocal r5
|
|
Push r5
|
|
Push r4
|
|
StoreContextParent
|
|
PopLocal r4
|
|
Push r4
|
|
Push r8
|
|
InstanceCall 1, CP#9
|
|
StoreContextVar 3, 0
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextParent
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextVar 1, 0
|
|
StoreContextVar 0, 9
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextParent
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 2, 0
|
|
Push r4
|
|
LoadContextVar 3, 0
|
|
AddInt
|
|
StoreContextVar 0, 8
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextParent
|
|
PushInt 1
|
|
StoreContextVar 0, 5
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextParent
|
|
Push r4
|
|
StoreContextVar 0, 6
|
|
PushConstant CP#11
|
|
IndirectStaticCall 0, CP#10
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextVar 0, 3
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextVar 0, 4
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextVar 0, 10
|
|
PushConstant CP#13
|
|
IndirectStaticCall 4, CP#12
|
|
PopLocal r10
|
|
PushNull
|
|
ReturnTOS
|
|
L11:
|
|
Push r2
|
|
JumpIfNull L4
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L4:
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextVar 0, 9
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextVar 0, 8
|
|
Push r1
|
|
InstanceCall 2, CP#15
|
|
InstanceCall 2, CP#16
|
|
StoreContextVar 1, 0
|
|
Push r4
|
|
LoadContextParent
|
|
PopLocal r4
|
|
Jump L5
|
|
L3:
|
|
Push r4
|
|
CloneContext 2, 2
|
|
PopLocal r4
|
|
Push r4
|
|
Push r4
|
|
LoadContextVar 2, 0
|
|
PushInt 1
|
|
AddInt
|
|
StoreLocal r8
|
|
StoreContextVar 2, 0
|
|
Push r8
|
|
Drop1
|
|
Jump L6
|
|
L2:
|
|
Push r4
|
|
LoadContextParent
|
|
PopLocal r4
|
|
PushInt 0
|
|
PopLocal r8
|
|
L8:
|
|
CheckStack 1
|
|
Push r8
|
|
PushInt 10
|
|
CompareIntLt
|
|
JumpIfFalse L7
|
|
Push r4
|
|
Push r4
|
|
LoadContextVar 1, 0
|
|
Push r8
|
|
AddInt
|
|
StoreContextVar 1, 0
|
|
Push r8
|
|
PushInt 1
|
|
AddInt
|
|
StoreLocal r8
|
|
Drop1
|
|
Jump L8
|
|
L7:
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
LoadContextVar 1, 0
|
|
StoreContextVar 0, 2
|
|
Push r4
|
|
LoadContextParent
|
|
PopLocal r4
|
|
Jump L9
|
|
L9:
|
|
Push r4
|
|
LoadContextVar 0, 1
|
|
Push r4
|
|
LoadContextVar 0, 2
|
|
PushConstant CP#17
|
|
IndirectStaticCall 2, CP#14
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 11
|
|
Push r0
|
|
LoadFieldTOS CP#5
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 7
|
|
PopLocal r4
|
|
MoveSpecial exception, r6
|
|
MoveSpecial stackTrace, r7
|
|
Push r6
|
|
PopLocal r8
|
|
Push r7
|
|
PopLocal r9
|
|
Push r4
|
|
LoadContextVar 0, 1
|
|
Push r8
|
|
Push r9
|
|
InstanceCall 3, CP#20
|
|
Drop1
|
|
Jump L10
|
|
L10:
|
|
PushNull
|
|
ReturnTOS
|
|
L1:
|
|
Push r4
|
|
LoadContextVar 0, 6
|
|
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 {
|
|
#L4:
|
|
{
|
|
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 #t4 = 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 #L4;
|
|
}
|
|
asy::_completeOnAsyncReturn(:async_completer, :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 (version: stable) {
|
|
Entry 4
|
|
CheckStack 0
|
|
AllocateContext 0, 16
|
|
PopLocal r0
|
|
Push r0
|
|
Push FP[-7]
|
|
StoreContextVar 0, 0
|
|
Push r0
|
|
Push FP[-6]
|
|
StoreContextVar 0, 1
|
|
Push r0
|
|
Push FP[-5]
|
|
StoreContextVar 0, 2
|
|
Push r0
|
|
PushConstant CP#0
|
|
PushConstant CP#2
|
|
IndirectStaticCall 1, CP#1
|
|
StoreContextVar 0, 3
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 4
|
|
PushNull
|
|
PopLocal r2
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 5
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 6
|
|
Push r0
|
|
PushInt 0
|
|
StoreContextVar 0, 7
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 8
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 9
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 10
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 11
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 12
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 13
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 14
|
|
Push r0
|
|
Allocate CP#30
|
|
StoreLocal r3
|
|
Push r3
|
|
PushNull
|
|
StoreFieldTOS CP#31
|
|
Push r3
|
|
PushNull
|
|
StoreFieldTOS CP#33
|
|
Push r3
|
|
PushConstant CP#35
|
|
StoreFieldTOS CP#36
|
|
Push r3
|
|
PushConstant CP#3
|
|
StoreFieldTOS CP#38
|
|
Push r3
|
|
Push r0
|
|
StoreFieldTOS CP#5
|
|
StoreContextVar 0, 15
|
|
Push r0
|
|
LoadContextVar 0, 15
|
|
PushConstant CP#40
|
|
IndirectStaticCall 1, CP#1
|
|
PopLocal r2
|
|
Push r0
|
|
Push r0
|
|
LoadContextVar 0, 15
|
|
PushConstant CP#41
|
|
IndirectStaticCall 1, CP#1
|
|
StoreContextVar 0, 5
|
|
Push r0
|
|
Push r0
|
|
LoadContextVar 0, 15
|
|
PushConstant CP#42
|
|
IndirectStaticCall 1, CP#1
|
|
StoreContextVar 0, 6
|
|
PushConstant CP#43
|
|
Push r0
|
|
LoadContextVar 0, 15
|
|
PushConstant CP#44
|
|
IndirectStaticCall 2, CP#9
|
|
Drop1
|
|
Push r0
|
|
LoadContextVar 0, 3
|
|
InstanceCall 1, CP#45
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = TypeArgumentsForInstanceAllocation dart.async::Completer [dart.core::int]
|
|
[1] = ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#1
|
|
[3] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
|
|
[4] = Null
|
|
[5] = InstanceField dart.core::_Closure::_context
|
|
[6] = Reserved
|
|
[7] = ArgDesc num-args 4, num-type-args 0, names []
|
|
[8] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
|
|
[9] = ArgDesc num-args 2, num-type-args 0, names []
|
|
[10] = ICData target-name '+', arg-desc CP#9
|
|
[11] = Type dynamic
|
|
[12] = Type dart.core::Error
|
|
[13] = ICData target-name 'dart.core::_simpleInstanceOf', arg-desc CP#9
|
|
[14] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
|
|
[15] = ICData target-name '+', arg-desc CP#9
|
|
[16] = String 'fin'
|
|
[17] = StaticICData target 'dart.core::print', arg-desc CP#1
|
|
[18] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
|
|
[19] = ICData target-name '+', arg-desc CP#9
|
|
[20] = StaticICData target 'dart.core::print', arg-desc CP#1
|
|
[21] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
|
|
[22] = ICData target-name '+', arg-desc CP#9
|
|
[23] = StaticICData target 'dart.core::print', arg-desc CP#1
|
|
[24] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
|
|
[25] = ICData target-name '+', arg-desc CP#9
|
|
[26] = StaticICData target 'dart.async::_completeOnAsyncReturn', arg-desc CP#9
|
|
[27] = ArgDesc num-args 3, num-type-args 0, names []
|
|
[28] = ICData target-name 'completeError', arg-desc CP#27
|
|
[29] = EndClosureFunctionScope
|
|
[30] = Class dart.core::_Closure
|
|
[31] = InstanceField dart.core::_Closure::_instantiator_type_arguments
|
|
[32] = Reserved
|
|
[33] = InstanceField dart.core::_Closure::_function_type_arguments
|
|
[34] = Reserved
|
|
[35] = EmptyTypeArguments
|
|
[36] = InstanceField dart.core::_Closure::_delayed_type_arguments
|
|
[37] = Reserved
|
|
[38] = InstanceField dart.core::_Closure::_function
|
|
[39] = Reserved
|
|
[40] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
|
|
[41] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
|
|
[42] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
|
|
[43] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
|
|
[44] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#9
|
|
[45] = ICData get target-name 'future', arg-desc CP#1
|
|
}
|
|
Closure CP#3 {
|
|
EntryOptional 1, 3, 0
|
|
LoadConstant r1, CP#4
|
|
LoadConstant r2, CP#4
|
|
LoadConstant r3, CP#4
|
|
Frame 10
|
|
CheckStack 0
|
|
Push r0
|
|
LoadFieldTOS CP#5
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 7
|
|
StoreLocal r5
|
|
PushInt 0
|
|
JumpIfNeStrict L1
|
|
Push r4
|
|
Push r4
|
|
StoreContextVar 0, 9
|
|
Try #0 start:
|
|
AllocateContext 1, 2
|
|
StoreLocal r5
|
|
Push r5
|
|
Push r4
|
|
StoreContextParent
|
|
PopLocal r4
|
|
Push r4
|
|
PushInt 1
|
|
StoreContextVar 1, 0
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
StoreContextVar 0, 10
|
|
Try #1 start:
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
StoreContextVar 0, 11
|
|
Try #2 start:
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
LoadContextVar 1, 0
|
|
StoreContextVar 0, 14
|
|
Push r4
|
|
LoadContextParent
|
|
PushInt 1
|
|
StoreContextVar 0, 7
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
StoreContextVar 0, 8
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 0
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 5
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 6
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 15
|
|
PushConstant CP#8
|
|
IndirectStaticCall 4, CP#7
|
|
PopLocal r13
|
|
PushNull
|
|
ReturnTOS
|
|
L13:
|
|
Push r2
|
|
JumpIfNull L2
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L2:
|
|
Push r4
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 14
|
|
Push r1
|
|
InstanceCall 2, CP#10
|
|
StoreContextVar 1, 0
|
|
Jump L3
|
|
Try #2 end:
|
|
Try #2 handler:
|
|
SetFrame 14
|
|
Push r0
|
|
LoadFieldTOS CP#5
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 11
|
|
PopLocal r4
|
|
MoveSpecial exception, r10
|
|
MoveSpecial stackTrace, r11
|
|
Push r4
|
|
LoadContextParent
|
|
Push r10
|
|
StoreContextVar 0, 12
|
|
Push r4
|
|
LoadContextParent
|
|
Push r11
|
|
StoreContextVar 0, 13
|
|
Push r4
|
|
Push r10
|
|
StoreContextVar 1, 1
|
|
Push r4
|
|
LoadContextVar 1, 1
|
|
PushConstant CP#12
|
|
InstanceCall 2, CP#13
|
|
JumpIfFalse L4
|
|
Push r4
|
|
LoadContextParent
|
|
PushInt 42
|
|
StoreContextVar 0, 4
|
|
Jump L5
|
|
L4:
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
LoadContextVar 1, 0
|
|
StoreContextVar 0, 14
|
|
Push r4
|
|
LoadContextParent
|
|
PushInt 2
|
|
StoreContextVar 0, 7
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
StoreContextVar 0, 8
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 1
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 5
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 6
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 15
|
|
PushConstant CP#14
|
|
IndirectStaticCall 4, CP#7
|
|
PopLocal r13
|
|
PushNull
|
|
ReturnTOS
|
|
L14:
|
|
Push r2
|
|
JumpIfNull L6
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L6:
|
|
Push r4
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 14
|
|
Push r1
|
|
InstanceCall 2, CP#15
|
|
StoreContextVar 1, 0
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 12
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 13
|
|
Throw 1
|
|
L3:
|
|
Jump L7
|
|
Try #1 end:
|
|
Try #1 handler:
|
|
SetFrame 14
|
|
Push r0
|
|
LoadFieldTOS CP#5
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 10
|
|
PopLocal r4
|
|
MoveSpecial exception, r8
|
|
MoveSpecial stackTrace, r9
|
|
Push r4
|
|
LoadContextParent
|
|
Push r8
|
|
StoreContextVar 0, 12
|
|
Push r4
|
|
LoadContextParent
|
|
Push r9
|
|
StoreContextVar 0, 13
|
|
PushConstant CP#16
|
|
PushConstant CP#17
|
|
IndirectStaticCall 1, CP#1
|
|
Drop1
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
LoadContextVar 1, 0
|
|
StoreContextVar 0, 14
|
|
Push r4
|
|
LoadContextParent
|
|
PushInt 3
|
|
StoreContextVar 0, 7
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
StoreContextVar 0, 8
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 2
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 5
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 6
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 15
|
|
PushConstant CP#18
|
|
IndirectStaticCall 4, CP#7
|
|
PopLocal r12
|
|
PushNull
|
|
ReturnTOS
|
|
L15:
|
|
Push r2
|
|
JumpIfNull L8
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L8:
|
|
Push r4
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 14
|
|
Push r1
|
|
InstanceCall 2, CP#19
|
|
StoreContextVar 1, 0
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
LoadContextVar 1, 0
|
|
StoreContextVar 0, 4
|
|
Push r4
|
|
LoadContextParent
|
|
PopLocal r4
|
|
Jump L9
|
|
L5:
|
|
Push r0
|
|
LoadFieldTOS CP#5
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 10
|
|
PopLocal r4
|
|
PushConstant CP#16
|
|
PushConstant CP#20
|
|
IndirectStaticCall 1, CP#1
|
|
Drop1
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
LoadContextVar 1, 0
|
|
StoreContextVar 0, 14
|
|
Push r4
|
|
LoadContextParent
|
|
PushInt 4
|
|
StoreContextVar 0, 7
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
StoreContextVar 0, 8
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 2
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 5
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 6
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 15
|
|
PushConstant CP#21
|
|
IndirectStaticCall 4, CP#7
|
|
PopLocal r12
|
|
PushNull
|
|
ReturnTOS
|
|
L16:
|
|
Push r2
|
|
JumpIfNull L10
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L10:
|
|
Push r4
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 14
|
|
Push r1
|
|
InstanceCall 2, CP#22
|
|
StoreContextVar 1, 0
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
LoadContextVar 1, 0
|
|
StoreContextVar 0, 4
|
|
Push r4
|
|
LoadContextParent
|
|
PopLocal r4
|
|
Jump L9
|
|
L7:
|
|
Push r0
|
|
LoadFieldTOS CP#5
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 10
|
|
PopLocal r4
|
|
PushConstant CP#16
|
|
PushConstant CP#23
|
|
IndirectStaticCall 1, CP#1
|
|
Drop1
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
LoadContextVar 1, 0
|
|
StoreContextVar 0, 14
|
|
Push r4
|
|
LoadContextParent
|
|
PushInt 5
|
|
StoreContextVar 0, 7
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
StoreContextVar 0, 8
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 2
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 5
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 6
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 15
|
|
PushConstant CP#24
|
|
IndirectStaticCall 4, CP#7
|
|
PopLocal r12
|
|
PushNull
|
|
ReturnTOS
|
|
L17:
|
|
Push r2
|
|
JumpIfNull L11
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L11:
|
|
Push r4
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 0, 14
|
|
Push r1
|
|
InstanceCall 2, CP#25
|
|
StoreContextVar 1, 0
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
LoadContextVar 1, 0
|
|
StoreContextVar 0, 4
|
|
Push r4
|
|
LoadContextParent
|
|
PopLocal r4
|
|
Jump L9
|
|
L9:
|
|
Push r4
|
|
LoadContextVar 0, 3
|
|
Push r4
|
|
LoadContextVar 0, 4
|
|
PushConstant CP#26
|
|
IndirectStaticCall 2, CP#9
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 14
|
|
Push r0
|
|
LoadFieldTOS CP#5
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 9
|
|
PopLocal r4
|
|
MoveSpecial exception, r6
|
|
MoveSpecial stackTrace, r7
|
|
Push r6
|
|
PopLocal r8
|
|
Push r7
|
|
PopLocal r9
|
|
Push r4
|
|
LoadContextVar 0, 3
|
|
Push r8
|
|
Push r9
|
|
InstanceCall 3, CP#28
|
|
Drop1
|
|
Jump L12
|
|
L12:
|
|
PushNull
|
|
ReturnTOS
|
|
L1:
|
|
Push r4
|
|
LoadContextVar 0, 8
|
|
PopLocal r4
|
|
Push r5
|
|
PushInt 1
|
|
JumpIfEqStrict L13
|
|
Push r5
|
|
PushInt 2
|
|
JumpIfEqStrict L14
|
|
Push r5
|
|
PushInt 3
|
|
JumpIfEqStrict L15
|
|
Push r5
|
|
PushInt 4
|
|
JumpIfEqStrict 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 {
|
|
#L5:
|
|
{
|
|
core::int x = 1;
|
|
try
|
|
try {
|
|
:async_temporary_0 = x;
|
|
[yield] let dynamic #t5 = 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 #L5;
|
|
}
|
|
:async_temporary_0 = x;
|
|
[yield] let dynamic #t6 = 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 #t7 = asy::_awaitHelper(c, :async_op_then, :async_op_error, :async_op) in null;
|
|
x = :async_temporary_0.{core::num::+}(:result);
|
|
:return_value = x;
|
|
break #L5;
|
|
}
|
|
}
|
|
asy::_completeOnAsyncReturn(:async_completer, :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 (version: stable) {
|
|
Entry 4
|
|
CheckStack 0
|
|
AllocateContext 0, 2
|
|
PopLocal r0
|
|
Push r0
|
|
Push FP[-5]
|
|
StoreContextVar 0, 0
|
|
Push r0
|
|
PushInt 3
|
|
StoreContextVar 0, 1
|
|
Allocate CP#19
|
|
StoreLocal r3
|
|
Push r3
|
|
PushNull
|
|
StoreFieldTOS CP#20
|
|
Push r3
|
|
PushNull
|
|
StoreFieldTOS CP#22
|
|
Push r3
|
|
PushConstant CP#24
|
|
StoreFieldTOS CP#25
|
|
Push r3
|
|
PushConstant CP#0
|
|
StoreFieldTOS CP#27
|
|
Push r3
|
|
Push r0
|
|
StoreFieldTOS CP#1
|
|
PopLocal r2
|
|
Push r2
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ClosureFunction nested () → dart.async::Future<dart.core::int> /* originally async */ ;
|
|
[1] = InstanceField dart.core::_Closure::_context
|
|
[2] = Reserved
|
|
[3] = TypeArgumentsForInstanceAllocation dart.async::Completer [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] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
|
|
[7] = Null
|
|
[8] = ArgDesc num-args 4, num-type-args 0, names []
|
|
[9] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#8
|
|
[10] = Type dynamic
|
|
[11] = String 'fin'
|
|
[12] = StaticICData target 'dart.core::print', arg-desc CP#4
|
|
[13] = StaticICData target 'dart.core::print', arg-desc CP#4
|
|
[14] = ArgDesc num-args 2, num-type-args 0, names []
|
|
[15] = StaticICData target 'dart.async::_completeOnAsyncReturn', arg-desc CP#14
|
|
[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] = InstanceField dart.core::_Closure::_instantiator_type_arguments
|
|
[21] = Reserved
|
|
[22] = InstanceField dart.core::_Closure::_function_type_arguments
|
|
[23] = Reserved
|
|
[24] = EmptyTypeArguments
|
|
[25] = InstanceField dart.core::_Closure::_delayed_type_arguments
|
|
[26] = Reserved
|
|
[27] = InstanceField dart.core::_Closure::_function
|
|
[28] = Reserved
|
|
[29] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#4
|
|
[30] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#4
|
|
[31] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#4
|
|
[32] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
|
|
[33] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#14
|
|
[34] = ICData get target-name 'future', arg-desc CP#4
|
|
[35] = EndClosureFunctionScope
|
|
}
|
|
Closure CP#6 {
|
|
EntryOptional 1, 3, 0
|
|
LoadConstant r1, CP#7
|
|
LoadConstant r2, CP#7
|
|
LoadConstant r3, CP#7
|
|
Frame 8
|
|
CheckStack 0
|
|
Push r0
|
|
LoadFieldTOS CP#1
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 1, 4
|
|
StoreLocal r5
|
|
PushInt 0
|
|
JumpIfNeStrict L1
|
|
Push r4
|
|
Push r4
|
|
StoreContextVar 1, 6
|
|
Try #0 start:
|
|
AllocateContext 2, 1
|
|
StoreLocal r5
|
|
Push r5
|
|
Push r4
|
|
StoreContextParent
|
|
PopLocal r4
|
|
Push r4
|
|
PushInt 4
|
|
StoreContextVar 2, 0
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
StoreContextVar 1, 7
|
|
Try #1 start:
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
PushInt 5
|
|
StoreContextVar 0, 1
|
|
Push r4
|
|
LoadContextParent
|
|
PushInt 1
|
|
StoreContextVar 1, 4
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
StoreContextVar 1, 5
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextVar 0, 0
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 1, 2
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 1, 3
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextVar 1, 8
|
|
PushConstant CP#9
|
|
IndirectStaticCall 4, CP#8
|
|
PopLocal r11
|
|
PushNull
|
|
ReturnTOS
|
|
L6:
|
|
Push r2
|
|
JumpIfNull L2
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L2:
|
|
Push r4
|
|
Push r1
|
|
StoreContextVar 2, 0
|
|
Push r4
|
|
LoadContextParent
|
|
Push r4
|
|
LoadContextParent
|
|
LoadContextParent
|
|
LoadContextVar 0, 1
|
|
Push r4
|
|
LoadContextVar 2, 0
|
|
AddInt
|
|
StoreContextVar 1, 1
|
|
Jump L3
|
|
Try #1 end:
|
|
Try #1 handler:
|
|
SetFrame 12
|
|
Push r0
|
|
LoadFieldTOS CP#1
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 1, 7
|
|
PopLocal r4
|
|
MoveSpecial exception, r8
|
|
MoveSpecial stackTrace, r9
|
|
PushConstant CP#11
|
|
PushConstant CP#12
|
|
IndirectStaticCall 1, CP#4
|
|
Drop1
|
|
Push r8
|
|
Push r9
|
|
Throw 1
|
|
L3:
|
|
Push r0
|
|
LoadFieldTOS CP#1
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 1, 7
|
|
PopLocal r4
|
|
PushConstant CP#11
|
|
PushConstant CP#13
|
|
IndirectStaticCall 1, CP#4
|
|
Drop1
|
|
Push r4
|
|
LoadContextParent
|
|
PopLocal r4
|
|
Jump L4
|
|
L4:
|
|
Push r4
|
|
LoadContextVar 1, 0
|
|
Push r4
|
|
LoadContextVar 1, 1
|
|
PushConstant CP#15
|
|
IndirectStaticCall 2, CP#14
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 12
|
|
Push r0
|
|
LoadFieldTOS CP#1
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 1, 6
|
|
PopLocal r4
|
|
MoveSpecial exception, r6
|
|
MoveSpecial stackTrace, r7
|
|
Push r6
|
|
PopLocal r8
|
|
Push r7
|
|
PopLocal r9
|
|
Push r4
|
|
LoadContextVar 1, 0
|
|
Push r8
|
|
Push r9
|
|
InstanceCall 3, CP#17
|
|
Drop1
|
|
Jump L5
|
|
L5:
|
|
PushNull
|
|
ReturnTOS
|
|
L1:
|
|
Push r4
|
|
LoadContextVar 1, 5
|
|
PopLocal r4
|
|
Jump L6
|
|
|
|
}
|
|
|
|
Closure CP#0 {
|
|
EntryFixed 1, 4
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
LoadFieldTOS CP#1
|
|
PopLocal r0
|
|
AllocateContext 1, 9
|
|
StoreLocal r1
|
|
Push r1
|
|
Push r0
|
|
StoreContextParent
|
|
PopLocal r0
|
|
Push r0
|
|
PushConstant CP#3
|
|
PushConstant CP#5
|
|
IndirectStaticCall 1, CP#4
|
|
StoreContextVar 1, 0
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 1, 1
|
|
PushNull
|
|
PopLocal r2
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 1, 2
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 1, 3
|
|
Push r0
|
|
PushInt 0
|
|
StoreContextVar 1, 4
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 1, 5
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 1, 6
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 1, 7
|
|
Push r0
|
|
Allocate CP#19
|
|
StoreLocal r3
|
|
Push r3
|
|
PushNull
|
|
StoreFieldTOS CP#20
|
|
Push r3
|
|
PushNull
|
|
StoreFieldTOS CP#22
|
|
Push r3
|
|
PushConstant CP#24
|
|
StoreFieldTOS CP#25
|
|
Push r3
|
|
PushConstant CP#6
|
|
StoreFieldTOS CP#27
|
|
Push r3
|
|
Push r0
|
|
StoreFieldTOS CP#1
|
|
StoreContextVar 1, 8
|
|
Push r0
|
|
LoadContextVar 1, 8
|
|
PushConstant CP#29
|
|
IndirectStaticCall 1, CP#4
|
|
PopLocal r2
|
|
Push r0
|
|
Push r0
|
|
LoadContextVar 1, 8
|
|
PushConstant CP#30
|
|
IndirectStaticCall 1, CP#4
|
|
StoreContextVar 1, 2
|
|
Push r0
|
|
Push r0
|
|
LoadContextVar 1, 8
|
|
PushConstant CP#31
|
|
IndirectStaticCall 1, CP#4
|
|
StoreContextVar 1, 3
|
|
PushConstant CP#32
|
|
Push r0
|
|
LoadContextVar 1, 8
|
|
PushConstant CP#33
|
|
IndirectStaticCall 2, CP#14
|
|
Drop1
|
|
Push r0
|
|
LoadContextVar 1, 0
|
|
InstanceCall 1, CP#34
|
|
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 {
|
|
#L6:
|
|
{
|
|
core::int y = 4;
|
|
try {
|
|
x = 5;
|
|
[yield] let dynamic #t8 = asy::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
|
|
y = :result;
|
|
:return_value = x.{core::num::+}(y);
|
|
break #L6;
|
|
}
|
|
finally {
|
|
core::print("fin");
|
|
}
|
|
}
|
|
asy::_completeOnAsyncReturn(:async_completer, :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 (version: stable) {
|
|
Entry 4
|
|
CheckStack 0
|
|
AllocateContext 0, 9
|
|
PopLocal r0
|
|
Push r0
|
|
Push FP[-5]
|
|
StoreContextVar 0, 0
|
|
Push r0
|
|
PushConstant CP#0
|
|
PushConstant CP#2
|
|
IndirectStaticCall 1, CP#1
|
|
StoreContextVar 0, 1
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 2
|
|
PushNull
|
|
PopLocal r2
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 3
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 4
|
|
Push r0
|
|
PushInt 0
|
|
StoreContextVar 0, 5
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 6
|
|
Push r0
|
|
PushNull
|
|
StoreContextVar 0, 7
|
|
Push r0
|
|
Allocate CP#17
|
|
StoreLocal r3
|
|
Push r3
|
|
PushNull
|
|
StoreFieldTOS CP#18
|
|
Push r3
|
|
PushNull
|
|
StoreFieldTOS CP#20
|
|
Push r3
|
|
PushConstant CP#22
|
|
StoreFieldTOS CP#23
|
|
Push r3
|
|
PushConstant CP#3
|
|
StoreFieldTOS CP#25
|
|
Push r3
|
|
Push r0
|
|
StoreFieldTOS CP#5
|
|
StoreContextVar 0, 8
|
|
Push r0
|
|
LoadContextVar 0, 8
|
|
PushConstant CP#27
|
|
IndirectStaticCall 1, CP#1
|
|
PopLocal r2
|
|
Push r0
|
|
Push r0
|
|
LoadContextVar 0, 8
|
|
PushConstant CP#28
|
|
IndirectStaticCall 1, CP#1
|
|
StoreContextVar 0, 3
|
|
Push r0
|
|
Push r0
|
|
LoadContextVar 0, 8
|
|
PushConstant CP#29
|
|
IndirectStaticCall 1, CP#1
|
|
StoreContextVar 0, 4
|
|
PushConstant CP#30
|
|
Push r0
|
|
LoadContextVar 0, 8
|
|
PushConstant CP#31
|
|
IndirectStaticCall 2, CP#9
|
|
Drop1
|
|
Push r0
|
|
LoadContextVar 0, 1
|
|
InstanceCall 1, CP#32
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = TypeArgumentsForInstanceAllocation dart.async::Completer [dart.core::int]
|
|
[1] = ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = StaticICData target 'dart.async::Completer::sync', arg-desc CP#1
|
|
[3] = ClosureFunction :async_op ([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding ;
|
|
[4] = Null
|
|
[5] = InstanceField dart.core::_Closure::_context
|
|
[6] = Reserved
|
|
[7] = ArgDesc num-args 4, num-type-args 0, names []
|
|
[8] = StaticICData target 'dart.async::_awaitHelper', arg-desc CP#7
|
|
[9] = ArgDesc num-args 2, num-type-args 0, names []
|
|
[10] = ICData target-name '==', arg-desc CP#9
|
|
[11] = ArgDesc num-args 3, num-type-args 0, names []
|
|
[12] = StaticICData target 'dart.core::_AssertionError::_throwNew', arg-desc CP#11
|
|
[13] = StaticICData target 'dart.async::_completeOnAsyncReturn', arg-desc CP#9
|
|
[14] = Type dynamic
|
|
[15] = ICData target-name 'completeError', arg-desc CP#11
|
|
[16] = EndClosureFunctionScope
|
|
[17] = Class dart.core::_Closure
|
|
[18] = InstanceField dart.core::_Closure::_instantiator_type_arguments
|
|
[19] = Reserved
|
|
[20] = InstanceField dart.core::_Closure::_function_type_arguments
|
|
[21] = Reserved
|
|
[22] = EmptyTypeArguments
|
|
[23] = InstanceField dart.core::_Closure::_delayed_type_arguments
|
|
[24] = Reserved
|
|
[25] = InstanceField dart.core::_Closure::_function
|
|
[26] = Reserved
|
|
[27] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
|
|
[28] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
|
|
[29] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
|
|
[30] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
|
|
[31] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#9
|
|
[32] = ICData get target-name 'future', arg-desc CP#1
|
|
}
|
|
Closure CP#3 {
|
|
EntryOptional 1, 3, 0
|
|
LoadConstant r1, CP#4
|
|
LoadConstant r2, CP#4
|
|
LoadConstant r3, CP#4
|
|
Frame 6
|
|
CheckStack 0
|
|
Push r0
|
|
LoadFieldTOS CP#5
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 5
|
|
StoreLocal r5
|
|
PushInt 0
|
|
JumpIfNeStrict L1
|
|
Push r4
|
|
Push r4
|
|
StoreContextVar 0, 7
|
|
Try #0 start:
|
|
JumpIfNoAsserts L2
|
|
Push r4
|
|
PushInt 1
|
|
StoreContextVar 0, 5
|
|
Push r4
|
|
Push r4
|
|
StoreContextVar 0, 6
|
|
Push r4
|
|
LoadContextVar 0, 0
|
|
Push r4
|
|
LoadContextVar 0, 3
|
|
Push r4
|
|
LoadContextVar 0, 4
|
|
Push r4
|
|
LoadContextVar 0, 8
|
|
PushConstant CP#8
|
|
IndirectStaticCall 4, CP#7
|
|
PopLocal r8
|
|
PushNull
|
|
ReturnTOS
|
|
L6:
|
|
Push r2
|
|
JumpIfNull L3
|
|
Push r2
|
|
Push r3
|
|
Throw 1
|
|
L3:
|
|
JumpIfNoAsserts L2
|
|
Push r1
|
|
PushInt 42
|
|
InstanceCall 2, CP#10
|
|
AssertBoolean 0
|
|
JumpIfTrue L2
|
|
PushInt 0
|
|
PushInt 0
|
|
PushNull
|
|
PushConstant CP#12
|
|
IndirectStaticCall 3, CP#11
|
|
Drop1
|
|
L2:
|
|
Push r4
|
|
PushInt 7
|
|
StoreContextVar 0, 2
|
|
Jump L4
|
|
L4:
|
|
Push r4
|
|
LoadContextVar 0, 1
|
|
Push r4
|
|
LoadContextVar 0, 2
|
|
PushConstant CP#13
|
|
IndirectStaticCall 2, CP#9
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 10
|
|
Push r0
|
|
LoadFieldTOS CP#5
|
|
PopLocal r4
|
|
Push r4
|
|
LoadContextVar 0, 7
|
|
PopLocal r4
|
|
MoveSpecial exception, r6
|
|
MoveSpecial stackTrace, r7
|
|
Push r6
|
|
PopLocal r8
|
|
Push r7
|
|
PopLocal r9
|
|
Push r4
|
|
LoadContextVar 0, 1
|
|
Push r8
|
|
Push r9
|
|
InstanceCall 3, CP#15
|
|
Drop1
|
|
Jump L5
|
|
L5:
|
|
PushNull
|
|
ReturnTOS
|
|
L1:
|
|
Push r4
|
|
LoadContextVar 0, 6
|
|
PopLocal r4
|
|
Jump L6
|
|
|
|
}
|
|
]static method testAssert(asy::Future<core::int> a) → 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;
|
|
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
|
|
try {
|
|
#L7:
|
|
{
|
|
assert {
|
|
[yield] let dynamic #t9 = asy::_awaitHelper(a, :async_op_then, :async_op_error, :async_op) in null;
|
|
assert(:result.{core::num::==}(42));
|
|
}
|
|
:return_value = 7;
|
|
break #L7;
|
|
}
|
|
asy::_completeOnAsyncReturn(:async_completer, :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 (version: stable) {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
}
|
|
]static method main() → dynamic {}
|