main = #lib::main;
 [@vm.bytecode=
BytecodeMetadata {
Bytecode (version: stable)
Main library: #lib
Library '#lib'
    name '#lib'
    script '#lib'

Class '', script = '#lib'


Function 'simpleClosure', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type dart:core::int

Bytecode {
  Entry                4
  CheckStack           0
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  PushInt              5
  StoreContextVar      0, 0
  AllocateClosure      CP#0
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#7
  Push                 r3
  PushNull
  StoreFieldTOS        CP#9
  Push                 r3
  PushConstant         CP#11
  StoreFieldTOS        CP#12
  Push                 r3
  PushConstant         CP#0
  StoreFieldTOS        CP#14
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r2
  Push                 r2
  StoreLocal           r3
  PushInt              3
  Push                 r3
  UncheckedClosureCall CP#16, 2
  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] = ObjectRef 'y'
  [5] = SubtypeTestCache
  [6] = EndClosureFunctionScope
  [7] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [8] = Reserved
  [9] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [10] = Reserved
  [11] = EmptyTypeArguments
  [12] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [13] = Reserved
  [14] = InstanceField dart:core::_Closure::_function (field)
  [15] = Reserved
  [16] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
}
Closure #lib::simpleClosure::'<anonymous closure>' (dart:core::int y) -> dart:core::Null
ClosureCode {
  EntryFixed           2, 3
  Push                 FP[-6]
  LoadFieldTOS         CP#1
  PopLocal             r0
  CheckStack           0
  JumpIfUnchecked      L1
  Push                 FP[-5]
  PushConstant         CP#3
  PushNull
  PushNull
  PushConstant         CP#4
  AssertAssignable     1, CP#5
  Drop1
L1:
  Push                 r0
  Push                 r0
  LoadContextVar       0, 0
  Push                 FP[-5]
  AddInt
  StoreContextVar      0, 0
  PushNull
  ReturnTOS
}


Function 'callWithArgs', static, reflectable, debuggable
    type-params <dart:core::Object T1, dart:core::Object T2, dart:core::Object T3, dart:core::Object T4, dart:core::Object T5, dart:core::Object T6, dart:core::Object T7, dart:core::Object T8>
    parameters [] (required: 0)
    return-type void

Bytecode {
  Entry                2
  CheckFunctionTypeArgs 8, r0
  CheckStack           0
  PushConstant         CP#0
  StoreLocal           r1
  Push                 r1
  PushInt              8
  CreateArrayTOS
  StoreLocal           r1
  Push                 r1
  PushInt              0
  PushNull
  Push                 r0
  InstantiateType      CP#1
  StoreIndexedTOS
  Push                 r1
  PushInt              1
  PushNull
  Push                 r0
  InstantiateType      CP#2
  StoreIndexedTOS
  Push                 r1
  PushInt              2
  PushNull
  Push                 r0
  InstantiateType      CP#3
  StoreIndexedTOS
  Push                 r1
  PushInt              3
  PushNull
  Push                 r0
  InstantiateType      CP#4
  StoreIndexedTOS
  Push                 r1
  PushInt              4
  PushNull
  Push                 r0
  InstantiateType      CP#5
  StoreIndexedTOS
  Push                 r1
  PushInt              5
  PushNull
  Push                 r0
  InstantiateType      CP#6
  StoreIndexedTOS
  Push                 r1
  PushInt              6
  PushNull
  Push                 r0
  InstantiateType      CP#7
  StoreIndexedTOS
  Push                 r1
  PushInt              7
  PushNull
  Push                 r0
  InstantiateType      CP#8
  StoreIndexedTOS
  DirectCall           CP#9, 2
  DirectCall           CP#11, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef < 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] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
  [10] = Reserved
  [11] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [12] = Reserved
}


Function 'callA', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type void

Bytecode {
  Entry                1
  CheckStack           0
  PushConstant         CP#0
  PushConstant         CP#2
  PushConstant         CP#1
  AllocateT
  StoreLocal           r0
  Push                 r0
  DirectCall           CP#3, 1
  Drop1
  InterfaceCall        CP#5, 2
  Drop1
  PushConstant         CP#7
  PushConstant         CP#2
  PushConstant         CP#1
  AllocateT
  StoreLocal           r0
  Push                 r0
  DirectCall           CP#3, 1
  Drop1
  InterfaceCall        CP#5, 2
  Drop1
  PushConstant         CP#7
  PushConstant         CP#8
  PushConstant         CP#1
  AllocateT
  StoreLocal           r0
  Push                 r0
  DirectCall           CP#3, 1
  Drop1
  InterfaceCall        CP#5, 2
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ObjectRef < #lib::C3, #lib::C4 >
  [1] = Class #lib::A
  [2] = ObjectRef < #lib::C1, #lib::C2 >
  [3] = DirectCall '#lib::A:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [4] = Reserved
  [5] = InterfaceCall '#lib::A::foo', ArgDesc num-args 1, num-type-args 2, names []
  [6] = Reserved
  [7] = ObjectRef < dart:core::List < #lib::C3 >, dart:core::List < #lib::C4 > >
  [8] = ObjectRef < dart:core::List < #lib::C1 >, dart:core::List < #lib::C2 > >
}


Function 'testPartialInstantiation', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type FunctionType (dart:core::int) -> dynamic

Bytecode {
  Entry                7
  CheckStack           0
  AllocateClosure      CP#0
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#14
  Push                 r3
  PushNull
  StoreFieldTOS        CP#6
  Push                 r3
  PushConstant         CP#5
  StoreFieldTOS        CP#3
  Push                 r3
  PushConstant         CP#0
  StoreFieldTOS        CP#16
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r2
  Push                 r2
  StoreLocal           r3
  PushConstant         CP#18
  StoreLocal           r6
  DirectCall           CP#19, 2
  Drop1
  Allocate             CP#21
  StoreLocal           r5
  Push                 r6
  StoreFieldTOS        CP#3
  Push                 r5
  Push                 r3
  LoadFieldTOS         CP#14
  StoreFieldTOS        CP#14
  Push                 r5
  Push                 r3
  LoadFieldTOS         CP#6
  StoreFieldTOS        CP#6
  Push                 r5
  Push                 r3
  LoadFieldTOS         CP#16
  StoreFieldTOS        CP#16
  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] = DirectCall 'dart:_internal::_prependTypeArguments', ArgDesc num-args 4, num-type-args 0, names []
  [9] = Reserved
  [10] = Type #lib::testPartialInstantiation::Closure/0::TypeParam/0
  [11] = ObjectRef 't'
  [12] = SubtypeTestCache
  [13] = EndClosureFunctionScope
  [14] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [15] = Reserved
  [16] = InstanceField dart:core::_Closure::_function (field)
  [17] = Reserved
  [18] = ObjectRef < dart:core::int >
  [19] = DirectCall 'dart:_internal::_boundsCheckForPartialInstantiation', ArgDesc num-args 2, num-type-args 0, names []
  [20] = Reserved
  [21] = Class dart:core::_Closure
}
Closure #lib::testPartialInstantiation::'foo' <dart:core::Object T> (#lib::testPartialInstantiation::Closure/0::TypeParam/0 t) -> void
ClosureCode {
  EntryFixed           2, 3
  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:
  CheckStack           0
  Push                 r0
  Push                 FP[-6]
  LoadFieldTOS         CP#6
  PushInt              0
  PushInt              1
  DirectCall           CP#8, 4
  PopLocal             r0
  JumpIfUnchecked      L3
  Push                 FP[-5]
  PushConstant         CP#10
  PushNull
  Push                 r0
  PushConstant         CP#11
  AssertAssignable     0, CP#12
  Drop1
L3:
  PushNull
  ReturnTOS
}


