blob: 2080a18eb54ea20bbda04c7392614b95b7046b1c [file] [log] [blame]
library #lib;
import self as self;
import "dart:core" as core;
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 4
CheckStack
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreFieldTOS CP#0
PopLocal r0
Push r0
Push FP[-5]
StoreFieldTOS CP#1
Allocate CP#38
StoreLocal r3
Push r3
Push r0
LoadFieldTOS CP#1
LoadFieldTOS CP#17
StoreFieldTOS CP#39
Push r3
Push FP[-6]
StoreFieldTOS CP#4
Push r3
PushConstant CP#2
StoreFieldTOS CP#40
Push r3
Push r0
StoreFieldTOS CP#3
PopLocal r2
PushConstant CP#49
Push r2
InstanceCall1 2, CP#50
Drop1
PushConstant CP#51
Push r2
InstanceCall1 2, CP#52
Drop1
PushConstant CP#18
ReturnTOS
}
ConstantPool {
[0] = ContextOffset parent
[1] = ContextOffset var [0]
[2] = ClosureFunction nested1 <T5 extends dart.core::Object = dynamic, T6 extends dart.core::Object = dynamic>() void;
[3] = FieldOffset dart.core::_Closure::_context
[4] = FieldOffset dart.core::_Closure::_function_type_arguments
[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] = TypeArgumentsFieldOffset #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 1, num-type-args 1, 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] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
[40] = FieldOffset dart.core::_Closure::_function
[41] = ICData target-name 'call', arg-desc CP#32
[42] = EndClosureFunctionScope
[43] = TypeArgs [#lib::C7, #lib::C8]
[44] = ArgDesc num-args 1, num-type-args 2, names []
[45] = ICData target-name 'call', arg-desc CP#44
[46] = TypeArgs [dart.core::List<#lib::C7>, dart.core::List<#lib::C8>]
[47] = ICData target-name 'call', arg-desc CP#44
[48] = EndClosureFunctionScope
[49] = TypeArgs [#lib::C5, #lib::C6]
[50] = ICData target-name 'call', arg-desc CP#44
[51] = TypeArgs [dart.core::List<#lib::C5>, dart.core::List<#lib::C6>]
[52] = ICData target-name 'call', arg-desc CP#44
}
Closure CP#12 {
Entry 4
CheckStack
Push FP[-5]
LoadFieldTOS CP#3
PopLocal r1
Push FP[-5]
LoadFieldTOS CP#4
PopLocal r0
PushConstant CP#13
StoreLocal r3
Push r3
PushConstant CP#14
CreateArrayTOS
StoreLocal r3
Push r3
PushConstant CP#15
Push r1
LoadFieldTOS CP#1
LoadFieldTOS CP#17
PushConstant CP#18
InstantiateType CP#16
StoreIndexedTOS
Push r3
PushConstant CP#19
Push r1
LoadFieldTOS CP#1
LoadFieldTOS 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
LoadFieldTOS CP#1
LoadFieldTOS CP#17
Push r0
InstantiateTypeArgumentsTOS 0, CP#34
PushConstant CP#36
IndirectStaticCall 1, CP#35
Drop1
PushConstant CP#18
ReturnTOS
}
Closure CP#9 {
Entry 4
CheckStack
Push FP[-5]
LoadFieldTOS CP#3
PopLocal r0
Push FP[-6]
Push FP[-5]
LoadFieldTOS CP#4
PushConstant CP#6
PushConstant CP#10
PushConstant CP#11
IndirectStaticCall 4, CP#7
PopLocal FP[-6]
Allocate CP#38
StoreLocal r3
Push r3
Push r0
LoadFieldTOS CP#1
LoadFieldTOS CP#17
StoreFieldTOS CP#39
Push r3
Push FP[-6]
StoreFieldTOS CP#4
Push r3
PushConstant CP#12
StoreFieldTOS CP#40
Push r3
Push r0
StoreFieldTOS CP#3
PopLocal r2
Push r2
InstanceCall1 1, CP#41
Drop1
PushConstant CP#18
ReturnTOS
}
Closure CP#2 {
Entry 4
CheckStack
Push FP[-5]
LoadFieldTOS CP#3
PopLocal r0
Push FP[-6]
Push FP[-5]
LoadFieldTOS CP#4
PushConstant CP#5
PushConstant CP#6
PushConstant CP#8
IndirectStaticCall 4, CP#7
PopLocal FP[-6]
Allocate CP#38
StoreLocal r3
Push r3
Push r0
LoadFieldTOS CP#1
LoadFieldTOS CP#17
StoreFieldTOS CP#39
Push r3
Push FP[-6]
StoreFieldTOS CP#4
Push r3
PushConstant CP#9
StoreFieldTOS CP#40
Push r3
Push r0
StoreFieldTOS CP#3
PopLocal r2
PushConstant CP#43
Push r2
InstanceCall1 2, CP#45
Drop1
PushConstant CP#46
Push r2
InstanceCall1 2, CP#47
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
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
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreFieldTOS CP#0
PopLocal r0
PushConstant CP#3
PopLocal r2
Push r0
PushConstant CP#4
StoreFieldTOS CP#1
Allocate CP#23
StoreLocal r4
Push r4
PushConstant CP#7
StoreFieldTOS CP#24
Push r4
PushConstant CP#7
StoreFieldTOS CP#25
Push r4
PushConstant CP#5
StoreFieldTOS CP#26
Push r4
Push r0
StoreFieldTOS CP#6
PopLocal r3
Push r3
PushConstant CP#30
InstanceCall1 2, CP#31
Drop1
Push r3
PushConstant CP#32
InstanceCall1 2, CP#33
Drop1
Push r2
PushConstant CP#34
IndirectStaticCall 1, CP#19
Drop1
Push r0
LoadFieldTOS CP#1
PushConstant CP#35
IndirectStaticCall 1, CP#19
Drop1
Push r0
LoadFieldTOS CP#0
PopLocal r0
Push r0
LoadFieldTOS CP#1
PushConstant CP#36
IndirectStaticCall 1, CP#19
Drop1
Push r0
LoadFieldTOS CP#0
PopLocal r0
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreFieldTOS CP#0
PopLocal r0
Push r0
PushConstant CP#37
StoreFieldTOS CP#1
Allocate CP#23
StoreLocal r3
Push r3
PushConstant CP#7
StoreFieldTOS CP#24
Push r3
PushConstant CP#7
StoreFieldTOS CP#25
Push r3
PushConstant CP#38
StoreFieldTOS CP#26
Push r3
Push r0
StoreFieldTOS CP#6
PopLocal r2
Push r2
InstanceCall1 1, CP#41
Drop1
Push r0
LoadFieldTOS CP#0
PopLocal r0
PushConstant CP#7
ReturnTOS
}
ConstantPool {
[0] = ContextOffset parent
[1] = ContextOffset var [0]
[2] = Int 1
[3] = Int 2
[4] = Int 3
[5] = ClosureFunction <anonymous closure> (dart.core::int y) dart.core::Null;
[6] = FieldOffset dart.core::_Closure::_context
[7] = Null
[8] = Type dart.core::int
[9] = String 'y'
[10] = SubtypeTestCache
[11] = ArgDesc num-args 2, num-type-args 0, names []
[12] = ICData target-name '+', arg-desc CP#11
[13] = Int 5
[14] = ICData target-name '>', arg-desc CP#11
[15] = Bool true
[16] = Int 4
[17] = ClosureFunction closure2 () void;
[18] = ICData target-name '+', arg-desc CP#11
[19] = ArgDesc num-args 1, num-type-args 0, names []
[20] = ICData get target-name 'foo', arg-desc CP#19
[21] = ICData target-name '+', arg-desc CP#11
[22] = EndClosureFunctionScope
[23] = Class dart.core::_Closure
[24] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
[25] = FieldOffset dart.core::_Closure::_function_type_arguments
[26] = FieldOffset dart.core::_Closure::_function
[27] = ICData target-name 'call', arg-desc CP#19
[28] = StaticICData target 'dart.core::print', arg-desc CP#19
[29] = EndClosureFunctionScope
[30] = Int 10
[31] = ICData target-name 'call', arg-desc CP#11
[32] = Int 11
[33] = ICData target-name 'call', arg-desc CP#11
[34] = StaticICData target 'dart.core::print', arg-desc CP#19
[35] = StaticICData target 'dart.core::print', arg-desc CP#19
[36] = StaticICData target 'dart.core::print', arg-desc CP#19
[37] = Int 42
[38] = ClosureFunction <anonymous closure> () dart.core::Null;
[39] = ICData set target-name 'foo', arg-desc CP#11
[40] = EndClosureFunctionScope
[41] = ICData target-name 'call', arg-desc CP#19
}
Closure CP#17 {
Entry 3
CheckStack
Push FP[-5]
LoadFieldTOS CP#6
PopLocal r0
Push r0
LoadFieldTOS CP#0
LoadFieldTOS CP#0
Push r0
LoadFieldTOS CP#0
LoadFieldTOS CP#0
LoadFieldTOS CP#0
LoadFieldTOS CP#1
PushConstant CP#3
InstanceCall1 2, CP#18
StoreLocal r2
StoreFieldTOS CP#1
Push r2
Drop1
Push r0
Push r0
LoadFieldTOS CP#0
LoadFieldTOS CP#0
LoadFieldTOS CP#0
LoadFieldTOS CP#0
LoadFieldTOS CP#1
InstanceCall1 1, CP#20
Push r0
LoadFieldTOS CP#0
LoadFieldTOS CP#1
InstanceCall1 2, CP#21
StoreLocal r2
StoreFieldTOS CP#1
Push r2
Drop1
PushConstant CP#7
ReturnTOS
}
Closure CP#5 {
Entry 4
CheckStack
Push FP[-6]
LoadFieldTOS CP#6
PopLocal r0
Push FP[-5]
PushConstant CP#7
PushConstant CP#7
PushConstant CP#8
PushConstant CP#9
AssertAssignable 1, CP#10
Drop1
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreFieldTOS CP#0
PopLocal r0
Push r0
LoadFieldTOS CP#0
LoadFieldTOS CP#0
LoadFieldTOS CP#0
Push FP[-5]
StoreFieldTOS CP#1
Push r0
Push FP[-5]
StoreFieldTOS CP#1
Push r0
LoadFieldTOS CP#0
LoadFieldTOS CP#0
Push r0
LoadFieldTOS CP#1
PushConstant CP#2
InstanceCall1 2, CP#12
StoreLocal r2
StoreFieldTOS CP#1
Push r2
Drop1
Push r0
LoadFieldTOS CP#0
LoadFieldTOS CP#0
LoadFieldTOS CP#1
PushConstant CP#13
InstanceCall1 2, CP#14
PushConstant CP#15
IfNeStrictTOS
Jump L1
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreFieldTOS CP#0
PopLocal r0
Push r0
PushConstant CP#16
StoreFieldTOS CP#1
Allocate CP#23
StoreLocal r2
Push r2
PushConstant CP#7
StoreFieldTOS CP#24
Push r2
PushConstant CP#7
StoreFieldTOS CP#25
Push r2
PushConstant CP#17
StoreFieldTOS CP#26
Push r2
Push r0
StoreFieldTOS CP#6
PopLocal r3
Push r3
InstanceCall1 1, CP#27
Drop1
Push r0
LoadFieldTOS CP#1
PushConstant CP#28
IndirectStaticCall 1, CP#19
Drop1
Push r0
LoadFieldTOS CP#0
PopLocal r0
L1:
PushConstant CP#7
ReturnTOS
}
Closure CP#38 {
Entry 3
CheckStack
Push FP[-5]
LoadFieldTOS CP#6
PopLocal r0
Push r0
LoadFieldTOS CP#0
LoadFieldTOS CP#1
Push r0
LoadFieldTOS CP#1
StoreLocal r2
InstanceCall1 2, CP#39
Drop1
Push r2
Drop1
PushConstant CP#7
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
StoreFieldTOS CP#0
PopLocal r0
Push r0
PushConstant CP#1
StoreFieldTOS CP#2
PushConstant CP#3
StoreLocal r3
Push r3
PushConstant CP#1
CreateArrayTOS
StoreLocal r3
PushConstant CP#5
IndirectStaticCall 2, CP#4
PopLocal r2
PushConstant CP#3
StoreLocal r3
Push r3
PushConstant CP#1
CreateArrayTOS
StoreLocal r3
PushConstant CP#6
IndirectStaticCall 2, CP#4
PopLocal r4
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreFieldTOS CP#0
PopLocal r0
Push r0
PushConstant CP#1
StoreFieldTOS CP#2
L2:
CheckStack
Push r0
LoadFieldTOS CP#2
PushConstant CP#7
InstanceCall1 2, CP#9
PushConstant CP#10
IfNeStrictTOS
Jump L1
Push r2
Allocate CP#16
StoreLocal r3
Push r3
PushConstant CP#14
StoreFieldTOS CP#17
Push r3
PushConstant CP#14
StoreFieldTOS CP#18
Push r3
PushConstant CP#11
StoreFieldTOS CP#19
Push r3
Push r0
StoreFieldTOS CP#12
InstanceCall1 2, CP#20
Drop1
Push r4
Allocate CP#16
StoreLocal r3
Push r3
PushConstant CP#14
StoreFieldTOS CP#17
Push r3
PushConstant CP#14
StoreFieldTOS CP#18
Push r3
PushConstant CP#21
StoreFieldTOS CP#19
Push r3
Push r0
StoreFieldTOS CP#12
InstanceCall1 2, CP#27
Drop1
Push r0
CloneContext
PopLocal r0
Push r0
Push r0
LoadFieldTOS CP#2
PushConstant CP#28
InstanceCall1 2, CP#29
StoreLocal r3
StoreFieldTOS CP#2
Push r3
Drop1
Jump L2
L1:
Push r0
LoadFieldTOS CP#0
PopLocal r0
Push r0
LoadFieldTOS CP#0
PopLocal r0
PushConstant CP#14
ReturnTOS
}
ConstantPool {
[0] = ContextOffset parent
[1] = Int 0
[2] = ContextOffset var [0]
[3] = TypeArgs [dart.core::Function]
[4] = ArgDesc num-args 1, num-type-args 1, names []
[5] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#4
[6] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#4
[7] = Int 10
[8] = ArgDesc num-args 2, num-type-args 0, names []
[9] = ICData target-name '<', arg-desc CP#8
[10] = Bool true
[11] = ClosureFunction <anonymous closure> () dart.core::int;
[12] = FieldOffset dart.core::_Closure::_context
[13] = ICData target-name '+', arg-desc CP#8
[14] = Null
[15] = EndClosureFunctionScope
[16] = Class dart.core::_Closure
[17] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
[18] = FieldOffset dart.core::_Closure::_function_type_arguments
[19] = FieldOffset dart.core::_Closure::_function
[20] = ICData target-name 'add', arg-desc CP#8
[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#8
[26] = EndClosureFunctionScope
[27] = ICData target-name 'add', arg-desc CP#8
[28] = Int 1
[29] = ICData target-name '+', arg-desc CP#8
}
Closure CP#11 {
Entry 2
CheckStack
Push FP[-5]
LoadFieldTOS CP#12
PopLocal r0
Push r0
LoadFieldTOS CP#2
Push r0
LoadFieldTOS CP#0
LoadFieldTOS CP#2
InstanceCall1 2, CP#13
ReturnTOS
PushConstant CP#14
ReturnTOS
}
Closure CP#21 {
Entry 3
CheckStack
Push FP[-6]
LoadFieldTOS CP#12
PopLocal r0
Push FP[-5]
PushConstant CP#14
PushConstant CP#14
PushConstant CP#22
PushConstant CP#23
AssertAssignable 1, CP#24
Drop1
Push r0
Push FP[-5]
Push r0
LoadFieldTOS CP#0
LoadFieldTOS CP#2
InstanceCall1 2, CP#25
StoreLocal r2
StoreFieldTOS CP#2
Push r2
Drop1
PushConstant CP#14
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
StoreFieldTOS CP#8
PopLocal r0
Push r0
Push r2
InstanceCall1 1, CP#9
StoreFieldTOS CP#10
Allocate CP#17
StoreLocal r4
Push r4
PushConstant CP#0
StoreFieldTOS CP#18
Push r4
PushConstant CP#0
StoreFieldTOS CP#19
Push r4
PushConstant CP#11
StoreFieldTOS CP#20
Push r4
Push r0
StoreFieldTOS CP#12
PopLocal r3
Push r3
InstanceCall1 1, CP#21
Drop1
Push r0
LoadFieldTOS CP#10
PushConstant CP#22
IndirectStaticCall 1, CP#4
Drop1
Push r0
LoadFieldTOS CP#8
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] = ContextOffset parent
[9] = ICData get target-name 'current', arg-desc CP#4
[10] = ContextOffset var [0]
[11] = ClosureFunction <anonymous closure> () dart.core::Null;
[12] = FieldOffset dart.core::_Closure::_context
[13] = Int 1
[14] = ArgDesc num-args 2, num-type-args 0, names []
[15] = ICData target-name '+', arg-desc CP#14
[16] = EndClosureFunctionScope
[17] = Class dart.core::_Closure
[18] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
[19] = FieldOffset dart.core::_Closure::_function_type_arguments
[20] = FieldOffset dart.core::_Closure::_function
[21] = ICData target-name 'call', arg-desc CP#4
[22] = StaticICData target 'dart.core::print', arg-desc CP#4
}
Closure CP#11 {
Entry 3
CheckStack
Push FP[-5]
LoadFieldTOS CP#12
PopLocal r0
Push r0
Push r0
LoadFieldTOS CP#10
PushConstant CP#13
InstanceCall1 2, CP#15
StoreLocal r2
StoreFieldTOS CP#10
Push r2
Drop1
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);
}
}
}
[@vm.bytecode=
Bytecode {
Entry 4
CheckStack
AllocateContext 1
StoreLocal r1
Push r1
Push r0
StoreFieldTOS CP#0
PopLocal r0
Push r0
PushConstant CP#1
StoreFieldTOS CP#2
Allocate CP#12
StoreLocal r3
Push r3
PushConstant CP#5
StoreFieldTOS CP#13
Push r3
PushConstant CP#5
StoreFieldTOS CP#14
Push r3
PushConstant CP#3
StoreFieldTOS CP#15
Push r3
Push r0
StoreFieldTOS CP#4
PopLocal r2
Push r2
PushConstant CP#16
InstanceCall1 2, CP#17
Drop1
Push r0
LoadFieldTOS CP#2
ReturnTOS
Push r0
LoadFieldTOS CP#0
PopLocal r0
PushConstant CP#5
ReturnTOS
}
ConstantPool {
[0] = ContextOffset parent
[1] = Int 5
[2] = ContextOffset var [0]
[3] = ClosureFunction <anonymous closure> (dart.core::int y) dart.core::Null;
[4] = FieldOffset dart.core::_Closure::_context
[5] = Null
[6] = Type dart.core::int
[7] = String 'y'
[8] = SubtypeTestCache
[9] = ArgDesc num-args 2, num-type-args 0, names []
[10] = ICData target-name '+', arg-desc CP#9
[11] = EndClosureFunctionScope
[12] = Class dart.core::_Closure
[13] = FieldOffset dart.core::_Closure::_instantiator_type_arguments
[14] = FieldOffset dart.core::_Closure::_function_type_arguments
[15] = FieldOffset dart.core::_Closure::_function
[16] = Int 3
[17] = ICData target-name 'call', arg-desc CP#9
}
Closure CP#3 {
Entry 3
CheckStack
Push FP[-6]
LoadFieldTOS CP#4
PopLocal r0
Push FP[-5]
PushConstant CP#5
PushConstant CP#5
PushConstant CP#6
PushConstant CP#7
AssertAssignable 1, CP#8
Drop1
Push r0
Push r0
LoadFieldTOS CP#2
Push FP[-5]
InstanceCall1 2, CP#10
StoreLocal r2
StoreFieldTOS CP#2
Push r2
Drop1
PushConstant CP#5
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 1
CheckStack
PushConstant CP#0
StoreLocal r0
Push r0
PushConstant CP#1
CreateArrayTOS
StoreLocal r0
Push r0
PushConstant CP#2
PushConstant CP#4
Push FP[-5]
InstantiateType CP#3
StoreIndexedTOS
Push r0
PushConstant CP#5
PushConstant CP#4
Push FP[-5]
InstantiateType CP#6
StoreIndexedTOS
Push r0
PushConstant CP#7
PushConstant CP#4
Push FP[-5]
InstantiateType CP#8
StoreIndexedTOS
Push r0
PushConstant CP#9
PushConstant CP#4
Push FP[-5]
InstantiateType CP#10
StoreIndexedTOS
Push r0
PushConstant CP#11
PushConstant CP#4
Push FP[-5]
InstantiateType CP#12
StoreIndexedTOS
Push r0
PushConstant CP#13
PushConstant CP#4
Push FP[-5]
InstantiateType CP#14
StoreIndexedTOS
Push r0
PushConstant CP#15
PushConstant CP#4
Push FP[-5]
InstantiateType CP#16
StoreIndexedTOS
Push r0
PushConstant CP#17
PushConstant CP#4
Push FP[-5]
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 1, num-type-args 1, 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 0
CheckStack
PushConstant CP#0
ReturnTOS
}
ConstantPool {
[0] = Null
}
]static method main() dynamic {}