Files
sdk/pkg/vm/testcases/bytecode/async.dart.expect
T
Alexander Markov d52d060950 [vm/kernel/bytecode] Count type arguments argument for factory calls
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>
2018-06-07 17:24:08 +00:00

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