Function 'main', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type dynamic

Bytecode {
  Entry                0
  CheckStack           0
  PushNull
  ReturnTOS
}
ConstantPool {
}

Class 'C1', script = '#lib'
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::C1

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}

Class 'C2', script = '#lib'
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::C2

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}

Class 'C3', script = '#lib'
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::C3

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}

Class 'C4', script = '#lib'
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::C4

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}

Class 'C5', script = '#lib'
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::C5

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}

Class 'C6', script = '#lib'
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::C6

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}

Class 'C7', script = '#lib'
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::C7

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}

Class 'C8', script = '#lib'
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::C8

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}

Class 'A', script = '#lib'
    type-params <dart:core::Object T1, dart:core::Object T2> (args: 2)
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::A < #lib::A::TypeParam/0, #lib::A::TypeParam/1 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}


Function 'foo', reflectable, debuggable
    type-params <dart:core::Object T3, dart:core::Object T4>
    parameters [] (required: 0)
    return-type void

Bytecode {
  Entry                5
  CheckFunctionTypeArgs 2, r0
  CheckStack           0
  AllocateContext      0, 1
  PopLocal             r1
  Push                 r1
  Push                 FP[-5]
  StoreContextVar      0, 0
  AllocateClosure      CP#0
  StoreLocal           r4
  Push                 r4
  Push                 FP[-5]
  LoadTypeArgumentsField CP#14
  StoreFieldTOS        CP#30
  Push                 r4
  Push                 r0
  StoreFieldTOS        CP#6
  Push                 r4
  PushConstant         CP#5
  StoreFieldTOS        CP#3
  Push                 r4
  PushConstant         CP#0
  StoreFieldTOS        CP#32
  Push                 r4
  Push                 r1
  StoreFieldTOS        CP#1
  PopLocal             r3
  PushConstant         CP#40
  Push                 r3
  StoreLocal           r4
  Push                 r4
  UncheckedClosureCall CP#37, 2
  Drop1
  PushConstant         CP#41
  Push                 r3
  StoreLocal           r4
  Push                 r4
  UncheckedClosureCall CP#37, 2
  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] = DirectCall 'dart:_internal::_prependTypeArguments', ArgDesc num-args 4, num-type-args 0, names []
  [9] = Reserved
  [10] = ClosureFunction 1
  [11] = ClosureFunction 2
  [12] = ObjectRef < dart:core::Type >
  [13] = Type #lib::A::TypeParam/0
  [14] = TypeArgumentsField #lib::A
  [15] = Type #lib::A::TypeParam/1
  [16] = Type #lib::A::foo::TypeParam/0
  [17] = Type #lib::A::foo::TypeParam/1
  [18] = Type #lib::A::foo::Closure/0::TypeParam/0
  [19] = Type #lib::A::foo::Closure/0::TypeParam/1
  [20] = Type #lib::A::foo::Closure/1::TypeParam/0
  [21] = Type #lib::A::foo::Closure/1::TypeParam/1
  [22] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
  [23] = Reserved
  [24] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [25] = Reserved
  [26] = ObjectRef < #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 >
  [27] = DirectCall '#lib::callWithArgs', ArgDesc num-args 0, num-type-args 8, names []
  [28] = Reserved
  [29] = EndClosureFunctionScope
  [30] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [31] = Reserved
  [32] = InstanceField dart:core::_Closure::_function (field)
  [33] = Reserved
  [34] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [35] = EndClosureFunctionScope
  [36] = ObjectRef < #lib::C7, #lib::C8 >
  [37] = ObjectRef ArgDesc num-args 1, num-type-args 2, names []
  [38] = ObjectRef < dart:core::List < #lib::C7 >, dart:core::List < #lib::C8 > >
  [39] = EndClosureFunctionScope
  [40] = ObjectRef < #lib::C5, #lib::C6 >
  [41] = ObjectRef < dart:core::List < #lib::C5 >, dart:core::List < #lib::C6 > >
}
Closure #lib::A::foo::'nested1' <dart:core::Object T5, dart:core::Object T6> () -> void
ClosureCode {
  EntryFixed           1, 5
  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:
  CheckStack           0
  Push                 r0
  Push                 FP[-5]
  LoadFieldTOS         CP#6
  PushInt              2
  PushInt              4
  DirectCall           CP#8, 4
  PopLocal             r0
  AllocateClosure      CP#10
  StoreLocal           r4
  Push                 r4
  Push                 r1
  LoadContextVar       0, 0
  LoadTypeArgumentsField CP#14
  StoreFieldTOS        CP#30
  Push                 r4
  Push                 r0
  StoreFieldTOS        CP#6
  Push                 r4
  PushConstant         CP#5
  StoreFieldTOS        CP#3
  Push                 r4
  PushConstant         CP#10
  StoreFieldTOS        CP#32
  Push                 r4
  Push                 r1
  StoreFieldTOS        CP#1
  PopLocal             r3
  PushConstant         CP#36
  Push                 r3
  StoreLocal           r4
  Push                 r4
  UncheckedClosureCall CP#37, 2
  Drop1
  PushConstant         CP#38
  Push                 r3
  StoreLocal           r4
  Push                 r4
  UncheckedClosureCall CP#37, 2
  Drop1
  PushNull
  ReturnTOS
}

