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           0
  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::'' (constructor)', arg-desc CP#0
}
]  synthetic constructor •() → self::C1
    : super core::Object::•()
    ;
}
class C2 extends core::Object {
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack           0
  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::'' (constructor)', arg-desc CP#0
}
]  synthetic constructor •() → self::C2
    : super core::Object::•()
    ;
}
class C3 extends core::Object {
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack           0
  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::'' (constructor)', arg-desc CP#0
}
]  synthetic constructor •() → self::C3
    : super core::Object::•()
    ;
}
class C4 extends core::Object {
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack           0
  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::'' (constructor)', arg-desc CP#0
}
]  synthetic constructor •() → self::C4
    : super core::Object::•()
    ;
}
class C5 extends core::Object {
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack           0
  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::'' (constructor)', arg-desc CP#0
}
]  synthetic constructor •() → self::C5
    : super core::Object::•()
    ;
}
class C6 extends core::Object {
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack           0
  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::'' (constructor)', arg-desc CP#0
}
]  synthetic constructor •() → self::C6
    : super core::Object::•()
    ;
}
class C7 extends core::Object {
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack           0
  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::'' (constructor)', arg-desc CP#0
}
]  synthetic constructor •() → self::C7
    : super core::Object::•()
    ;
}
class C8 extends core::Object {
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack           0
  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::'' (constructor)', arg-desc CP#0
}
]  synthetic constructor •() → self::C8
    : super core::Object::•()
    ;
}
class A<T1 extends core::Object = dynamic, T2 extends core::Object = dynamic> extends core::Object {
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack           0
  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::'' (constructor)', arg-desc CP#0
}
]  synthetic constructor •() → self::A<self::A::T1, self::A::T2>
    : super core::Object::•()
    ;
