blob: cf905614ea429c05aeb0e0c2cd5f02e48aa14250 [file] [log] [blame]
library #lib;
import self as self;
import "dart:core" as core;
typedef IntFunc = (core::int) dynamic;
class C1 extends core::Object {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack
Push FP[-5]
PushConstant CP#1
IndirectStaticCall 1, CP#0
Drop1
PushConstant CP#2
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
[2] = Null
}
] synthetic constructor •() void
: super core::Object::•()
;
}
class C2 extends core::Object {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack
Push FP[-5]
PushConstant CP#1
IndirectStaticCall 1, CP#0
Drop1
PushConstant CP#2
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
[2] = Null
}
] synthetic constructor •() void
: super core::Object::•()
;
}
class C3 extends core::Object {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack
Push FP[-5]
PushConstant CP#1
IndirectStaticCall 1, CP#0
Drop1
PushConstant CP#2
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
[2] = Null
}
] synthetic constructor •() void
: super core::Object::•()
;
}
class C4 extends core::Object {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack
Push FP[-5]
PushConstant CP#1
IndirectStaticCall 1, CP#0
Drop1
PushConstant CP#2
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
[2] = Null
}
] synthetic constructor •() void
: super core::Object::•()
;
}
class C5 extends core::Object {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack
Push FP[-5]
PushConstant CP#1
IndirectStaticCall 1, CP#0
Drop1
PushConstant CP#2
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
[2] = Null
}
] synthetic constructor •() void
: super core::Object::•()
;
}
class C6 extends core::Object {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack
Push FP[-5]
PushConstant CP#1
IndirectStaticCall 1, CP#0
Drop1
PushConstant CP#2
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
[2] = Null
}
] synthetic constructor •() void
: super core::Object::•()
;
}
class C7 extends core::Object {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack
Push FP[-5]
PushConstant CP#1
IndirectStaticCall 1, CP#0
Drop1
PushConstant CP#2
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
[2] = Null
}
] synthetic constructor •() void
: super core::Object::•()
;
}
class C8 extends core::Object {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack
Push FP[-5]
PushConstant CP#1
IndirectStaticCall 1, CP#0
Drop1
PushConstant CP#2
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
[2] = Null
}
] synthetic constructor •() void
: super core::Object::•()
;
}
class A<T1 extends core::Object = dynamic, T2 extends core::Object = dynamic> extends core::Object {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack
Push FP[-5]
PushConstant CP#1
IndirectStaticCall 1, CP#0
Drop1
PushConstant CP#2
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
[2] = Null
}
] synthetic constructor •() void
: super core::Object::•()
;
[@vm.bytecode=
Bytecode {
Entry 5
CheckStack
CheckFunctionTypeArgs 2, 0
AllocateContext 1
PopLocal r1
Push r1
Push FP[-5]
StoreContextVar 0
Allocate CP#38
StoreLocal r4
Push r4
Push r1
LoadContextVar 0
LoadTypeArgumentsField CP#17
StoreFieldTOS CP#39
Push r4
Push r0
StoreFieldTOS CP#3
Push r4
PushConstant CP#0
StoreFieldTOS CP#41
Push r4
Push r1
StoreFieldTOS CP#1
PopLocal r3
PushConstant CP#51
Push r3
InstanceCall1 2, CP#52
Drop1
PushConstant CP#53
Push r3
InstanceCall1 2, CP#54
Drop1
PushConstant CP#18
ReturnTOS
}
ConstantPool {
[0] = ClosureFunction nested1 <T5 extends dart.core::Object = dynamic, T6 extends dart.core::Object = dynamic>() void;
[1] = InstanceField dart.core::_Closure::_context
[2] = Reserved
[3] = InstanceField dart.core::_Closure::_function_type_arguments
[4] = Reserved
[5] = Int 2
[6] = Int 4
[7] = ArgDesc num-args 4, num-type-args 0, names []
[8] = StaticICData target 'dart._internal::_prependTypeArguments', arg-desc CP#7
[9] = ClosureFunction nested2 <T7 extends dart.core::Object = dynamic, T8 extends dart.core::Object = dynamic>() void;
[10] = Int 6
[11] = StaticICData target 'dart._internal::_prependTypeArguments', arg-desc CP#7
[12] = ClosureFunction <anonymous closure> () dart.core::Null;
[13] = TypeArgs [dart.core::Type]
[14] = Int 8
[15] = Int 0
[16] = Type #lib::A::T1
[17] = TypeArgumentsField #lib::A
[18] = Null
[19] = Int 1
[20] = Type #lib::A::T2
[21] = Type #lib::A::foo::T3
[22] = Int 3
[23] = Type #lib::A::foo::T4
[24] = Type T5
[25] = Int 5
[26] = Type T6
[27] = Type T7
[28] = Int 7
[29] = Type T8
[30] = ArgDesc num-args 2, num-type-args 0, names []
[31] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#30
[32] = ArgDesc num-args 1, num-type-args 0, names []
[33] = StaticICData target 'dart.core::print', arg-desc CP#32
[34] = TypeArgs [#lib::A::T1, #lib::A::T2, #lib::A::foo::T3, #lib::A::foo::T4, T5, T6, T7, T8]
[35] = ArgDesc num-args 0, num-type-args 8, names []
[36] = StaticICData target '#lib::callWithArgs', arg-desc CP#35
[37] = EndClosureFunctionScope
[38] = Class dart.core::_Closure
[39] = InstanceField dart.core::_Closure::_instantiator_type_arguments
[40] = Reserved
[41] = InstanceField dart.core::_Closure::_function
[42] = Reserved
[43] = ICData target-name 'call', arg-desc CP#32
[44] = EndClosureFunctionScope
[45] = TypeArgs [#lib::C7, #lib::C8]
[46] = ArgDesc num-args 1, num-type-args 2, names []
[47] = ICData target-name 'call', arg-desc CP#46
[48] = TypeArgs [dart.core::List<#lib::C7>, dart.core::List<#lib::C8>]
[49] = ICData target-name 'call', arg-desc CP#46
[50] = EndClosureFunctionScope
[51] = TypeArgs [#lib::C5, #lib::C6]
[52] = ICData target-name 'call', arg-desc CP#46
[53] = TypeArgs [dart.core::List<#lib::C5>, dart.core::List<#lib::C6>]
[54] = ICData target-name 'call', arg-desc CP#46
}
Closure CP#12 {
Entry 4
CheckStack
Push FP[-5]
LoadFieldTOS CP#1
PopLocal r1
Push FP[-5]
LoadFieldTOS CP#3
PopLocal r0
PushConstant CP#13
StoreLocal r3
Push r3
PushConstant CP#14
CreateArrayTOS
StoreLocal r3
Push r3
PushConstant CP#15
Push r1
LoadContextVar 0
LoadTypeArgumentsField CP#17
PushConstant CP#18
InstantiateType CP#16
StoreIndexedTOS
Push r3
PushConstant CP#19
Push r1
LoadContextVar 0
LoadTypeArgumentsField CP#17
PushConstant CP#18
InstantiateType CP#20
StoreIndexedTOS
Push r3
PushConstant CP#5
PushConstant CP#18
Push r0
InstantiateType CP#21
StoreIndexedTOS
Push r3
PushConstant CP#22
PushConstant CP#18
Push r0
InstantiateType CP#23
StoreIndexedTOS
Push r3
PushConstant CP#6
PushConstant CP#18
Push r0
InstantiateType CP#24
StoreIndexedTOS
Push r3
PushConstant CP#25
PushConstant CP#18
Push r0
InstantiateType CP#26
StoreIndexedTOS
Push r3
PushConstant CP#10
PushConstant CP#18
Push r0
InstantiateType CP#27
StoreIndexedTOS
Push r3
PushConstant CP#28
PushConstant CP#18
Push r0
InstantiateType CP#29
StoreIndexedTOS
PushConstant CP#31
IndirectStaticCall 2, CP#30
PushConstant CP#33
IndirectStaticCall 1, CP#32
Drop1
Push r1
LoadContextVar 0
LoadTypeArgumentsField CP#17
Push r0
InstantiateTypeArgumentsTOS 0, CP#34
PushConstant CP#36
IndirectStaticCall 1, CP#35
Drop1
PushConstant CP#18
ReturnTOS
}
Closure CP#9 {
Entry 5
CheckStack
Push FP[-5]
LoadFieldTOS CP#1
PopLocal r1
CheckFunctionTypeArgs 2, 0
Push r0
Push FP[-5]
LoadFieldTOS CP#3
PushConstant CP#6
PushConstant CP#10
PushConstant CP#11
IndirectStaticCall 4, CP#7
PopLocal r0
Allocate CP#38
StoreLocal r4
Push r4
Push r1
LoadContextVar 0
LoadTypeArgumentsField CP#17
StoreFieldTOS CP#39
Push r4
Push r0
StoreFieldTOS CP#3
Push r4
PushConstant CP#12
StoreFieldTOS CP#41
Push r4
Push r1
StoreFieldTOS CP#1
PopLocal r3
Push r3
InstanceCall1 1, CP#43
Drop1
PushConstant CP#18
ReturnTOS
}
Closure CP#0 {
Entry 5
CheckStack
Push FP[-5]
LoadFieldTOS CP#1
PopLocal r1
CheckFunctionTypeArgs 2, 0
Push r0
Push FP[-5]
LoadFieldTOS CP#3
PushConstant CP#5
PushConstant CP#6
PushConstant CP#8
IndirectStaticCall 4, CP#7
PopLocal r0
Allocate CP#38
StoreLocal r4
Push r4
Push r1
LoadContextVar 0
LoadTypeArgumentsField CP#17
StoreFieldTOS CP#39
Push r4
Push r0
StoreFieldTOS CP#3
Push r4
PushConstant CP#9
StoreFieldTOS CP#41
Push r4
Push r1
StoreFieldTOS CP#1
PopLocal r3
PushConstant CP#45
Push r3
InstanceCall1 2, CP#47
Drop1
PushConstant CP#48
Push r3
InstanceCall1 2, CP#49
Drop1
PushConstant CP#18
ReturnTOS
}
] method foo<T3 extends core::Object = dynamic, T4 extends core::Object = dynamic>() void {
function nested1<T5 extends core::Object = dynamic, T6 extends core::Object = dynamic>() void {
function nested2<T7 extends core::Object = dynamic, T8 extends core::Object = dynamic>() void {
() core::Null nested3 = () core::Null {
core::print(<core::Type>[self::A::T1, self::A::T2, self::A::foo::T3, self::A::foo::T4, T5, T6, T7, T8]);
self::callWithArgs<self::A::T1, self::A::T2, self::A::foo::T3, self::A::foo::T4, T5, T6, T7, T8>();
};
nested3.call();
}
nested2.call<self::C7, self::C8>();
nested2.call<core::List<self::C7>, core::List<self::C8>>();
}
nested1.call<self::C5, self::C6>();
nested1.call<core::List<self::C5>, core::List<self::C6>>();
}
}
class B extends core::Object {
field core::int foo = null;
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack
Push FP[-5]
PushConstant CP#1
IndirectStaticCall 1, CP#0
Drop1
PushConstant CP#2
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
[2] = Null
}
] synthetic constructor •() void
: super core::Object::•()
;
[@vm.bytecode=
Bytecode {
Entry 5
CheckStack
AllocateContext 1
PopLocal r0
Push r0
Push FP[-5]
StoreContextVar 0
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreContextParent
PopLocal r0
Push r0
PushConstant CP#0
StoreContextVar 0
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreContextParent
PopLocal r0
PushConstant CP#1
PopLocal r2
Push r0
PushConstant CP#2
StoreContextVar 0
Allocate CP#22
StoreLocal r4
Push r4
PushConstant CP#6
StoreFieldTOS CP#23
Push r4
PushConstant CP#6
StoreFieldTOS CP#25
Push r4
PushConstant CP#3
StoreFieldTOS CP#27
Push r4
Push r0
StoreFieldTOS CP#4
PopLocal r3
Push r3
PushConstant CP#32
InstanceCall1 2, CP#33
Drop1
Push r3
PushConstant CP#34
InstanceCall1 2, CP#35
Drop1
Push r2
PushConstant CP#36
IndirectStaticCall 1, CP#18
Drop1
Push r0
LoadContextVar 0
PushConstant CP#37
IndirectStaticCall 1, CP#18
Drop1
Push r0
LoadContextParent
PopLocal r0
Push r0
LoadContextVar 0
PushConstant CP#38
IndirectStaticCall 1, CP#18
Drop1
Push r0
LoadContextParent
PopLocal r0
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreContextParent
PopLocal r0
Push r0
PushConstant CP#39
StoreContextVar 0
Allocate CP#22
StoreLocal r3
Push r3
PushConstant CP#6
StoreFieldTOS CP#23
Push r3
PushConstant CP#6
StoreFieldTOS CP#25
Push r3
PushConstant CP#40
StoreFieldTOS CP#27
Push r3
Push r0
StoreFieldTOS CP#4
PopLocal r2
Push r2
InstanceCall1 1, CP#43
Drop1
Push r0
LoadContextParent
PopLocal r0
PushConstant CP#6
ReturnTOS
}
ConstantPool {
[0] = Int 1
[1] = Int 2
[2] = Int 3
[3] = ClosureFunction <anonymous closure> (dart.core::int y) dart.core::Null;
[4] = InstanceField dart.core::_Closure::_context
[5] = Reserved
[6] = Null
[7] = Type dart.core::int
[8] = String 'y'
[9] = SubtypeTestCache
[10] = ArgDesc num-args 2, num-type-args 0, names []
[11] = ICData target-name '+', arg-desc CP#10
[12] = Int 5
[13] = ICData target-name '>', arg-desc CP#10
[14] = Bool true
[15] = Int 4
[16] = ClosureFunction closure2 () void;
[17] = ICData target-name '+', arg-desc CP#10
[18] = ArgDesc num-args 1, num-type-args 0, names []
[19] = ICData get target-name 'foo', arg-desc CP#18
[20] = ICData target-name '+', arg-desc CP#10
[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] = InstanceField dart.core::_Closure::_function
[28] = Reserved
[29] = ICData target-name 'call', arg-desc CP#18
[30] = StaticICData target 'dart.core::print', arg-desc CP#18
[31] = EndClosureFunctionScope
[32] = Int 10
[33] = ICData target-name 'call', arg-desc CP#10
[34] = Int 11
[35] = ICData target-name 'call', arg-desc CP#10
[36] = StaticICData target 'dart.core::print', arg-desc CP#18
[37] = StaticICData target 'dart.core::print', arg-desc CP#18
[38] = StaticICData target 'dart.core::print', arg-desc CP#18
[39] = Int 42
[40] = ClosureFunction <anonymous closure> () dart.core::Null;
[41] = ICData set target-name 'foo', arg-desc CP#10
[42] = EndClosureFunctionScope
[43] = ICData target-name 'call', arg-desc CP#18
}
Closure CP#16 {
Entry 3
CheckStack
Push FP[-5]
LoadFieldTOS CP#4
PopLocal r0
Push r0
LoadContextParent
LoadContextParent
Push r0
LoadContextParent
LoadContextParent
LoadContextParent
LoadContextVar 0
PushConstant CP#1
InstanceCall1 2, CP#17
StoreContextVar 0
Push r0
Push r0
LoadContextParent
LoadContextParent
LoadContextParent
LoadContextParent
LoadContextVar 0
InstanceCall1 1, CP#19
Push r0
LoadContextParent
LoadContextVar 0
InstanceCall1 2, CP#20
StoreContextVar 0
PushConstant CP#6
ReturnTOS
}
Closure CP#3 {
Entry 4
CheckStack
Push FP[-6]
LoadFieldTOS CP#4
PopLocal r0
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreContextParent
PopLocal r0
Push r0
LoadContextParent
LoadContextParent
LoadContextParent
Push FP[-5]
StoreContextVar 0
Push r0
Push FP[-5]
StoreContextVar 0
Push FP[-5]
PushConstant CP#6
PushConstant CP#6
PushConstant CP#7
PushConstant CP#8
AssertAssignable 1, CP#9
Drop1
Push r0
LoadContextParent
LoadContextParent
Push r0
LoadContextVar 0
PushConstant CP#0
InstanceCall1 2, CP#11
StoreContextVar 0
Push r0
LoadContextParent
LoadContextParent
LoadContextVar 0
PushConstant CP#12
InstanceCall1 2, CP#13
AssertBoolean 0
PushConstant CP#14
IfNeStrictTOS
Jump L1
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreContextParent
PopLocal r0
Push r0
PushConstant CP#15
StoreContextVar 0
Allocate CP#22
StoreLocal r2
Push r2
PushConstant CP#6
StoreFieldTOS CP#23
Push r2
PushConstant CP#6
StoreFieldTOS CP#25
Push r2
PushConstant CP#16
StoreFieldTOS CP#27
Push r2
Push r0
StoreFieldTOS CP#4
PopLocal r3
Push r3
InstanceCall1 1, CP#29
Drop1
Push r0
LoadContextVar 0
PushConstant CP#30
IndirectStaticCall 1, CP#18
Drop1
Push r0
LoadContextParent
PopLocal r0
L1:
PushConstant CP#6
ReturnTOS
}
Closure CP#40 {
Entry 3
CheckStack
Push FP[-5]
LoadFieldTOS CP#4
PopLocal r0
Push r0
LoadContextParent
LoadContextVar 0
Push r0
LoadContextVar 0
InstanceCall1 2, CP#41
Drop1
PushConstant CP#6
ReturnTOS
}
] method topLevel() void {
{
core::int x = 1;
{
core::int y = 2;
core::int z = 3;
(core::int) core::Null closure1 = (core::int y) core::Null {
x = y.{core::num::+}(1);
if(x.{core::num::>}(5)) {
core::int w = 4;
function closure2() void {
z = x.{core::num::+}(2);
w = this.{self::B::foo}.{core::num::+}(y);
}
closure2.call();
core::print(w);
}
};
closure1.call(10);
closure1.call(11);
core::print(y);
core::print(z);
}
core::print(x);
}
{
core::int x = 42;
() core::Null closure3 = () core::Null {
this.{self::B::foo} = x;
};
closure3.call();
}
}
}
class C extends core::Object {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack
Push FP[-5]
PushConstant CP#1
IndirectStaticCall 1, CP#0
Drop1
PushConstant CP#2
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
[2] = Null
}
] synthetic constructor •() void
: super core::Object::•()
;
[@vm.bytecode=
Bytecode {
Entry 5
CheckStack
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreContextParent
PopLocal r0
Push r0
PushConstant CP#0
StoreContextVar 0
PushConstant CP#1
StoreLocal r3
Push r3
PushConstant CP#0
CreateArrayTOS
StoreLocal r3
PushConstant CP#3
IndirectStaticCall 2, CP#2
PopLocal r2
PushConstant CP#1
StoreLocal r3
Push r3
PushConstant CP#0
CreateArrayTOS
StoreLocal r3
PushConstant CP#4
IndirectStaticCall 2, CP#2
PopLocal r4
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreContextParent
PopLocal r0
Push r0
PushConstant CP#0
StoreContextVar 0
L2:
CheckStack
Push r0
LoadContextVar 0
PushConstant CP#5
InstanceCall1 2, CP#6
AssertBoolean 0
PushConstant CP#7
IfNeStrictTOS
Jump L1
Push r2
Allocate CP#14
StoreLocal r3
Push r3
PushConstant CP#12
StoreFieldTOS CP#15
Push r3
PushConstant CP#12
StoreFieldTOS CP#17
Push r3
PushConstant CP#8
StoreFieldTOS CP#19
Push r3
Push r0
StoreFieldTOS CP#9
InstanceCall1 2, CP#21
Drop1
Push r4
Allocate CP#14
StoreLocal r3
Push r3
PushConstant CP#12
StoreFieldTOS CP#15
Push r3
PushConstant CP#12
StoreFieldTOS CP#17
Push r3
PushConstant CP#22
StoreFieldTOS CP#19
Push r3
Push r0
StoreFieldTOS CP#9
InstanceCall1 2, CP#28
Drop1
Push r0
CloneContext
PopLocal r0
Push r0
Push r0
LoadContextVar 0
PushConstant CP#29
InstanceCall1 2, CP#30
StoreLocal r3
StoreContextVar 0
Push r3
Drop1
Jump L2
L1:
Push r0
LoadContextParent
PopLocal r0
Push r0
LoadContextParent
PopLocal r0
PushConstant CP#12
ReturnTOS
}
ConstantPool {
[0] = Int 0
[1] = TypeArgs [dart.core::Function]
[2] = ArgDesc num-args 2, num-type-args 0, names []
[3] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#2
[4] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#2
[5] = Int 10
[6] = ICData target-name '<', arg-desc CP#2
[7] = Bool true
[8] = ClosureFunction <anonymous closure> () dart.core::int;
[9] = InstanceField dart.core::_Closure::_context
[10] = Reserved
[11] = ICData target-name '+', arg-desc CP#2
[12] = Null
[13] = EndClosureFunctionScope
[14] = Class dart.core::_Closure
[15] = InstanceField dart.core::_Closure::_instantiator_type_arguments
[16] = Reserved
[17] = InstanceField dart.core::_Closure::_function_type_arguments
[18] = Reserved
[19] = InstanceField dart.core::_Closure::_function
[20] = Reserved
[21] = ICData target-name 'add', arg-desc CP#2
[22] = ClosureFunction <anonymous closure> (dart.core::int ii) dart.core::Null;
[23] = Type dart.core::int
[24] = String 'ii'
[25] = SubtypeTestCache
[26] = ICData target-name '+', arg-desc CP#2
[27] = EndClosureFunctionScope
[28] = ICData target-name 'add', arg-desc CP#2
[29] = Int 1
[30] = ICData target-name '+', arg-desc CP#2
}
Closure CP#8 {
Entry 2
CheckStack
Push FP[-5]
LoadFieldTOS CP#9
PopLocal r0
Push r0
LoadContextVar 0
Push r0
LoadContextParent
LoadContextVar 0
InstanceCall1 2, CP#11
ReturnTOS
PushConstant CP#12
ReturnTOS
}
Closure CP#22 {
Entry 3
CheckStack
Push FP[-6]
LoadFieldTOS CP#9
PopLocal r0
Push FP[-5]
PushConstant CP#12
PushConstant CP#12
PushConstant CP#23
PushConstant CP#24
AssertAssignable 1, CP#25
Drop1
Push r0
Push FP[-5]
Push r0
LoadContextParent
LoadContextVar 0
InstanceCall1 2, CP#26
StoreContextVar 0
PushConstant CP#12
ReturnTOS
}
] method testForLoop() void {
core::int delta = 0;
core::List<core::Function> getI = <core::Function>[];
core::List<core::Function> setI = <core::Function>[];
for (core::int i = 0; i.{core::num::<}(10); i = i.{core::num::+}(1)) {
getI.{core::List::add}(() core::int => i.{core::num::+}(delta));
setI.{core::List::add}((core::int ii) core::Null {
i = ii.{core::num::+}(delta);
});
}
}
[@vm.bytecode=
Bytecode {
Entry 5
CheckStack
Push FP[-5]
PushConstant CP#0
PushConstant CP#0
PushConstant CP#1
PushConstant CP#2
AssertAssignable 0, CP#3
Drop1
Push FP[-5]
InstanceCall1 1, CP#5
PopLocal r2
L2:
CheckStack
Push r2
InstanceCall1 1, CP#6
PushConstant CP#7
IfNeStrictTOS
Jump L1
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreContextParent
PopLocal r0
Push r0
Push r2
InstanceCall1 1, CP#8
StoreContextVar 0
Allocate CP#16
StoreLocal r4
Push r4
PushConstant CP#0
StoreFieldTOS CP#17
Push r4
PushConstant CP#0
StoreFieldTOS CP#19
Push r4
PushConstant CP#9
StoreFieldTOS CP#21
Push r4
Push r0
StoreFieldTOS CP#10
PopLocal r3
Push r3
InstanceCall1 1, CP#23
Drop1
Push r0
LoadContextVar 0
PushConstant CP#24
IndirectStaticCall 1, CP#4
Drop1
Push r0
LoadContextParent
PopLocal r0
Jump L2
L1:
PushConstant CP#0
ReturnTOS
}
ConstantPool {
[0] = Null
[1] = Type dart.core::List<dart.core::int>
[2] = String 'list'
[3] = SubtypeTestCache
[4] = ArgDesc num-args 1, num-type-args 0, names []
[5] = ICData get target-name 'iterator', arg-desc CP#4
[6] = ICData target-name 'moveNext', arg-desc CP#4
[7] = Bool true
[8] = ICData get target-name 'current', arg-desc CP#4
[9] = ClosureFunction <anonymous closure> () dart.core::Null;
[10] = InstanceField dart.core::_Closure::_context
[11] = Reserved
[12] = Int 1
[13] = ArgDesc num-args 2, num-type-args 0, names []
[14] = ICData target-name '+', arg-desc CP#13
[15] = EndClosureFunctionScope
[16] = Class dart.core::_Closure
[17] = InstanceField dart.core::_Closure::_instantiator_type_arguments
[18] = Reserved
[19] = InstanceField dart.core::_Closure::_function_type_arguments
[20] = Reserved
[21] = InstanceField dart.core::_Closure::_function
[22] = Reserved
[23] = ICData target-name 'call', arg-desc CP#4
[24] = StaticICData target 'dart.core::print', arg-desc CP#4
}
Closure CP#9 {
Entry 3
CheckStack
Push FP[-5]
LoadFieldTOS CP#10
PopLocal r0
Push r0
Push r0
LoadContextVar 0
PushConstant CP#12
InstanceCall1 2, CP#14
StoreContextVar 0
PushConstant CP#0
ReturnTOS
}
] method testForInLoop(core::List<core::int> list) void {
for (core::int i in list) {
() core::Null inc = () core::Null {
i = i.{core::num::+}(1);
};
inc.call();
core::print(i);
}
}
}
class D<T extends core::Object = dynamic> extends core::Object {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack
Push FP[-5]
PushConstant CP#1
IndirectStaticCall 1, CP#0
Drop1
PushConstant CP#2
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
[2] = Null
}
] synthetic constructor •() void
: super core::Object::•()
;
[@vm.bytecode=
Bytecode {
Entry 3
CheckStack
AllocateContext 1
PopLocal r0
Push r0
Push FP[-5]
StoreContextVar 0
Push FP[-5]
Push FP[-6]
LoadTypeArgumentsField CP#0
PushConstant CP#1
PushConstant CP#2
PushConstant CP#3
AssertAssignable 0, CP#4
Drop1
Allocate CP#9
StoreLocal r2
Push r2
Push FP[-6]
LoadTypeArgumentsField CP#0
StoreFieldTOS CP#10
Push r2
PushConstant CP#1
StoreFieldTOS CP#12
Push r2
PushConstant CP#5
StoreFieldTOS CP#14
Push r2
Push r0
StoreFieldTOS CP#6
ReturnTOS
PushConstant CP#1
ReturnTOS
}
ConstantPool {
[0] = TypeArgumentsField #lib::D
[1] = Null
[2] = Type #lib::D::T
[3] = String 't'
[4] = SubtypeTestCache
[5] = ClosureFunction <anonymous closure> () #lib::D::T;
[6] = InstanceField dart.core::_Closure::_context
[7] = Reserved
[8] = EndClosureFunctionScope
[9] = Class dart.core::_Closure
[10] = InstanceField dart.core::_Closure::_instantiator_type_arguments
[11] = Reserved
[12] = InstanceField dart.core::_Closure::_function_type_arguments
[13] = Reserved
[14] = InstanceField dart.core::_Closure::_function
[15] = Reserved
}
Closure CP#5 {
Entry 2
CheckStack
Push FP[-5]
LoadFieldTOS CP#6
PopLocal r0
Push r0
LoadContextVar 0
ReturnTOS
PushConstant CP#1
ReturnTOS
}
] method foo(generic-covariant-impl self::D::T t) dynamic {
return () self::D::T => t;
}
}
[@vm.bytecode=
Bytecode {
Entry 4
CheckStack
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreContextParent
PopLocal r0
Push r0
PushConstant CP#0
StoreContextVar 0
Allocate CP#11
StoreLocal r3
Push r3
PushConstant CP#4
StoreFieldTOS CP#12
Push r3
PushConstant CP#4
StoreFieldTOS CP#14
Push r3
PushConstant CP#1
StoreFieldTOS CP#16
Push r3
Push r0
StoreFieldTOS CP#2
PopLocal r2
Push r2
PushConstant CP#18
InstanceCall1 2, CP#19
Drop1
Push r0
LoadContextVar 0
ReturnTOS
Push r0
LoadContextParent
PopLocal r0
PushConstant CP#4
ReturnTOS
}
ConstantPool {
[0] = Int 5
[1] = ClosureFunction <anonymous closure> (dart.core::int y) dart.core::Null;
[2] = InstanceField dart.core::_Closure::_context
[3] = Reserved
[4] = Null
[5] = Type dart.core::int
[6] = String 'y'
[7] = SubtypeTestCache
[8] = ArgDesc num-args 2, num-type-args 0, names []
[9] = ICData target-name '+', arg-desc CP#8
[10] = EndClosureFunctionScope
[11] = Class dart.core::_Closure
[12] = InstanceField dart.core::_Closure::_instantiator_type_arguments
[13] = Reserved
[14] = InstanceField dart.core::_Closure::_function_type_arguments
[15] = Reserved
[16] = InstanceField dart.core::_Closure::_function
[17] = Reserved
[18] = Int 3
[19] = ICData target-name 'call', arg-desc CP#8
}
Closure CP#1 {
Entry 3
CheckStack
Push FP[-6]
LoadFieldTOS CP#2
PopLocal r0
Push FP[-5]
PushConstant CP#4
PushConstant CP#4
PushConstant CP#5
PushConstant CP#6
AssertAssignable 1, CP#7
Drop1
Push r0
Push r0
LoadContextVar 0
Push FP[-5]
InstanceCall1 2, CP#9
StoreContextVar 0
PushConstant CP#4
ReturnTOS
}
]static method simpleClosure() core::int {
core::int x = 5;
(core::int) core::Null inc = (core::int y) core::Null {
x = x.{core::num::+}(y);
};
inc.call(3);
return x;
}
[@vm.bytecode=
Bytecode {
Entry 2
CheckStack
CheckFunctionTypeArgs 8, 0
PushConstant CP#0
StoreLocal r1
Push r1
PushConstant CP#1
CreateArrayTOS
StoreLocal r1
Push r1
PushConstant CP#2
PushConstant CP#4
Push r0
InstantiateType CP#3
StoreIndexedTOS
Push r1
PushConstant CP#5
PushConstant CP#4
Push r0
InstantiateType CP#6
StoreIndexedTOS
Push r1
PushConstant CP#7
PushConstant CP#4
Push r0
InstantiateType CP#8
StoreIndexedTOS
Push r1
PushConstant CP#9
PushConstant CP#4
Push r0
InstantiateType CP#10
StoreIndexedTOS
Push r1
PushConstant CP#11
PushConstant CP#4
Push r0
InstantiateType CP#12
StoreIndexedTOS
Push r1
PushConstant CP#13
PushConstant CP#4
Push r0
InstantiateType CP#14
StoreIndexedTOS
Push r1
PushConstant CP#15
PushConstant CP#4
Push r0
InstantiateType CP#16
StoreIndexedTOS
Push r1
PushConstant CP#17
PushConstant CP#4
Push r0
InstantiateType CP#18
StoreIndexedTOS
PushConstant CP#20
IndirectStaticCall 2, CP#19
PushConstant CP#22
IndirectStaticCall 1, CP#21
Drop1
PushConstant CP#4
ReturnTOS
}
ConstantPool {
[0] = TypeArgs [dart.core::Type]
[1] = Int 8
[2] = Int 0
[3] = Type #lib::callWithArgs::T1
[4] = Null
[5] = Int 1
[6] = Type #lib::callWithArgs::T2
[7] = Int 2
[8] = Type #lib::callWithArgs::T3
[9] = Int 3
[10] = Type #lib::callWithArgs::T4
[11] = Int 4
[12] = Type #lib::callWithArgs::T5
[13] = Int 5
[14] = Type #lib::callWithArgs::T6
[15] = Int 6
[16] = Type #lib::callWithArgs::T7
[17] = Int 7
[18] = Type #lib::callWithArgs::T8
[19] = ArgDesc num-args 2, num-type-args 0, names []
[20] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#19
[21] = ArgDesc num-args 1, num-type-args 0, names []
[22] = StaticICData target 'dart.core::print', arg-desc CP#21
}
]static method callWithArgs<T1 extends core::Object = dynamic, T2 extends core::Object = dynamic, T3 extends core::Object = dynamic, T4 extends core::Object = dynamic, T5 extends core::Object = dynamic, T6 extends core::Object = dynamic, T7 extends core::Object = dynamic, T8 extends core::Object = dynamic>() void {
core::print(<core::Type>[self::callWithArgs::T1, self::callWithArgs::T2, self::callWithArgs::T3, self::callWithArgs::T4, self::callWithArgs::T5, self::callWithArgs::T6, self::callWithArgs::T7, self::callWithArgs::T8]);
}
[@vm.bytecode=
Bytecode {
Entry 1
CheckStack
PushConstant CP#0
PushConstant CP#2
PushConstant CP#1
AllocateT
StoreLocal r0
Push r0
PushConstant CP#4
IndirectStaticCall 1, CP#3
Drop1
InstanceCall1 2, CP#6
Drop1
PushConstant CP#7
PushConstant CP#2
PushConstant CP#1
AllocateT
StoreLocal r0
Push r0
PushConstant CP#8
IndirectStaticCall 1, CP#3
Drop1
InstanceCall1 2, CP#9
Drop1
PushConstant CP#7
PushConstant CP#10
PushConstant CP#1
AllocateT
StoreLocal r0
Push r0
PushConstant CP#11
IndirectStaticCall 1, CP#3
Drop1
InstanceCall1 2, CP#12
Drop1
PushConstant CP#13
ReturnTOS
}
ConstantPool {
[0] = TypeArgs [#lib::C3, #lib::C4]
[1] = Class #lib::A
[2] = TypeArgumentsForInstanceAllocation #lib::A [#lib::C1, #lib::C2]
[3] = ArgDesc num-args 1, num-type-args 0, names []
[4] = StaticICData target '#lib::A::', arg-desc CP#3
[5] = ArgDesc num-args 1, num-type-args 2, names []
[6] = ICData target-name 'foo', arg-desc CP#5
[7] = TypeArgs [dart.core::List<#lib::C3>, dart.core::List<#lib::C4>]
[8] = StaticICData target '#lib::A::', arg-desc CP#3
[9] = ICData target-name 'foo', arg-desc CP#5
[10] = TypeArgumentsForInstanceAllocation #lib::A [dart.core::List<#lib::C1>, dart.core::List<#lib::C2>]
[11] = StaticICData target '#lib::A::', arg-desc CP#3
[12] = ICData target-name 'foo', arg-desc CP#5
[13] = Null
}
]static method callA() void {
new self::A::•<self::C1, self::C2>().{self::A::foo}<self::C3, self::C4>();
new self::A::•<self::C1, self::C2>().{self::A::foo}<core::List<self::C3>, core::List<self::C4>>();
new self::A::•<core::List<self::C1>, core::List<self::C2>>().{self::A::foo}<core::List<self::C3>, core::List<self::C4>>();
}
[@vm.bytecode=
Bytecode {
Entry 6
CheckStack
Allocate CP#14
StoreLocal r3
Push r3
PushConstant CP#9
StoreFieldTOS CP#15
Push r3
PushConstant CP#9
StoreFieldTOS CP#3
Push r3
PushConstant CP#0
StoreFieldTOS CP#17
Push r3
Push r0
StoreFieldTOS CP#1
PopLocal r2
Push r2
PopLocal r3
Allocate CP#14
StoreLocal r5
PushConstant CP#19
StoreFieldTOS CP#20
Push r5
Push r3
LoadFieldTOS CP#15
StoreFieldTOS CP#15
Push r5
Push r3
LoadFieldTOS CP#3
StoreFieldTOS CP#3
Push r5
Push r3
LoadFieldTOS CP#17
StoreFieldTOS CP#17
Push r5
Push r3
LoadFieldTOS CP#1
StoreFieldTOS CP#1
Push r5
PopLocal r4
Push r4
ReturnTOS
PushConstant CP#9
ReturnTOS
}
ConstantPool {
[0] = ClosureFunction foo <T extends dart.core::Object = dynamic>(T t) void;
[1] = InstanceField dart.core::_Closure::_context
[2] = Reserved
[3] = InstanceField dart.core::_Closure::_function_type_arguments
[4] = Reserved
[5] = Int 0
[6] = Int 1
[7] = ArgDesc num-args 4, num-type-args 0, names []
[8] = StaticICData target 'dart._internal::_prependTypeArguments', arg-desc CP#7
[9] = Null
[10] = Type T
[11] = String 't'
[12] = SubtypeTestCache
[13] = EndClosureFunctionScope
[14] = Class dart.core::_Closure
[15] = InstanceField dart.core::_Closure::_instantiator_type_arguments
[16] = Reserved
[17] = InstanceField dart.core::_Closure::_function
[18] = Reserved
[19] = TypeArgs [dart.core::int]
[20] = InstanceField dart.core::_Closure::_delayed_type_arguments
[21] = Reserved
}
Closure CP#0 {
Entry 3
CheckStack
Push FP[-6]
LoadFieldTOS CP#1
PopLocal r1
CheckFunctionTypeArgs 1, 0
Push r0
Push FP[-6]
LoadFieldTOS CP#3
PushConstant CP#5
PushConstant CP#6
PushConstant CP#8
IndirectStaticCall 4, CP#7
PopLocal r0
Push FP[-5]
PushConstant CP#9
Push r0
PushConstant CP#10
PushConstant CP#11
AssertAssignable 0, CP#12
Drop1
PushConstant CP#9
ReturnTOS
}
]static method testPartialInstantiation() (core::int) dynamic {
function foo<T extends core::Object = dynamic>(T t) void {}
(core::int) dynamic intFunc = foo<core::int>;
return intFunc;
}
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack
PushConstant CP#0
ReturnTOS
}
ConstantPool {
[0] = Null
}
]static method main() dynamic {}