Closure #lib::A::foo::Closure/0::'nested2' <dart:core::Object T7, dart:core::Object T8> () -> void
ClosureCode {
  EntryFixed           1, 5
  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:
  CheckStack           0
  Push                 r0
  Push                 FP[-5]
  LoadFieldTOS         CP#6
  PushInt              4
  PushInt              6
  DirectCall           CP#8, 4
  PopLocal             r0
  AllocateClosure      CP#11
  StoreLocal           r4
  Push                 r4
  Push                 r1
  LoadContextVar       0, 0
  LoadTypeArgumentsField CP#14
  StoreFieldTOS        CP#30
  Push                 r4
  Push                 r0
  StoreFieldTOS        CP#6
  Push                 r4
  PushConstant         CP#5
  StoreFieldTOS        CP#3
  Push                 r4
  PushConstant         CP#11
  StoreFieldTOS        CP#32
  Push                 r4
  Push                 r1
  StoreFieldTOS        CP#1
  PopLocal             r3
  Push                 r3
  StoreLocal           r4
  Push                 r4
  UncheckedClosureCall CP#34, 1
  Drop1
  PushNull
  ReturnTOS
}

Closure #lib::A::foo::Closure/1::'<anonymous closure>' () -> dart:core::Null
ClosureCode {
  EntryFixed           1, 4
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r1
  CheckStack           0
  Push                 FP[-5]
  LoadFieldTOS         CP#6
  PopLocal             r0
  PushConstant         CP#12
  StoreLocal           r3
  Push                 r3
  PushInt              8
  CreateArrayTOS
  StoreLocal           r3
  Push                 r3
  PushInt              0
  Push                 r1
  LoadContextVar       0, 0
  LoadTypeArgumentsField CP#14
  PushNull
  InstantiateType      CP#13
  StoreIndexedTOS
  Push                 r3
  PushInt              1
  Push                 r1
  LoadContextVar       0, 0
  LoadTypeArgumentsField CP#14
  PushNull
  InstantiateType      CP#15
  StoreIndexedTOS
  Push                 r3
  PushInt              2
  PushNull
  Push                 r0
  InstantiateType      CP#16
  StoreIndexedTOS
  Push                 r3
  PushInt              3
  PushNull
  Push                 r0
  InstantiateType      CP#17
  StoreIndexedTOS
  Push                 r3
  PushInt              4
  PushNull
  Push                 r0
  InstantiateType      CP#18
  StoreIndexedTOS
  Push                 r3
  PushInt              5
  PushNull
  Push                 r0
  InstantiateType      CP#19
  StoreIndexedTOS
  Push                 r3
  PushInt              6
  PushNull
  Push                 r0
  InstantiateType      CP#20
  StoreIndexedTOS
  Push                 r3
  PushInt              7
  PushNull
  Push                 r0
  InstantiateType      CP#21
  StoreIndexedTOS
  DirectCall           CP#22, 2
  DirectCall           CP#24, 1
  Drop1
  Push                 r1
  LoadContextVar       0, 0
  LoadTypeArgumentsField CP#14
  Push                 r0
  InstantiateTypeArgumentsTOS 0, CP#26
  DirectCall           CP#27, 1
  Drop1
  PushNull
  ReturnTOS
}