[@vm.bytecode=
Bytecode {
  Entry                5
  CheckStack           0
  CheckFunctionTypeArgs 2, r0
  AllocateContext      0, 1
  PopLocal             r1
  Push                 r1
  Push                 FP[-5]
  StoreContextVar      0, 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
  DynamicCall          2, CP#45
  Drop1
  PushConstant         CP#46
  Push                 r3
  DynamicCall          2, CP#47
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [4] = Reserved
  [5] = EmptyTypeArguments
  [6] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [7] = Reserved
  [8] = ArgDesc num-args 4, num-type-args 0, names []
  [9] = StaticICData target 'dart:_internal::_prependTypeArguments', arg-desc CP#8
  [10] = ClosureFunction 1
  [11] = StaticICData target 'dart:_internal::_prependTypeArguments', arg-desc CP#8
  [12] = ClosureFunction 2
  [13] = TypeArgs [dart:core::Type]
  [14] = Type #lib::A::TypeParam/0
  [15] = TypeArgumentsField #lib::A
  [16] = Type #lib::A::TypeParam/1
  [17] = Type #lib::A::foo::TypeParam/0
  [18] = Type #lib::A::foo::TypeParam/1
  [19] = Type #lib::A::foo::Closure/0::TypeParam/0
  [20] = Type #lib::A::foo::Closure/0::TypeParam/1
  [21] = Type #lib::A::foo::Closure/1::TypeParam/0
  [22] = Type #lib::A::foo::Closure/1::TypeParam/1
  [23] = ArgDesc num-args 2, num-type-args 0, names []
  [24] = StaticICData target 'dart:core::List::_fromLiteral (constructor)', 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::TypeParam/0, #lib::A::TypeParam/1, #lib::A::foo::TypeParam/0, #lib::A::foo::TypeParam/1, #lib::A::foo::Closure/0::TypeParam/0, #lib::A::foo::Closure/0::TypeParam/1, #lib::A::foo::Closure/1::TypeParam/0, #lib::A::foo::Closure/1::TypeParam/1]
  [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 (field)
  [33] = Reserved
  [34] = InstanceField dart:core::_Closure::_function (field)
  [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 #lib::A::foo::nested1 <dart:core::Object T5, dart:core::Object T6> () -> void
ClosureBytecode {
  EntryFixed           1, 5
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r1
  Push                 FP[-5]
  LoadFieldTOS         CP#3
  StoreLocal           r0
  PushConstant         CP#5
  JumpIfEqStrict       L1
  CheckFunctionTypeArgs 0, r2
  Jump                 L2
L1:
  CheckFunctionTypeArgs 2, r0
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, 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
  DynamicCall          2, CP#40
  Drop1
  PushConstant         CP#41
  Push                 r3
  DynamicCall          2, CP#42
  Drop1
  PushNull
  ReturnTOS

}

Closure #lib::A::foo::Closure/0::nested2 <dart:core::Object T7, dart:core::Object T8> () -> void
ClosureBytecode {
  EntryFixed           1, 5
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r1
  Push                 FP[-5]
  LoadFieldTOS         CP#3
  StoreLocal           r0
  PushConstant         CP#5
  JumpIfEqStrict       L1
  CheckFunctionTypeArgs 0, r2
  Jump                 L2
L1:
  CheckFunctionTypeArgs 2, r0
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, 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
  DynamicCall          1, CP#36
  Drop1
  PushNull
  ReturnTOS

}

Closure #lib::A::foo::Closure/1::<anonymous closure> () -> dart:core::Null
ClosureBytecode {
  EntryFixed           1, 4
  CheckStack           0
  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, 0
  LoadTypeArgumentsField CP#15
  PushNull
  InstantiateType      CP#14
  StoreIndexedTOS
  Push                 r3
  PushInt              1
  Push                 r1
  LoadContextVar       0, 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, 0
  LoadTypeArgumentsField CP#15
  Push                 r0
  InstantiateTypeArgumentsTOS 0, CP#27
  PushConstant         CP#29
  IndirectStaticCall   1, CP#28
  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           0
  Push                 FP[-5]
  PushConstant         CP#1
  IndirectStaticCall   1, CP#0
  Drop1
  PushNull
  ReturnTOS
}
Nullable fields: [#lib::B::foo (field)]}
ConstantPool {
  [0] = ArgDesc num-args 1, num-type-args 0, names []
  [1] = StaticICData target 'dart:core::Object::'' (constructor)', arg-desc CP#0
}
]  synthetic constructor •() → self::B
    : super core::Object::•()
    ;
[@vm.bytecode=
Bytecode {
  Entry                5
  CheckStack           0
  AllocateContext      0, 4
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 0
  Push                 r0
  PushInt              1
  StoreContextVar      0, 1
  PushInt              2
  PopLocal             r2
  Push                 r0
  PushInt              3
  StoreContextVar      0, 2
  Allocate             CP#11
  StoreLocal           r4
  Push                 r4
  PushNull
  StoreFieldTOS        CP#12
  Push                 r4
  PushNull
  StoreFieldTOS        CP#14
  Push                 r4
  PushConstant         CP#16
  StoreFieldTOS        CP#17
  Push                 r4
  PushConstant         CP#0
  StoreFieldTOS        CP#19
  Push                 r4
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r3
  Push                 r3
  PushInt              10
  DynamicCall          2, CP#25
  Drop1
  Push                 r3
  PushInt              11
  DynamicCall          2, CP#26
  Drop1
  Push                 r2
  PushConstant         CP#27
  IndirectStaticCall   1, CP#7
  Drop1
  Push                 r0
  LoadContextVar       0, 2
  PushConstant         CP#28
  IndirectStaticCall   1, CP#7
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  PushConstant         CP#29
  IndirectStaticCall   1, CP#7
  Drop1
  Push                 r0
  PushInt              42
  StoreContextVar      0, 3
  Allocate             CP#11
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#12
  Push                 r3
  PushNull
  StoreFieldTOS        CP#14
  Push                 r3
  PushConstant         CP#16
  StoreFieldTOS        CP#17
  Push                 r3
  PushConstant         CP#30
  StoreFieldTOS        CP#19
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r2
  Push                 r2
  DynamicCall          1, CP#34
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = Type dart:core::int
  [4] = String 'y'
  [5] = SubtypeTestCache
  [6] = ClosureFunction 1
  [7] = ArgDesc num-args 1, num-type-args 0, names []
  [8] = InterfaceCall get target-name 'get:foo', arg-desc CP#7
  [9] = Reserved
  [10] = EndClosureFunctionScope
  [11] = Class dart:core::_Closure
  [12] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [13] = Reserved
  [14] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [15] = Reserved
  [16] = EmptyTypeArguments
  [17] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [18] = Reserved
  [19] = InstanceField dart:core::_Closure::_function (field)
  [20] = Reserved
  [21] = ICData dynamic target-name 'call', arg-desc CP#7
  [22] = StaticICData target 'dart:core::print', arg-desc CP#7
  [23] = EndClosureFunctionScope
  [24] = ArgDesc num-args 2, num-type-args 0, names []
  [25] = ICData dynamic target-name 'call', arg-desc CP#24
  [26] = ICData dynamic target-name 'call', arg-desc CP#24
  [27] = StaticICData target 'dart:core::print', arg-desc CP#7
  [28] = StaticICData target 'dart:core::print', arg-desc CP#7
  [29] = StaticICData target 'dart:core::print', arg-desc CP#7
  [30] = ClosureFunction 2
  [31] = InterfaceCall set target-name 'set:foo', arg-desc CP#24
  [32] = Reserved
  [33] = EndClosureFunctionScope
  [34] = ICData dynamic target-name 'call', arg-desc CP#7
}
Closure #lib::B::topLevel::<anonymous closure> (dart:core::int y) -> dart:core::Null
ClosureBytecode {
  EntryFixed           2, 4
  CheckStack           0
  Push                 FP[-6]
  LoadFieldTOS         CP#1
  PopLocal             r0
  AllocateContext      1, 2
  StoreLocal           r1
  Push                 r1
  Push                 r0
  StoreContextParent
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      1, 0
  Push                 FP[-5]
  PushConstant         CP#3
  PushNull
  PushNull
  PushConstant         CP#4
  AssertAssignable     1, CP#5
  Drop1
  Push                 r0
  LoadContextParent
  Push                 r0
  LoadContextVar       1, 0
  PushInt              1
  AddInt
  StoreContextVar      0, 1
  Push                 r0
  LoadContextParent
  LoadContextVar       0, 1
  PushInt              5
  CompareIntGt
  JumpIfFalse          L1
  Push                 r0
  PushInt              4
  StoreContextVar      1, 1
  Allocate             CP#11
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#12
  Push                 r2
  PushNull
  StoreFieldTOS        CP#14
  Push                 r2
  PushConstant         CP#16
  StoreFieldTOS        CP#17
  Push                 r2
  PushConstant         CP#6
  StoreFieldTOS        CP#19
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r3
  Push                 r3
  DynamicCall          1, CP#21
  Drop1
  Push                 r0
  LoadContextVar       1, 1
  PushConstant         CP#22
  IndirectStaticCall   1, CP#7
  Drop1
L1:
  PushNull
  ReturnTOS

}

Closure #lib::B::topLevel::Closure/0::closure2 () -> void
ClosureBytecode {
  EntryFixed           1, 3
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  Push                 r0
  LoadContextParent
  Push                 r0
  LoadContextParent
  LoadContextVar       0, 1
  PushInt              2
  AddInt
  StoreContextVar      0, 2
  Push                 r0
  Push                 r0
  LoadContextParent
  LoadContextVar       0, 0
  InterfaceCall        1, CP#8
  Push                 r0
  LoadContextVar       1, 0
  AddInt
  StoreContextVar      1, 1
  PushNull
  ReturnTOS

}

Closure #lib::B::topLevel::<anonymous closure> () -> dart:core::Null
ClosureBytecode {
  EntryFixed           1, 3
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 0
  Push                 r0
  LoadContextVar       0, 3
  InterfaceCall        2, CP#31
  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           0
  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::'' (constructor)', arg-desc CP#0
}
]  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
[@vm.bytecode=
Bytecode {
  Entry                5
  CheckStack           0
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  PushInt              0
  StoreContextVar      0, 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, 1
  StoreLocal           r1
  Push                 r1
  Push                 r0
  StoreContextParent
  PopLocal             r0
  Push                 r0
  PushInt              0
  StoreContextVar      1, 0
L2:
  CheckStack           1
  Push                 r0
  LoadContextVar       1, 0
  PushInt              10
  CompareIntLt
  JumpIfFalse          L1
  Push                 r2
  Allocate             CP#8
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#9
  Push                 r3
  PushNull
  StoreFieldTOS        CP#11
  Push                 r3
  PushConstant         CP#13
  StoreFieldTOS        CP#14
  Push                 r3
  PushConstant         CP#4
  StoreFieldTOS        CP#16
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#5
  InterfaceCall        2, CP#18
  Drop1
  Push                 r4
  Allocate             CP#8
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#9
  Push                 r3
  PushNull
  StoreFieldTOS        CP#11
  Push                 r3
  PushConstant         CP#13
  StoreFieldTOS        CP#14
  Push                 r3
  PushConstant         CP#20
  StoreFieldTOS        CP#16
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#5
  InterfaceCall        2, CP#18
  Drop1
  Push                 r0
  CloneContext         1, 1
  PopLocal             r0
  Push                 r0
  Push                 r0
  LoadContextVar       1, 0
  PushInt              1
  AddInt
  StoreLocal           r3
  StoreContextVar      1, 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 (constructor)', arg-desc CP#1
  [3] = StaticICData target 'dart:core::List::_fromLiteral (constructor)', arg-desc CP#1
  [4] = ClosureFunction 0
  [5] = InstanceField dart:core::_Closure::_context (field)
  [6] = Reserved
  [7] = EndClosureFunctionScope
  [8] = Class dart:core::_Closure
  [9] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [10] = Reserved
  [11] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [12] = Reserved
  [13] = EmptyTypeArguments
  [14] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [15] = Reserved
  [16] = InstanceField dart:core::_Closure::_function (field)
  [17] = Reserved
  [18] = InterfaceCall target-name 'add', arg-desc CP#1
  [19] = Reserved
  [20] = ClosureFunction 1
  [21] = Type dart:core::int
  [22] = String 'ii'
  [23] = SubtypeTestCache
  [24] = EndClosureFunctionScope
}
Closure #lib::C::testForLoop::<anonymous closure> () -> dart:core::int
ClosureBytecode {
  EntryFixed           1, 2
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#5
  PopLocal             r0
  Push                 r0
  LoadContextVar       1, 0
  Push                 r0
  LoadContextParent
  LoadContextVar       0, 0
  AddInt
  ReturnTOS

}

Closure #lib::C::testForLoop::<anonymous closure> (dart:core::int ii) -> dart:core::Null
ClosureBytecode {
  EntryFixed           2, 3
  CheckStack           0
  Push                 FP[-6]
  LoadFieldTOS         CP#5
  PopLocal             r0
  Push                 FP[-5]
  PushConstant         CP#21
  PushNull
  PushNull
  PushConstant         CP#22
  AssertAssignable     1, CP#23
  Drop1
  Push                 r0
  Push                 FP[-5]
  Push                 r0
  LoadContextParent
  LoadContextVar       0, 0
  AddInt
  StoreContextVar      1, 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           0
  Push                 FP[-5]
  InterfaceCall        1, CP#1
  PopLocal             r2
L2:
  CheckStack           1
  Push                 r2
  InterfaceCall        1, CP#3
  JumpIfFalse          L1
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  Push                 r2
  InterfaceCall        1, CP#5
  StoreContextVar      0, 0
  Allocate             CP#11
  StoreLocal           r4
  Push                 r4
  PushNull
  StoreFieldTOS        CP#12
  Push                 r4
  PushNull
  StoreFieldTOS        CP#14
  Push                 r4
  PushConstant         CP#16
  StoreFieldTOS        CP#17
  Push                 r4
  PushConstant         CP#7
  StoreFieldTOS        CP#19
  Push                 r4
  Push                 r0
  StoreFieldTOS        CP#8
  PopLocal             r3
  Push                 r3
  DynamicCall          1, CP#21
  Drop1
  Push                 r0
  LoadContextVar       0, 0
  PushConstant         CP#22
  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] = InterfaceCall get target-name 'get:iterator', arg-desc CP#0
  [2] = Reserved
  [3] = InterfaceCall target-name 'moveNext', arg-desc CP#0
  [4] = Reserved
  [5] = InterfaceCall get target-name 'get:current', arg-desc CP#0
  [6] = Reserved
  [7] = ClosureFunction 0
  [8] = InstanceField dart:core::_Closure::_context (field)
  [9] = Reserved
  [10] = EndClosureFunctionScope
  [11] = Class dart:core::_Closure
  [12] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [13] = Reserved
  [14] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [15] = Reserved
  [16] = EmptyTypeArguments
  [17] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [18] = Reserved
  [19] = InstanceField dart:core::_Closure::_function (field)
  [20] = Reserved
  [21] = ICData dynamic target-name 'call', arg-desc CP#0
  [22] = StaticICData target 'dart:core::print', arg-desc CP#0
}
Closure #lib::C::testForInLoop::<anonymous closure> () -> dart:core::Null
ClosureBytecode {
  EntryFixed           1, 3
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#8
  PopLocal             r0
  Push                 r0
  Push                 r0
  LoadContextVar       0, 0
  PushInt              1
  AddInt
  StoreContextVar      0, 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           0
  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::'' (constructor)', arg-desc CP#0
}
]  synthetic constructor •() → self::D<self::D::T>
    : super core::Object::•()
    ;
[@vm.bytecode=
Bytecode {
  Entry                3
  CheckStack           0
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 0
  Push                 FP[-5]
  PushConstant         CP#0
  Push                 FP[-6]
  LoadTypeArgumentsField CP#1
  PushNull
  PushConstant         CP#2
  AssertAssignable     0, CP#3
  Drop1
  Allocate             CP#8
  StoreLocal           r2
  Push                 r2
  Push                 FP[-6]
  LoadTypeArgumentsField CP#1
  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
}
ConstantPool {
  [0] = Type #lib::D::TypeParam/0
  [1] = TypeArgumentsField #lib::D
  [2] = String 't'
  [3] = SubtypeTestCache
  [4] = ClosureFunction 0
  [5] = InstanceField dart:core::_Closure::_context (field)
  [6] = Reserved
  [7] = EndClosureFunctionScope
  [8] = Class dart:core::_Closure
  [9] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [10] = Reserved
  [11] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [12] = Reserved
  [13] = EmptyTypeArguments
  [14] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [15] = Reserved
  [16] = InstanceField dart:core::_Closure::_function (field)
  [17] = Reserved
}
Closure #lib::D::foo::<anonymous closure> () -> #lib::D::TypeParam/0
ClosureBytecode {
  EntryFixed           1, 2
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#5
  PopLocal             r0
  Push                 r0
  LoadContextVar       0, 0
  ReturnTOS

}
]  method foo(generic-covariant-impl self::D::T t) → dynamic {
    return () → self::D::T => t;
  }
}
[@vm.bytecode=
Bytecode {
  Entry                4
  CheckStack           0
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  PushInt              5
  StoreContextVar      0, 0
  Allocate             CP#7
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#8
  Push                 r3
  PushNull
  StoreFieldTOS        CP#10
  Push                 r3
  PushConstant         CP#12
  StoreFieldTOS        CP#13
  Push                 r3
  PushConstant         CP#0
  StoreFieldTOS        CP#15
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r2
  Push                 r2
  PushInt              3
  DynamicCall          2, CP#18
  Drop1
  Push                 r0
  LoadContextVar       0, 0
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = Type dart:core::int
  [4] = String 'y'
  [5] = SubtypeTestCache
  [6] = EndClosureFunctionScope
  [7] = Class dart:core::_Closure
  [8] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [9] = Reserved
  [10] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [11] = Reserved
  [12] = EmptyTypeArguments
  [13] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [14] = Reserved
  [15] = InstanceField dart:core::_Closure::_function (field)
  [16] = Reserved
  [17] = ArgDesc num-args 2, num-type-args 0, names []
  [18] = ICData dynamic target-name 'call', arg-desc CP#17
}
Closure #lib::simpleClosure::<anonymous closure> (dart:core::int y) -> dart:core::Null
ClosureBytecode {
  EntryFixed           2, 3
  CheckStack           0
  Push                 FP[-6]
  LoadFieldTOS         CP#1
  PopLocal             r0
  Push                 FP[-5]
  PushConstant         CP#3
  PushNull
  PushNull
  PushConstant         CP#4
  AssertAssignable     1, CP#5
  Drop1
  Push                 r0
  Push                 r0
  LoadContextVar       0, 0
  Push                 FP[-5]
  AddInt
  StoreContextVar      0, 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           0
  CheckFunctionTypeArgs 8, r0
  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::TypeParam/0
  [2] = Type #lib::callWithArgs::TypeParam/1
  [3] = Type #lib::callWithArgs::TypeParam/2
  [4] = Type #lib::callWithArgs::TypeParam/3
  [5] = Type #lib::callWithArgs::TypeParam/4
  [6] = Type #lib::callWithArgs::TypeParam/5
  [7] = Type #lib::callWithArgs::TypeParam/6
  [8] = Type #lib::callWithArgs::TypeParam/7
  [9] = ArgDesc num-args 2, num-type-args 0, names []
  [10] = StaticICData target 'dart:core::List::_fromLiteral (constructor)', 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           0
  PushConstant         CP#0
  PushConstant         CP#2
  PushConstant         CP#1
  AllocateT
  StoreLocal           r0
  Push                 r0
  PushConstant         CP#4
  IndirectStaticCall   1, CP#3
  Drop1
  InterfaceCall        2, CP#6
  Drop1
  PushConstant         CP#8
  PushConstant         CP#2
  PushConstant         CP#1
  AllocateT
  StoreLocal           r0
  Push                 r0
  PushConstant         CP#9
  IndirectStaticCall   1, CP#3
  Drop1
  InterfaceCall        2, CP#6
  Drop1
  PushConstant         CP#8
  PushConstant         CP#10
  PushConstant         CP#1
  AllocateT
  StoreLocal           r0
  Push                 r0
  PushConstant         CP#11
  IndirectStaticCall   1, CP#3
  Drop1
  InterfaceCall        2, CP#6
  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::'' (constructor)', arg-desc CP#3
  [5] = ArgDesc num-args 1, num-type-args 2, names []
  [6] = InterfaceCall target-name 'foo', arg-desc CP#5
  [7] = Reserved
  [8] = TypeArgs [dart:core::List < #lib::C3 >, dart:core::List < #lib::C4 >]
  [9] = StaticICData target '#lib::A::'' (constructor)', arg-desc CP#3
  [10] = TypeArgumentsForInstanceAllocation #lib::A [dart:core::List < #lib::C1 >, dart:core::List < #lib::C2 >]
  [11] = StaticICData target '#lib::A::'' (constructor)', arg-desc CP#3
}
]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           0
  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
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [4] = Reserved
  [5] = EmptyTypeArguments
  [6] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [7] = Reserved
  [8] = ArgDesc num-args 4, num-type-args 0, names []
  [9] = StaticICData target 'dart:_internal::_prependTypeArguments', arg-desc CP#8
  [10] = Type #lib::testPartialInstantiation::Closure/0::TypeParam/0
  [11] = String 't'
  [12] = SubtypeTestCache
  [13] = EndClosureFunctionScope
  [14] = Class dart:core::_Closure
  [15] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [16] = Reserved
  [17] = InstanceField dart:core::_Closure::_function (field)
  [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 #lib::testPartialInstantiation::foo <dart:core::Object T> (#lib::testPartialInstantiation::Closure/0::TypeParam/0 t) -> void
ClosureBytecode {
  EntryFixed           2, 3
  CheckStack           0
  Push                 FP[-6]
  LoadFieldTOS         CP#1
  PopLocal             r1
  Push                 FP[-6]
  LoadFieldTOS         CP#3
  StoreLocal           r0
  PushConstant         CP#5
  JumpIfEqStrict       L1
  CheckFunctionTypeArgs 0, r2
  Jump                 L2
L1:
  CheckFunctionTypeArgs 1, r0
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]
  PushConstant         CP#10
  PushNull
  Push                 r0
  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           0
  PushNull
  ReturnTOS
}
ConstantPool {
}
]static method main() → dynamic {}
