blob: 10f84a5cafb44adb3579f502ddcf068bc5efbc26 [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
PushNull
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
}
] 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
PushNull
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
}
] 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
PushNull
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
}
] 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
PushNull
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
}
] 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
PushNull
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
}
] 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
PushNull
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
}
] 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
PushNull
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
}
] 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
PushNull
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
}
] 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
PushNull
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
}
] 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#31
StoreLocal r4
Push r4
Push FP[-5]
LoadTypeArgumentsField CP#15
StoreFieldTOS CP#32
Push r4
Push r0
StoreFieldTOS CP#6
Push r4
PushConstant CP#5
StoreFieldTOS CP#3
Push r4
PushConstant CP#0
StoreFieldTOS CP#34
Push r4
Push r1
StoreFieldTOS CP#1
PopLocal r3
PushConstant CP#44
Push r3
InstanceCall 2, CP#45
Drop1
PushConstant CP#46
Push r3
InstanceCall 2, CP#47
Drop1
PushNull
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::_delayed_type_arguments
[4] = Reserved
[5] = EmptyTypeArguments
[6] = InstanceField dart.core::_Closure::_function_type_arguments
[7] = Reserved
[8] = ArgDesc num-args 4, num-type-args 0, names []
[9] = StaticICData target 'dart._internal::_prependTypeArguments', arg-desc CP#8
[10] = ClosureFunction nested2 <T7 extends dart.core::Object = dynamic, T8 extends dart.core::Object = dynamic>() void;
[11] = StaticICData target 'dart._internal::_prependTypeArguments', arg-desc CP#8
[12] = ClosureFunction <anonymous closure> () dart.core::Null;
[13] = TypeArgs [dart.core::Type]
[14] = Type #lib::A::T1
[15] = TypeArgumentsField #lib::A
[16] = Type #lib::A::T2
[17] = Type #lib::A::foo::T3
[18] = Type #lib::A::foo::T4
[19] = Type T5
[20] = Type T6
[21] = Type T7
[22] = Type T8
[23] = ArgDesc num-args 2, num-type-args 0, names []
[24] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#23
[25] = ArgDesc num-args 1, num-type-args 0, names []
[26] = StaticICData target 'dart.core::print', arg-desc CP#25
[27] = TypeArgs [#lib::A::T1, #lib::A::T2, #lib::A::foo::T3, #lib::A::foo::T4, T5, T6, T7, T8]
[28] = ArgDesc num-args 0, num-type-args 8, names []
[29] = StaticICData target '#lib::callWithArgs', arg-desc CP#28
[30] = EndClosureFunctionScope
[31] = Class dart.core::_Closure
[32] = InstanceField dart.core::_Closure::_instantiator_type_arguments
[33] = Reserved
[34] = InstanceField dart.core::_Closure::_function
[35] = Reserved
[36] = ICData dynamic target-name 'call', arg-desc CP#25
[37] = EndClosureFunctionScope
[38] = TypeArgs [#lib::C7, #lib::C8]
[39] = ArgDesc num-args 1, num-type-args 2, names []
[40] = ICData dynamic target-name 'call', arg-desc CP#39
[41] = TypeArgs [dart.core::List<#lib::C7>, dart.core::List<#lib::C8>]
[42] = ICData dynamic target-name 'call', arg-desc CP#39
[43] = EndClosureFunctionScope
[44] = TypeArgs [#lib::C5, #lib::C6]
[45] = ICData dynamic target-name 'call', arg-desc CP#39
[46] = TypeArgs [dart.core::List<#lib::C5>, dart.core::List<#lib::C6>]
[47] = ICData dynamic target-name 'call', arg-desc CP#39
}
Closure CP#12 {
EntryFixed 1, 4
CheckStack
Push FP[-5]
LoadFieldTOS CP#1
PopLocal r1
Push FP[-5]
LoadFieldTOS CP#6
PopLocal r0
PushConstant CP#13
StoreLocal r3
Push r3
PushInt 8
CreateArrayTOS
StoreLocal r3
Push r3
PushInt 0
Push r1
LoadContextVar 0
LoadTypeArgumentsField CP#15
PushNull
InstantiateType CP#14
StoreIndexedTOS
Push r3
PushInt 1
Push r1
LoadContextVar 0
LoadTypeArgumentsField CP#15
PushNull
InstantiateType CP#16
StoreIndexedTOS
Push r3
PushInt 2
PushNull
Push r0
InstantiateType CP#17
StoreIndexedTOS
Push r3
PushInt 3
PushNull
Push r0
InstantiateType CP#18
StoreIndexedTOS
Push r3
PushInt 4
PushNull
Push r0
InstantiateType CP#19
StoreIndexedTOS
Push r3
PushInt 5
PushNull
Push r0
InstantiateType CP#20
StoreIndexedTOS
Push r3
PushInt 6
PushNull
Push r0
InstantiateType CP#21
StoreIndexedTOS
Push r3
PushInt 7
PushNull
Push r0
InstantiateType CP#22
StoreIndexedTOS
PushConstant CP#24
IndirectStaticCall 2, CP#23
PushConstant CP#26
IndirectStaticCall 1, CP#25
Drop1
Push r1
LoadContextVar 0
LoadTypeArgumentsField CP#15
Push r0
InstantiateTypeArgumentsTOS 0, CP#27
PushConstant CP#29
IndirectStaticCall 1, CP#28
Drop1
PushNull
ReturnTOS
}
Closure CP#10 {
EntryFixed 1, 5
CheckStack
Push FP[-5]
LoadFieldTOS CP#1
PopLocal r1
Push FP[-5]
LoadFieldTOS CP#3
StoreLocal r0
PushConstant CP#5
IfEqStrictTOS
Jump L1
CheckFunctionTypeArgs 0, 2
Jump L2
L1:
CheckFunctionTypeArgs 2, 0
L2:
Push r0
Push FP[-5]
LoadFieldTOS CP#6
PushInt 4
PushInt 6
PushConstant CP#11
IndirectStaticCall 4, CP#8
PopLocal r0
Allocate CP#31
StoreLocal r4
Push r4
Push r1
LoadContextVar 0
LoadTypeArgumentsField CP#15
StoreFieldTOS CP#32
Push r4
Push r0
StoreFieldTOS CP#6
Push r4
PushConstant CP#5
StoreFieldTOS CP#3
Push r4
PushConstant CP#12
StoreFieldTOS CP#34
Push r4
Push r1
StoreFieldTOS CP#1
PopLocal r3
Push r3
InstanceCall 1, CP#36
Drop1
PushNull
ReturnTOS
}
Closure CP#0 {
EntryFixed 1, 5
CheckStack
Push FP[-5]
LoadFieldTOS CP#1
PopLocal r1
Push FP[-5]
LoadFieldTOS CP#3
StoreLocal r0
PushConstant CP#5
IfEqStrictTOS
Jump L1
CheckFunctionTypeArgs 0, 2
Jump L2
L1:
CheckFunctionTypeArgs 2, 0
L2:
Push r0
Push FP[-5]
LoadFieldTOS CP#6
PushInt 2
PushInt 4
PushConstant CP#9
IndirectStaticCall 4, CP#8
PopLocal r0
Allocate CP#31
StoreLocal r4
Push r4
Push r1
LoadContextVar 0
LoadTypeArgumentsField CP#15
StoreFieldTOS CP#32
Push r4
Push r0
StoreFieldTOS CP#6
Push r4
PushConstant CP#5
StoreFieldTOS CP#3
Push r4
PushConstant CP#10
StoreFieldTOS CP#34
Push r4
Push r1
StoreFieldTOS CP#1
PopLocal r3
PushConstant CP#38
Push r3
InstanceCall 2, CP#40
Drop1
PushConstant CP#41
Push r3
InstanceCall 2, CP#42
Drop1
PushNull
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>();
};
[@vm.call-site-attributes.metadata=receiverType:() dart.core::Null] nested3.call();
}
[@vm.call-site-attributes.metadata=receiverType:<T7 extends dart.core::Object = dynamic, T8 extends dart.core::Object = dynamic>() void] nested2.call<self::C7, self::C8>();
[@vm.call-site-attributes.metadata=receiverType:<T7 extends dart.core::Object = dynamic, T8 extends dart.core::Object = dynamic>() void] nested2.call<core::List<self::C7>, core::List<self::C8>>();
}
[@vm.call-site-attributes.metadata=receiverType:<T5 extends dart.core::Object = dynamic, T6 extends dart.core::Object = dynamic>() void] nested1.call<self::C5, self::C6>();
[@vm.call-site-attributes.metadata=receiverType:<T5 extends dart.core::Object = dynamic, T6 extends dart.core::Object = dynamic>() void] 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
PushNull
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
}
] synthetic constructor •() void
: super core::Object::•()
;
[@vm.bytecode=
Bytecode {
Entry 5
CheckStack
AllocateContext 4
PopLocal r0
Push r0
Push FP[-5]
StoreContextVar 0
Push r0
PushInt 1
StoreContextVar 1
PushInt 2
PopLocal r2
Push r0
PushInt 3
StoreContextVar 2
Allocate CP#15
StoreLocal r4
Push r4
PushNull
StoreFieldTOS CP#16
Push r4
PushNull
StoreFieldTOS CP#18
Push r4
PushConstant CP#20
StoreFieldTOS CP#21
Push r4
PushConstant CP#0
StoreFieldTOS CP#23
Push r4
Push r0
StoreFieldTOS CP#1
PopLocal r3
Push r3
PushInt 10
InstanceCall 2, CP#28
Drop1
Push r3
PushInt 11
InstanceCall 2, CP#29
Drop1
Push r2
PushConstant CP#30
IndirectStaticCall 1, CP#11
Drop1
Push r0
LoadContextVar 2
PushConstant CP#31
IndirectStaticCall 1, CP#11
Drop1
Push r0
LoadContextVar 1
PushConstant CP#32
IndirectStaticCall 1, CP#11
Drop1
Push r0
PushInt 42
StoreContextVar 3
Allocate CP#15
StoreLocal r3
Push r3
PushNull
StoreFieldTOS CP#16
Push r3
PushNull
StoreFieldTOS CP#18
Push r3
PushConstant CP#20
StoreFieldTOS CP#21
Push r3
PushConstant CP#33
StoreFieldTOS CP#23
Push r3
Push r0
StoreFieldTOS CP#1
PopLocal r2
Push r2
InstanceCall 1, CP#36
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = ClosureFunction <anonymous closure> (dart.core::int y) dart.core::Null;
[1] = InstanceField dart.core::_Closure::_context
[2] = Reserved
[3] = Type dart.core::int
[4] = String 'y'
[5] = SubtypeTestCache
[6] = ArgDesc num-args 2, num-type-args 0, names []
[7] = ICData target-name '+', arg-desc CP#6
[8] = ICData target-name '>', arg-desc CP#6
[9] = ClosureFunction closure2 () void;
[10] = ICData target-name '+', arg-desc CP#6
[11] = ArgDesc num-args 1, num-type-args 0, names []
[12] = ICData get target-name 'foo', arg-desc CP#11
[13] = ICData target-name '+', arg-desc CP#6
[14] = EndClosureFunctionScope
[15] = Class dart.core::_Closure
[16] = InstanceField dart.core::_Closure::_instantiator_type_arguments
[17] = Reserved
[18] = InstanceField dart.core::_Closure::_function_type_arguments
[19] = Reserved
[20] = EmptyTypeArguments
[21] = InstanceField dart.core::_Closure::_delayed_type_arguments
[22] = Reserved
[23] = InstanceField dart.core::_Closure::_function
[24] = Reserved
[25] = ICData dynamic target-name 'call', arg-desc CP#11
[26] = StaticICData target 'dart.core::print', arg-desc CP#11
[27] = EndClosureFunctionScope
[28] = ICData dynamic target-name 'call', arg-desc CP#6
[29] = ICData dynamic target-name 'call', arg-desc CP#6
[30] = StaticICData target 'dart.core::print', arg-desc CP#11
[31] = StaticICData target 'dart.core::print', arg-desc CP#11
[32] = StaticICData target 'dart.core::print', arg-desc CP#11
[33] = ClosureFunction <anonymous closure> () dart.core::Null;
[34] = ICData set target-name 'foo', arg-desc CP#6
[35] = EndClosureFunctionScope
[36] = ICData dynamic target-name 'call', arg-desc CP#11
}
Closure CP#9 {
EntryFixed 1, 3
CheckStack
Push FP[-5]
LoadFieldTOS CP#1
PopLocal r0
Push r0
LoadContextParent
Push r0
LoadContextParent
LoadContextVar 1
PushInt 2
InstanceCall 2, CP#10
StoreContextVar 2
Push r0
Push r0
LoadContextParent
LoadContextVar 0
InstanceCall 1, CP#12
Push r0
LoadContextVar 0
InstanceCall 2, CP#13
StoreContextVar 1
PushNull
ReturnTOS
}
Closure CP#0 {
EntryFixed 2, 4
CheckStack
Push FP[-6]
LoadFieldTOS CP#1
PopLocal r0
AllocateContext 2
StoreLocal r1
Push r1
Push r0
StoreContextParent
PopLocal r0
Push r0
Push FP[-5]
StoreContextVar 0
Push FP[-5]
PushNull
PushNull
PushConstant CP#3
PushConstant CP#4
AssertAssignable 1, CP#5
Drop1
Push r0
LoadContextParent
Push r0
LoadContextVar 0
PushInt 1
InstanceCall 2, CP#7
StoreContextVar 1
Push r0
LoadContextParent
LoadContextVar 1
PushInt 5
InstanceCall 2, CP#8
AssertBoolean 0
PushTrue
IfNeStrictTOS
Jump L1
Push r0
PushInt 4
StoreContextVar 1
Allocate CP#15
StoreLocal r2
Push r2
PushNull
StoreFieldTOS CP#16
Push r2
PushNull
StoreFieldTOS CP#18
Push r2
PushConstant CP#20
StoreFieldTOS CP#21
Push r2
PushConstant CP#9
StoreFieldTOS CP#23
Push r2
Push r0
StoreFieldTOS CP#1
PopLocal r3
Push r3
InstanceCall 1, CP#25
Drop1
Push r0
LoadContextVar 1
PushConstant CP#26
IndirectStaticCall 1, CP#11
Drop1
L1:
PushNull
ReturnTOS
}
Closure CP#33 {
EntryFixed 1, 3
CheckStack
Push FP[-5]
LoadFieldTOS CP#1
PopLocal r0
Push r0
LoadContextVar 0
Push r0
LoadContextVar 3
InstanceCall 2, CP#34
Drop1
PushNull
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);
}
[@vm.call-site-attributes.metadata=receiverType:() void] closure2.call();
core::print(w);
}
};
[@vm.call-site-attributes.metadata=receiverType:(dart.core::int) dart.core::Null] closure1.call(10);
[@vm.call-site-attributes.metadata=receiverType:(dart.core::int) dart.core::Null] 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;
};
[@vm.call-site-attributes.metadata=receiverType:() dart.core::Null] closure3.call();
}
}
}
class C extends core::Object {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack
Push FP[-5]
PushConstant CP#1
IndirectStaticCall 1, CP#0
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
}
] synthetic constructor •() void
: super core::Object::•()
;
[@vm.bytecode=
Bytecode {
Entry 5
CheckStack
AllocateContext 1
PopLocal r0
Push r0
PushInt 0
StoreContextVar 0
PushConstant CP#0
StoreLocal r3
Push r3
PushInt 0
CreateArrayTOS
StoreLocal r3
PushConstant CP#2
IndirectStaticCall 2, CP#1
PopLocal r2
PushConstant CP#0
StoreLocal r3
Push r3
PushInt 0
CreateArrayTOS
StoreLocal r3
PushConstant CP#3
IndirectStaticCall 2, CP#1
PopLocal r4
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreContextParent
PopLocal r0
Push r0
PushInt 0
StoreContextVar 0
L2:
CheckStack
Push r0
LoadContextVar 0
PushInt 10
InstanceCall 2, CP#4
AssertBoolean 0
PushTrue
IfNeStrictTOS
Jump L1
Push r2
Allocate CP#10
StoreLocal r3
Push r3
PushNull
StoreFieldTOS CP#11
Push r3
PushNull
StoreFieldTOS CP#13
Push r3
PushConstant CP#15
StoreFieldTOS CP#16
Push r3
PushConstant CP#5
StoreFieldTOS CP#18
Push r3
Push r0
StoreFieldTOS CP#6
InstanceCall 2, CP#20
Drop1
Push r4
Allocate CP#10
StoreLocal r3
Push r3
PushNull
StoreFieldTOS CP#11
Push r3
PushNull
StoreFieldTOS CP#13
Push r3
PushConstant CP#15
StoreFieldTOS CP#16
Push r3
PushConstant CP#21
StoreFieldTOS CP#18
Push r3
Push r0
StoreFieldTOS CP#6
InstanceCall 2, CP#27
Drop1
Push r0
CloneContext
PopLocal r0
Push r0
Push r0
LoadContextVar 0
PushInt 1
InstanceCall 2, CP#28
StoreLocal r3
StoreContextVar 0
Push r3
Drop1
Jump L2
L1:
Push r0
LoadContextParent
PopLocal r0
Push r0
LoadContextParent
PopLocal r0
PushNull
ReturnTOS
}
ConstantPool {
[0] = TypeArgs [dart.core::Function]
[1] = ArgDesc num-args 2, num-type-args 0, names []
[2] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#1
[3] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#1
[4] = ICData target-name '<', arg-desc CP#1
[5] = ClosureFunction <anonymous closure> () dart.core::int;
[6] = InstanceField dart.core::_Closure::_context
[7] = Reserved
[8] = ICData target-name '+', arg-desc CP#1
[9] = EndClosureFunctionScope
[10] = Class dart.core::_Closure
[11] = InstanceField dart.core::_Closure::_instantiator_type_arguments
[12] = Reserved
[13] = InstanceField dart.core::_Closure::_function_type_arguments
[14] = Reserved
[15] = EmptyTypeArguments
[16] = InstanceField dart.core::_Closure::_delayed_type_arguments
[17] = Reserved
[18] = InstanceField dart.core::_Closure::_function
[19] = Reserved
[20] = ICData target-name 'add', arg-desc CP#1
[21] = ClosureFunction <anonymous closure> (dart.core::int ii) dart.core::Null;
[22] = Type dart.core::int
[23] = String 'ii'
[24] = SubtypeTestCache
[25] = ICData target-name '+', arg-desc CP#1
[26] = EndClosureFunctionScope
[27] = ICData target-name 'add', arg-desc CP#1
[28] = ICData target-name '+', arg-desc CP#1
}
Closure CP#5 {
EntryFixed 1, 2
CheckStack
Push FP[-5]
LoadFieldTOS CP#6
PopLocal r0
Push r0
LoadContextVar 0
Push r0
LoadContextParent
LoadContextVar 0
InstanceCall 2, CP#8
ReturnTOS
PushNull
ReturnTOS
}
Closure CP#21 {
EntryFixed 2, 3
CheckStack
Push FP[-6]
LoadFieldTOS CP#6
PopLocal r0
Push FP[-5]
PushNull
PushNull
PushConstant CP#22
PushConstant CP#23
AssertAssignable 1, CP#24
Drop1
Push r0
Push FP[-5]
Push r0
LoadContextParent
LoadContextVar 0
InstanceCall 2, CP#25
StoreContextVar 0
PushNull
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)) {
[@vm.call-site-attributes.metadata=receiverType:dart.core::List<dart.core::Function>] getI.{core::List::add}(() core::int => i.{core::num::+}(delta));
[@vm.call-site-attributes.metadata=receiverType:dart.core::List<dart.core::Function>] setI.{core::List::add}((core::int ii) core::Null {
i = ii.{core::num::+}(delta);
});
}
}
[@vm.bytecode=
Bytecode {
Entry 5
CheckStack
Push FP[-5]
InstanceCall 1, CP#1
PopLocal r2
L2:
CheckStack
Push r2
InstanceCall 1, CP#2
PushTrue
IfNeStrictTOS
Jump L1
AllocateContext 1
PopLocal r0
Push r0
Push r2
InstanceCall 1, CP#3
StoreContextVar 0
Allocate CP#10
StoreLocal r4
Push r4
PushNull
StoreFieldTOS CP#11
Push r4
PushNull
StoreFieldTOS CP#13
Push r4
PushConstant CP#15
StoreFieldTOS CP#16
Push r4
PushConstant CP#4
StoreFieldTOS CP#18
Push r4
Push r0
StoreFieldTOS CP#5
PopLocal r3
Push r3
InstanceCall 1, CP#20
Drop1
Push r0
LoadContextVar 0
PushConstant CP#21
IndirectStaticCall 1, CP#0
Drop1
Push r0
LoadContextParent
PopLocal r0
Jump L2
L1:
PushNull
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = ICData get target-name 'iterator', arg-desc CP#0
[2] = ICData target-name 'moveNext', arg-desc CP#0
[3] = ICData get target-name 'current', arg-desc CP#0
[4] = ClosureFunction <anonymous closure> () dart.core::Null;
[5] = InstanceField dart.core::_Closure::_context
[6] = Reserved
[7] = ArgDesc num-args 2, num-type-args 0, names []
[8] = ICData target-name '+', arg-desc CP#7
[9] = EndClosureFunctionScope
[10] = Class dart.core::_Closure
[11] = InstanceField dart.core::_Closure::_instantiator_type_arguments
[12] = Reserved
[13] = InstanceField dart.core::_Closure::_function_type_arguments
[14] = Reserved
[15] = EmptyTypeArguments
[16] = InstanceField dart.core::_Closure::_delayed_type_arguments
[17] = Reserved
[18] = InstanceField dart.core::_Closure::_function
[19] = Reserved
[20] = ICData dynamic target-name 'call', arg-desc CP#0
[21] = StaticICData target 'dart.core::print', arg-desc CP#0
}
Closure CP#4 {
EntryFixed 1, 3
CheckStack
Push FP[-5]
LoadFieldTOS CP#5
PopLocal r0
Push r0
Push r0
LoadContextVar 0
PushInt 1
InstanceCall 2, CP#8
StoreContextVar 0
PushNull
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);
};
[@vm.call-site-attributes.metadata=receiverType:() dart.core::Null] 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
PushNull
ReturnTOS
}
ConstantPool {
[0] = ArgDesc num-args 1, num-type-args 0, names []
[1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
}
] 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
PushNull
PushConstant CP#1
PushConstant CP#2
AssertAssignable 0, CP#3
Drop1
Allocate CP#8
StoreLocal r2
Push r2
Push FP[-6]
LoadTypeArgumentsField CP#0
StoreFieldTOS CP#9
Push r2
PushNull
StoreFieldTOS CP#11
Push r2
PushConstant CP#13
StoreFieldTOS CP#14
Push r2
PushConstant CP#4
StoreFieldTOS CP#16
Push r2
Push r0
StoreFieldTOS CP#5
ReturnTOS
PushNull
ReturnTOS
}
ConstantPool {
[0] = TypeArgumentsField #lib::D
[1] = Type #lib::D::T
[2] = String 't'
[3] = SubtypeTestCache
[4] = ClosureFunction <anonymous closure> () #lib::D::T;
[5] = InstanceField dart.core::_Closure::_context
[6] = Reserved
[7] = EndClosureFunctionScope
[8] = Class dart.core::_Closure
[9] = InstanceField dart.core::_Closure::_instantiator_type_arguments
[10] = Reserved
[11] = InstanceField dart.core::_Closure::_function_type_arguments
[12] = Reserved
[13] = EmptyTypeArguments
[14] = InstanceField dart.core::_Closure::_delayed_type_arguments
[15] = Reserved
[16] = InstanceField dart.core::_Closure::_function
[17] = Reserved
}
Closure CP#4 {
EntryFixed 1, 2
CheckStack
Push FP[-5]
LoadFieldTOS CP#5
PopLocal r0
Push r0
LoadContextVar 0
ReturnTOS
PushNull
ReturnTOS
}
] method foo(generic-covariant-impl self::D::T t) dynamic {
return () self::D::T => t;
}
}
[@vm.bytecode=
Bytecode {
Entry 4
CheckStack
AllocateContext 1
PopLocal r0
Push r0
PushInt 5
StoreContextVar 0
Allocate CP#9
StoreLocal r3
Push r3
PushNull
StoreFieldTOS CP#10
Push r3
PushNull
StoreFieldTOS CP#12
Push r3
PushConstant CP#14
StoreFieldTOS CP#15
Push r3
PushConstant CP#0
StoreFieldTOS CP#17
Push r3
Push r0
StoreFieldTOS CP#1
PopLocal r2
Push r2
PushInt 3
InstanceCall 2, CP#19
Drop1
Push r0
LoadContextVar 0
ReturnTOS
Push r0
LoadContextParent
PopLocal r0
PushNull
ReturnTOS
}
ConstantPool {
[0] = ClosureFunction <anonymous closure> (dart.core::int y) dart.core::Null;
[1] = InstanceField dart.core::_Closure::_context
[2] = Reserved
[3] = Type dart.core::int
[4] = String 'y'
[5] = SubtypeTestCache
[6] = ArgDesc num-args 2, num-type-args 0, names []
[7] = ICData target-name '+', arg-desc CP#6
[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] = EmptyTypeArguments
[15] = InstanceField dart.core::_Closure::_delayed_type_arguments
[16] = Reserved
[17] = InstanceField dart.core::_Closure::_function
[18] = Reserved
[19] = ICData dynamic target-name 'call', arg-desc CP#6
}
Closure CP#0 {
EntryFixed 2, 3
CheckStack
Push FP[-6]
LoadFieldTOS CP#1
PopLocal r0
Push FP[-5]
PushNull
PushNull
PushConstant CP#3
PushConstant CP#4
AssertAssignable 1, CP#5
Drop1
Push r0
Push r0
LoadContextVar 0
Push FP[-5]
InstanceCall 2, CP#7
StoreContextVar 0
PushNull
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);
};
[@vm.call-site-attributes.metadata=receiverType:(dart.core::int) dart.core::Null] inc.call(3);
return x;
}
[@vm.bytecode=
Bytecode {
Entry 2
CheckStack
CheckFunctionTypeArgs 8, 0
PushConstant CP#0
StoreLocal r1
Push r1
PushInt 8
CreateArrayTOS
StoreLocal r1
Push r1
PushInt 0
PushNull
Push r0
InstantiateType CP#1
StoreIndexedTOS
Push r1
PushInt 1
PushNull
Push r0
InstantiateType CP#2
StoreIndexedTOS
Push r1
PushInt 2
PushNull
Push r0
InstantiateType CP#3
StoreIndexedTOS
Push r1
PushInt 3
PushNull
Push r0
InstantiateType CP#4
StoreIndexedTOS
Push r1
PushInt 4
PushNull
Push r0
InstantiateType CP#5
StoreIndexedTOS
Push r1
PushInt 5
PushNull
Push r0
InstantiateType CP#6
StoreIndexedTOS
Push r1
PushInt 6
PushNull
Push r0
InstantiateType CP#7
StoreIndexedTOS
Push r1
PushInt 7
PushNull
Push r0
InstantiateType CP#8
StoreIndexedTOS
PushConstant CP#10
IndirectStaticCall 2, CP#9
PushConstant CP#12
IndirectStaticCall 1, CP#11
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = TypeArgs [dart.core::Type]
[1] = Type #lib::callWithArgs::T1
[2] = Type #lib::callWithArgs::T2
[3] = Type #lib::callWithArgs::T3
[4] = Type #lib::callWithArgs::T4
[5] = Type #lib::callWithArgs::T5
[6] = Type #lib::callWithArgs::T6
[7] = Type #lib::callWithArgs::T7
[8] = Type #lib::callWithArgs::T8
[9] = ArgDesc num-args 2, num-type-args 0, names []
[10] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#9
[11] = ArgDesc num-args 1, num-type-args 0, names []
[12] = StaticICData target 'dart.core::print', arg-desc CP#11
}
]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
InstanceCall 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
InstanceCall 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
InstanceCall 2, CP#12
Drop1
PushNull
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
}
]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 7
CheckStack
Allocate CP#14
StoreLocal r3
Push r3
PushNull
StoreFieldTOS CP#15
Push r3
PushNull
StoreFieldTOS CP#6
Push r3
PushConstant CP#5
StoreFieldTOS CP#3
Push r3
PushConstant CP#0
StoreFieldTOS CP#17
Push r3
Push r0
StoreFieldTOS CP#1
PopLocal r2
Push r2
StoreLocal r3
PushConstant CP#19
StoreLocal r6
PushConstant CP#21
IndirectStaticCall 2, CP#20
Drop1
Allocate CP#14
StoreLocal r5
Push r6
StoreFieldTOS CP#3
Push r5
Push r3
LoadFieldTOS CP#15
StoreFieldTOS CP#15
Push r5
Push r3
LoadFieldTOS CP#6
StoreFieldTOS CP#6
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
PushNull
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::_delayed_type_arguments
[4] = Reserved
[5] = EmptyTypeArguments
[6] = InstanceField dart.core::_Closure::_function_type_arguments
[7] = Reserved
[8] = ArgDesc num-args 4, num-type-args 0, names []
[9] = StaticICData target 'dart._internal::_prependTypeArguments', arg-desc CP#8
[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] = ArgDesc num-args 2, num-type-args 0, names []
[21] = StaticICData target 'dart._internal::_boundsCheckForPartialInstantiation', arg-desc CP#20
}
Closure CP#0 {
EntryFixed 2, 3
CheckStack
Push FP[-6]
LoadFieldTOS CP#1
PopLocal r1
Push FP[-6]
LoadFieldTOS CP#3
StoreLocal r0
PushConstant CP#5
IfEqStrictTOS
Jump L1
CheckFunctionTypeArgs 0, 2
Jump L2
L1:
CheckFunctionTypeArgs 1, 0
L2:
Push r0
Push FP[-6]
LoadFieldTOS CP#6
PushInt 0
PushInt 1
PushConstant CP#9
IndirectStaticCall 4, CP#8
PopLocal r0
Push FP[-5]
PushNull
Push r0
PushConstant CP#10
PushConstant CP#11
AssertAssignable 0, CP#12
Drop1
PushNull
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
PushNull
ReturnTOS
}
ConstantPool {
}
]static method main() dynamic {}