Class 'B', script = '#lib'
    extends dart:core::Object

Field 'foo', type = dart:core::int, getter = 'get:foo', setter = 'set:foo', reflectable
    value = null

Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::B

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
Nullable fields: [#lib::B::foo (field)]
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}


Function 'topLevel', reflectable, debuggable
    parameters [] (required: 0)
    return-type void

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
  AllocateClosure      CP#0
  StoreLocal           r4
  Push                 r4
  PushNull
  StoreFieldTOS        CP#10
  Push                 r4
  PushNull
  StoreFieldTOS        CP#12
  Push                 r4
  PushConstant         CP#14
  StoreFieldTOS        CP#15
  Push                 r4
  PushConstant         CP#0
  StoreFieldTOS        CP#17
  Push                 r4
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r3
  Push                 r3
  StoreLocal           r4
  PushInt              10
  Push                 r4
  UncheckedClosureCall CP#23, 2
  Drop1
  Push                 r3
  StoreLocal           r4
  PushInt              11
  Push                 r4
  UncheckedClosureCall CP#23, 2
  Drop1
  Push                 r2
  DirectCall           CP#20, 1
  Drop1
  Push                 r0
  LoadContextVar       0, 2
  DirectCall           CP#20, 1
  Drop1
  Push                 r0
  LoadContextVar       0, 1
  DirectCall           CP#20, 1
  Drop1
  Push                 r0
  PushInt              42
  StoreContextVar      0, 3
  AllocateClosure      CP#24
  StoreLocal           r3
  Push                 r3
  PushNull
  StoreFieldTOS        CP#10
  Push                 r3
  PushNull
  StoreFieldTOS        CP#12
  Push                 r3
  PushConstant         CP#14
  StoreFieldTOS        CP#15
  Push                 r3
  PushConstant         CP#24
  StoreFieldTOS        CP#17
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r2
  Push                 r2
  StoreLocal           r3
  Push                 r3
  UncheckedClosureCall CP#19, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = Type dart:core::int
  [4] = ObjectRef 'y'
  [5] = SubtypeTestCache
  [6] = ClosureFunction 1
  [7] = InterfaceCall '#lib::B::get:foo', ArgDesc num-args 1, num-type-args 0, names []
  [8] = Reserved
  [9] = EndClosureFunctionScope
  [10] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [11] = Reserved
  [12] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [13] = Reserved
  [14] = EmptyTypeArguments
  [15] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [16] = Reserved
  [17] = InstanceField dart:core::_Closure::_function (field)
  [18] = Reserved
  [19] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [20] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [21] = Reserved
  [22] = EndClosureFunctionScope
  [23] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
  [24] = ClosureFunction 2
  [25] = InterfaceCall '#lib::B::set:foo', ArgDesc num-args 2, num-type-args 0, names []
  [26] = Reserved
  [27] = EndClosureFunctionScope
}
Closure #lib::B::topLevel::'<anonymous closure>' (dart:core::int y) -> dart:core::Null
ClosureCode {
  EntryFixed           2, 4
  Push                 FP[-6]
  LoadFieldTOS         CP#1
  PopLocal             r0
  CheckStack           0
  AllocateContext      1, 2
  StoreLocal           r1
  Push                 r1
  Push                 r0
  StoreContextParent
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      1, 0
  JumpIfUnchecked      L1
  Push                 FP[-5]
  PushConstant         CP#3
  PushNull
  PushNull
  PushConstant         CP#4
  AssertAssignable     1, CP#5
  Drop1
L1:
  Push                 r0
  LoadContextParent
  Push                 r0
  LoadContextVar       1, 0
  PushInt              1
  AddInt
  StoreContextVar      0, 1
  Push                 r0
  LoadContextParent
  LoadContextVar       0, 1
  PushInt              5
  CompareIntGt
  JumpIfFalse          L2
  Push                 r0
  PushInt              4
  StoreContextVar      1, 1
  AllocateClosure      CP#6
  StoreLocal           r2
  Push                 r2
  PushNull
  StoreFieldTOS        CP#10
  Push                 r2
  PushNull
  StoreFieldTOS        CP#12
  Push                 r2
  PushConstant         CP#14
  StoreFieldTOS        CP#15
  Push                 r2
  PushConstant         CP#6
  StoreFieldTOS        CP#17
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r3
  Push                 r3
  StoreLocal           r2
  Push                 r2
  UncheckedClosureCall CP#19, 1
  Drop1
  Push                 r0
  LoadContextVar       1, 1
  DirectCall           CP#20, 1
  Drop1
L2:
  PushNull
  ReturnTOS
}

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

