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