Closure #lib::B::topLevel::'<anonymous closure>' () -> dart:core::Null
ClosureCode {
  EntryFixed           1, 3
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  CheckStack           0
  Push                 r0
  LoadContextVar       0, 0
  Push                 r0
  LoadContextVar       0, 3
  InterfaceCall        CP#25, 2
  Drop1
  PushNull
  ReturnTOS
}

Class 'C', script = '#lib'
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::C

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}


Function 'testForLoop', reflectable, debuggable
    parameters [] (required: 0)
    return-type void

Bytecode {
  Entry                5
  CheckStack           0
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  PushInt              0
  StoreContextVar      0, 0
  PushConstant         CP#0
  PushConstant         CP#1
  DirectCall           CP#2, 2
  PopLocal             r2
  PushConstant         CP#0
  PushConstant         CP#1
  DirectCall           CP#2, 2
  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
  AllocateClosure      CP#4
  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#4
  StoreFieldTOS        CP#15
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#5
  InstantiatedInterfaceCall CP#17, 2
  Drop1
  Push                 r4
  AllocateClosure      CP#20
  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#20
  StoreFieldTOS        CP#15
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#5
  InstantiatedInterfaceCall CP#17, 2
  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] = ObjectRef < dart:core::Function >
  [1] = ObjectRef const <dynamic> []
  [2] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
  [3] = Reserved
  [4] = ClosureFunction 0
  [5] = InstanceField dart:core::_Closure::_context (field)
  [6] = Reserved
  [7] = EndClosureFunctionScope
  [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] = InstantiatedInterfaceCall 'dart:core::List::add', ArgDesc num-args 2, num-type-args 0, names [], receiver dart:core::List < dart:core::Function >
  [18] = Reserved
  [19] = Reserved
  [20] = ClosureFunction 1
  [21] = Type dart:core::int
  [22] = ObjectRef 'ii'
  [23] = SubtypeTestCache
  [24] = EndClosureFunctionScope
}
Closure #lib::C::testForLoop::'<anonymous closure>' () -> dart:core::int
ClosureCode {
  EntryFixed           1, 2
  Push                 FP[-5]
  LoadFieldTOS         CP#5
  PopLocal             r0
  CheckStack           0
  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
ClosureCode {
  EntryFixed           2, 3
  Push                 FP[-6]
  LoadFieldTOS         CP#5
  PopLocal             r0
  CheckStack           0
  JumpIfUnchecked      L1
  Push                 FP[-5]
  PushConstant         CP#21
  PushNull
  PushNull
  PushConstant         CP#22
  AssertAssignable     1, CP#23
  Drop1
L1:
  Push                 r0
  Push                 FP[-5]
  Push                 r0
  LoadContextParent
  LoadContextVar       0, 0
  AddInt
  StoreContextVar      1, 0
  PushNull
  ReturnTOS
}


Function 'testForInLoop', reflectable, debuggable
    parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
    return-type void

Bytecode {
  Entry                5
  CheckStack           0
  Push                 FP[-5]
  InterfaceCall        CP#0, 1
  PopLocal             r2
L2:
  CheckStack           1
  Push                 r2
  InterfaceCall        CP#2, 1
  JumpIfFalse          L1
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  Push                 r2
  InterfaceCall        CP#4, 1
  StoreContextVar      0, 0
  AllocateClosure      CP#6
  StoreLocal           r4
  Push                 r4
  PushNull
  StoreFieldTOS        CP#10
  Push                 r4
  PushNull
  StoreFieldTOS        CP#12
  Push                 r4
  PushConstant         CP#14
  StoreFieldTOS        CP#15
  Push                 r4
  PushConstant         CP#6
  StoreFieldTOS        CP#17
  Push                 r4
  Push                 r0
  StoreFieldTOS        CP#7
  PopLocal             r3
  Push                 r3
  StoreLocal           r4
  Push                 r4
  UncheckedClosureCall CP#19, 1
  Drop1
  Push                 r0
  LoadContextVar       0, 0
  DirectCall           CP#20, 1
  Drop1
  Push                 r0
  LoadContextParent
  PopLocal             r0
  Jump                 L2
L1:
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = InterfaceCall 'dart:core::Iterable::get:iterator', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
  [2] = InterfaceCall 'dart:core::Iterator::moveNext', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
  [4] = InterfaceCall 'dart:core::Iterator::get:current', ArgDesc num-args 1, num-type-args 0, names []
  [5] = Reserved
  [6] = ClosureFunction 0
  [7] = InstanceField dart:core::_Closure::_context (field)
  [8] = Reserved
  [9] = EndClosureFunctionScope
  [10] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [11] = Reserved
  [12] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [13] = Reserved
  [14] = EmptyTypeArguments
  [15] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [16] = Reserved
  [17] = InstanceField dart:core::_Closure::_function (field)
  [18] = Reserved
  [19] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [20] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
  [21] = Reserved
}
Closure #lib::C::testForInLoop::'<anonymous closure>' () -> dart:core::Null
ClosureCode {
  EntryFixed           1, 3
  Push                 FP[-5]
  LoadFieldTOS         CP#7
  PopLocal             r0
  CheckStack           0
  Push                 r0
  Push                 r0
  LoadContextVar       0, 0
  PushInt              1
  AddInt
  StoreContextVar      0, 0
  PushNull
  ReturnTOS
}

Class 'D', script = '#lib'
    type-params <dart:core::Object T> (args: 1)
    extends dart:core::Object


Function '', constructor, reflectable
    parameters [] (required: 0)
    return-type #lib::D < #lib::D::TypeParam/0 >

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  DirectCall           CP#0, 1
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
}


Function 'foo', reflectable, debuggable
    parameters [#lib::D::TypeParam/0 't'] (required: 1)
    return-type dynamic

Bytecode {
  Entry                3
  CheckStack           0
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 0
  JumpIfUnchecked      L1
  Push                 FP[-5]
  PushConstant         CP#0
  Push                 FP[-6]
  LoadTypeArgumentsField CP#1
  PushNull
  PushConstant         CP#2
  AssertAssignable     0, CP#3
  Drop1
L1:
  AllocateClosure      CP#4
  StoreLocal           r2
  Push                 r2
  Push                 FP[-6]
  LoadTypeArgumentsField CP#1
  StoreFieldTOS        CP#8
  Push                 r2
  PushNull
  StoreFieldTOS        CP#10
  Push                 r2
  PushConstant         CP#12
  StoreFieldTOS        CP#13
  Push                 r2
  PushConstant         CP#4
  StoreFieldTOS        CP#15
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#5
  ReturnTOS
}
Parameter flags: [2]
ConstantPool {
  [0] = Type #lib::D::TypeParam/0
  [1] = TypeArgumentsField #lib::D
  [2] = ObjectRef 't'
  [3] = SubtypeTestCache
  [4] = ClosureFunction 0
  [5] = InstanceField dart:core::_Closure::_context (field)
  [6] = Reserved
  [7] = EndClosureFunctionScope
  [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
}
Closure #lib::D::foo::'<anonymous closure>' () -> #lib::D::TypeParam/0
ClosureCode {
  EntryFixed           1, 2
  Push                 FP[-5]
  LoadFieldTOS         CP#5
  PopLocal             r0
  CheckStack           0
  Push                 r0
  LoadContextVar       0, 0
  ReturnTOS
}


Function 'bar', reflectable, debuggable
    parameters [] (required: 0)
    return-type dynamic

Bytecode {
  Entry                3
  CheckStack           0
  AllocateContext      0, 1
  PopLocal             r0
  Push                 r0
  Push                 FP[-5]
  StoreContextVar      0, 0
  AllocateClosure      CP#0
  StoreLocal           r2
  Push                 r2
  Push                 FP[-5]
  LoadTypeArgumentsField CP#5
  StoreFieldTOS        CP#6
  Push                 r2
  PushNull
  StoreFieldTOS        CP#8
  Push                 r2
  PushConstant         CP#10
  StoreFieldTOS        CP#11
  Push                 r2
  PushConstant         CP#0
  StoreFieldTOS        CP#13
  Push                 r2
  Push                 r0
  StoreFieldTOS        CP#1
  ReturnTOS
}
ConstantPool {
  [0] = ClosureFunction 0
  [1] = InstanceField dart:core::_Closure::_context (field)
  [2] = Reserved
  [3] = ClosureFunction 1
  [4] = EndClosureFunctionScope
  [5] = TypeArgumentsField #lib::D
  [6] = InstanceField dart:core::_Closure::_instantiator_type_arguments (field)
  [7] = Reserved
  [8] = InstanceField dart:core::_Closure::_function_type_arguments (field)
  [9] = Reserved
  [10] = EmptyTypeArguments
  [11] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
  [12] = Reserved
  [13] = InstanceField dart:core::_Closure::_function (field)
  [14] = Reserved
  [15] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
  [16] = EndClosureFunctionScope
}
Closure #lib::D::bar::'<anonymous closure>' () -> dart:core::Null
ClosureCode {
  EntryFixed           1, 4
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  CheckStack           0
  AllocateClosure      CP#3
  StoreLocal           r3
  Push                 r3
  Push                 r0
  LoadContextVar       0, 0
  LoadTypeArgumentsField CP#5
  StoreFieldTOS        CP#6
  Push                 r3
  PushNull
  StoreFieldTOS        CP#8
  Push                 r3
  PushConstant         CP#10
  StoreFieldTOS        CP#11
  Push                 r3
  PushConstant         CP#3
  StoreFieldTOS        CP#13
  Push                 r3
  Push                 r0
  StoreFieldTOS        CP#1
  PopLocal             r2
  Push                 r2
  StoreLocal           r3
  Push                 r3
  UncheckedClosureCall CP#15, 1
  Drop1
  PushNull
  ReturnTOS
}

Closure #lib::D::bar::Closure/0::'inner' () -> dart:core::Null
ClosureCode {
  EntryFixed           1, 2
  Push                 FP[-5]
  LoadFieldTOS         CP#1
  PopLocal             r0
  CheckStack           0
  PushNull
  ReturnTOS
}


}
]library #lib from "#lib" as #lib {

  typedef IntFunc = (dart.core::int*) →* dynamic;
  class C1 extends dart.core::Object {
    synthetic constructor •() → #lib::C1*
      : super dart.core::Object::•()
      ;
  }
  class C2 extends dart.core::Object {
    synthetic constructor •() → #lib::C2*
      : super dart.core::Object::•()
      ;
  }
  class C3 extends dart.core::Object {
    synthetic constructor •() → #lib::C3*
      : super dart.core::Object::•()
      ;
  }
  class C4 extends dart.core::Object {
    synthetic constructor •() → #lib::C4*
      : super dart.core::Object::•()
      ;
  }
  class C5 extends dart.core::Object {
    synthetic constructor •() → #lib::C5*
      : super dart.core::Object::•()
      ;
  }
  class C6 extends dart.core::Object {
    synthetic constructor •() → #lib::C6*
      : super dart.core::Object::•()
      ;
  }
  class C7 extends dart.core::Object {
    synthetic constructor •() → #lib::C7*
      : super dart.core::Object::•()
      ;
  }
  class C8 extends dart.core::Object {
    synthetic constructor •() → #lib::C8*
      : super dart.core::Object::•()
      ;
  }
  class A<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic> extends dart.core::Object {
    synthetic constructor •() → #lib::A<#lib::A::T1*, #lib::A::T2*>*
      : super dart.core::Object::•()
      ;
    method foo<T3 extends dart.core::Object* = dynamic, T4 extends dart.core::Object* = dynamic>() → void {
      function nested1<T5 extends dart.core::Object* = dynamic, T6 extends dart.core::Object* = dynamic>() → void {
        function nested2<T7 extends dart.core::Object* = dynamic, T8 extends dart.core::Object* = dynamic>() → void {
          () →* dart.core::Null? nested3 = () → dart.core::Null? {
            dart.core::print(<dart.core::Type*>[#lib::A::T1*, #lib::A::T2*, #lib::A::foo::T3*, #lib::A::foo::T4*, T5*, T6*, T7*, T8*]);
            #lib::callWithArgs<#lib::A::T1*, #lib::A::T2*, #lib::A::foo::T3*, #lib::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<#lib::C7*, #lib::C8*>();
        [@vm.call-site-attributes.metadata=receiverType:<T7 extends dart.core::Object* = dynamic, T8 extends dart.core::Object* = dynamic>() →* void] nested2.call<dart.core::List<#lib::C7*>*, dart.core::List<#lib::C8*>*>();
      }
      [@vm.call-site-attributes.metadata=receiverType:<T5 extends dart.core::Object* = dynamic, T6 extends dart.core::Object* = dynamic>() →* void] nested1.call<#lib::C5*, #lib::C6*>();
      [@vm.call-site-attributes.metadata=receiverType:<T5 extends dart.core::Object* = dynamic, T6 extends dart.core::Object* = dynamic>() →* void] nested1.call<dart.core::List<#lib::C5*>*, dart.core::List<#lib::C6*>*>();
    }
  }
  class B extends dart.core::Object {
    field dart.core::int* foo = null;
    synthetic constructor •() → #lib::B*
      : super dart.core::Object::•()
      ;
    method topLevel() → void {
      {
        dart.core::int* x = 1;
        {
          dart.core::int* y = 2;
          dart.core::int* z = 3;
          (dart.core::int*) →* dart.core::Null? closure1 = (dart.core::int* y) → dart.core::Null? {
            x = y.{dart.core::num::+}(1);
            if(x.{dart.core::num::>}(5)) {
              dart.core::int* w = 4;
              function closure2() → void {
                z = x.{dart.core::num::+}(2);
                w = this.{#lib::B::foo}.{dart.core::num::+}(y);
              }
              [@vm.call-site-attributes.metadata=receiverType:() →* void] closure2.call();
              dart.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);
          dart.core::print(y);
          dart.core::print(z);
        }
        dart.core::print(x);
      }
      {
        dart.core::int* x = 42;
        () →* dart.core::Null? closure3 = () → dart.core::Null? {
          this.{#lib::B::foo} = x;
        };
        [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::Null?] closure3.call();
      }
    }
  }
  class C extends dart.core::Object {
    synthetic constructor •() → #lib::C*
      : super dart.core::Object::•()
      ;
    method testForLoop() → void {
      dart.core::int* delta = 0;
      dart.core::List<dart.core::Function*>* getI = <dart.core::Function*>[];
      dart.core::List<dart.core::Function*>* setI = <dart.core::Function*>[];
      for (dart.core::int* i = 0; i.{dart.core::num::<}(10); i = i.{dart.core::num::+}(1)) {
        [@vm.call-site-attributes.metadata=receiverType:dart.core::List<dart.core::Function*>*] getI.{dart.core::List::add}(() → dart.core::int* => i.{dart.core::num::+}(delta));
        [@vm.call-site-attributes.metadata=receiverType:dart.core::List<dart.core::Function*>*] setI.{dart.core::List::add}((dart.core::int* ii) → dart.core::Null? {
          i = ii.{dart.core::num::+}(delta);
        });
      }
    }
    method testForInLoop(dart.core::List<dart.core::int*>* list) → void {
      for (dart.core::int* i in list) {
        () →* dart.core::Null? inc = () → dart.core::Null? {
          i = i.{dart.core::num::+}(1);
        };
        [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::Null?] inc.call();
        dart.core::print(i);
      }
    }
  }
  class D<T extends dart.core::Object* = dynamic> extends dart.core::Object {
    synthetic constructor •() → #lib::D<#lib::D::T*>*
      : super dart.core::Object::•()
      ;
    method foo(generic-covariant-impl #lib::D::T* t) → dynamic {
      return () → #lib::D::T* => t;
    }
    method bar() → dynamic {
      return () → dart.core::Null? {
        function inner() → dart.core::Null? {}
        [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::Null?] inner.call();
      };
    }
  }
  static method simpleClosure() → dart.core::int* {
    dart.core::int* x = 5;
    (dart.core::int*) →* dart.core::Null? inc = (dart.core::int* y) → dart.core::Null? {
      x = x.{dart.core::num::+}(y);
    };
    [@vm.call-site-attributes.metadata=receiverType:(dart.core::int*) →* dart.core::Null?] inc.call(3);
    return x;
  }
  static method callWithArgs<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic, T3 extends dart.core::Object* = dynamic, T4 extends dart.core::Object* = dynamic, T5 extends dart.core::Object* = dynamic, T6 extends dart.core::Object* = dynamic, T7 extends dart.core::Object* = dynamic, T8 extends dart.core::Object* = dynamic>() → void {
    dart.core::print(<dart.core::Type*>[#lib::callWithArgs::T1*, #lib::callWithArgs::T2*, #lib::callWithArgs::T3*, #lib::callWithArgs::T4*, #lib::callWithArgs::T5*, #lib::callWithArgs::T6*, #lib::callWithArgs::T7*, #lib::callWithArgs::T8*]);
  }
  static method callA() → void {
    new #lib::A::•<#lib::C1*, #lib::C2*>().{#lib::A::foo}<#lib::C3*, #lib::C4*>();
    new #lib::A::•<#lib::C1*, #lib::C2*>().{#lib::A::foo}<dart.core::List<#lib::C3*>*, dart.core::List<#lib::C4*>*>();
    new #lib::A::•<dart.core::List<#lib::C1*>*, dart.core::List<#lib::C2*>*>().{#lib::A::foo}<dart.core::List<#lib::C3*>*, dart.core::List<#lib::C4*>*>();
  }
  static method testPartialInstantiation() → (dart.core::int*) →* dynamic {
    function foo<T extends dart.core::Object* = dynamic>(T* t) → void {}
    (dart.core::int*) →* dynamic intFunc = foo<dart.core::int*>;
    return intFunc;
  }
  static method main() → dynamic {}
}
