library #lib;
import self as self;
import "dart:core" as core;

class A<T extends core::Object = dynamic> extends core::Object {
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack
  Push                 FP[-5]
  PushConstant         CP#1
  IndirectStaticCall   1, CP#0
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ArgDesc num-args 1, num-type-args 0, names []
  [1] = StaticICData target 'dart.core::Object::', arg-desc CP#0
}
]  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class B extends self::A<core::String> {
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack
  Push                 FP[-5]
  PushConstant         CP#1
  IndirectStaticCall   1, CP#0
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ArgDesc num-args 1, num-type-args 0, names []
  [1] = StaticICData target '#lib::A::', arg-desc CP#0
}
]  synthetic constructor •() → void
    : super self::A::•()
    ;
}
class C<T1 extends core::Object = dynamic, T2 extends core::Object = dynamic, T3 extends core::Object = dynamic> extends self::B {
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack
  Push                 FP[-5]
  PushConstant         CP#1
  IndirectStaticCall   1, CP#0
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ArgDesc num-args 1, num-type-args 0, names []
  [1] = StaticICData target '#lib::B::', arg-desc CP#0
}
]  synthetic constructor •() → void
    : super self::B::•()
    ;
}
class D<P extends core::Object = dynamic, Q extends core::Object = dynamic> extends self::C<core::int, self::D::Q, self::D::P> {
  generic-covariant-impl field core::Map<self::D::P, self::D::Q> foo;
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack
  Push                 FP[-6]
  Push                 FP[-5]
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  PushConstant         CP#1
  PushConstant         CP#2
  AssertAssignable     0, CP#3
  StoreFieldTOS        CP#4
  Push                 FP[-6]
  PushConstant         CP#7
  IndirectStaticCall   1, CP#6
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = TypeArgumentsField #lib::D
  [1] = Type dart.core::Map<#lib::D::P, #lib::D::Q>
  [2] = String ''
  [3] = SubtypeTestCache
  [4] = InstanceField #lib::D::foo
  [5] = Reserved
  [6] = ArgDesc num-args 1, num-type-args 0, names []
  [7] = StaticICData target '#lib::C::', arg-desc CP#6
}
]  constructor •(dynamic tt) → void
    : self::D::foo = tt as{TypeError} core::Map<self::D::P, self::D::Q>, super self::C::•()
    ;
[@vm.bytecode=
Bytecode {
  Entry                1
  CheckStack
  Push                 FP[-5]
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  PushConstant         CP#1
  InstanceCall         4, CP#3
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L1
  PushConstant         CP#4
  PushConstant         CP#6
  IndirectStaticCall   1, CP#5
  Drop1
L1:
  Push                 FP[-5]
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  PushConstant         CP#7
  InstanceCall         4, CP#8
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L2
  PushConstant         CP#9
  PushConstant         CP#10
  IndirectStaticCall   1, CP#5
  Drop1
L2:
  Push                 FP[-6]
  Push                 FP[-5]
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  PushConstant         CP#11
  PushConstant         CP#12
  AssertAssignable     0, CP#13
  InstanceCall         2, CP#15
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = TypeArgumentsField #lib::D
  [1] = Type #lib::A<#lib::D::P>
  [2] = ArgDesc num-args 4, num-type-args 0, names []
  [3] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#2
  [4] = String '21'
  [5] = ArgDesc num-args 1, num-type-args 0, names []
  [6] = StaticICData target 'dart.core::print', arg-desc CP#5
  [7] = Type #lib::C<dynamic, #lib::D::Q, dart.core::List<#lib::D::P>>
  [8] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#2
  [9] = String '22'
  [10] = StaticICData target 'dart.core::print', arg-desc CP#5
  [11] = Type dart.core::Map<#lib::D::P, #lib::D::Q>
  [12] = String ''
  [13] = SubtypeTestCache
  [14] = ArgDesc num-args 2, num-type-args 0, names []
  [15] = ICData set target-name 'foo', arg-desc CP#14
}
]  method foo2(dynamic y) → dynamic {
    if(y is self::A<self::D::P>) {
      core::print("21");
    }
    if(y is self::C<dynamic, self::D::Q, core::List<self::D::P>>) {
      core::print("22");
    }
    [@vm.call-site-attributes.metadata=receiverType:#lib::D<#lib::D::P, #lib::D::Q>] this.{self::D::foo} = y as{TypeError} core::Map<self::D::P, self::D::Q>;
  }
[@vm.bytecode=
Bytecode {
  Entry                1
  CheckStack
  CheckFunctionTypeArgs 2, 0
  Push                 FP[-5]
  PushNull
  Push                 r0
  PushConstant         CP#0
  InstanceCall         4, CP#2
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L1
  PushConstant         CP#3
  PushConstant         CP#5
  IndirectStaticCall   1, CP#4
  Drop1
L1:
  Push                 FP[-5]
  Push                 FP[-6]
  LoadTypeArgumentsField CP#6
  Push                 r0
  PushConstant         CP#7
  InstanceCall         4, CP#8
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L2
  PushConstant         CP#9
  PushConstant         CP#10
  IndirectStaticCall   1, CP#4
  Drop1
L2:
  Push                 FP[-5]
  Push                 FP[-6]
  LoadTypeArgumentsField CP#6
  Push                 r0
  PushConstant         CP#11
  InstanceCall         4, CP#12
  InstanceCall         1, CP#13
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = Type #lib::A<#lib::D::foo3::T1>
  [1] = ArgDesc num-args 4, num-type-args 0, names []
  [2] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#1
  [3] = String '31'
  [4] = ArgDesc num-args 1, num-type-args 0, names []
  [5] = StaticICData target 'dart.core::print', arg-desc CP#4
  [6] = TypeArgumentsField #lib::D
  [7] = Type #lib::C<dart.core::Map<#lib::D::foo3::T1, #lib::D::P>, dart.core::List<#lib::D::foo3::T2>, #lib::D::Q>
  [8] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#1
  [9] = String '32'
  [10] = StaticICData target 'dart.core::print', arg-desc CP#4
  [11] = Type dart.core::Map<#lib::D::foo3::T2, #lib::D::Q>
  [12] = ICData target-name 'dart.core::_as', arg-desc CP#1
  [13] = ICData get target-name 'values', arg-desc CP#4
}
]  method foo3<T1 extends core::Object = dynamic, T2 extends core::Object = dynamic>(dynamic z) → dynamic {
    if(z is self::A<self::D::foo3::T1>) {
      core::print("31");
    }
    if(z is self::C<core::Map<self::D::foo3::T1, self::D::P>, core::List<self::D::foo3::T2>, self::D::Q>) {
      core::print("32");
    }
    return (z as core::Map<self::D::foo3::T2, self::D::Q>).{core::Map::values};
  }
[@vm.bytecode=
Bytecode {
  Entry                2
  CheckStack
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  InstantiateTypeArgumentsTOS 0, CP#1
  StoreLocal           r1
  Push                 r1
  PushInt              1
  CreateArrayTOS
  StoreLocal           r1
  Push                 r1
  PushInt              0
  Push                 FP[-5]
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  PushConstant         CP#2
  PushConstant         CP#3
  AssertAssignable     0, CP#4
  StoreIndexedTOS
  PushConstant         CP#6
  IndirectStaticCall   2, CP#5
  PopLocal             r0
  Push                 FP[-5]
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  PushConstant         CP#2
  PushConstant         CP#3
  AssertAssignable     0, CP#7
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = TypeArgumentsField #lib::D
  [1] = TypeArgs [dart.core::Map<#lib::D::P, #lib::D::Q>]
  [2] = Type dart.core::Map<#lib::D::P, #lib::D::Q>
  [3] = String ''
  [4] = SubtypeTestCache
  [5] = ArgDesc num-args 2, num-type-args 0, names []
  [6] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#5
  [7] = SubtypeTestCache
}
]  method foo4(dynamic w) → core::Map<self::D::P, self::D::Q> {
    core::List<core::Map<self::D::P, self::D::Q>> list = <core::Map<self::D::P, self::D::Q>>[w as{TypeError} core::Map<self::D::P, self::D::Q>];
    return w as{TypeError} core::Map<self::D::P, self::D::Q>;
  }
}
class E<P extends core::String = core::String> extends core::Object {
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack
  PushNull
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
}
]  static factory •<P extends core::String = dynamic>() → self::E<self::E::•::P>
    return null;
[@vm.bytecode=
Bytecode {
  Entry                1
  CheckStack
  CheckFunctionTypeArgs 2, 0
  JumpIfNotZeroTypeArgs L1
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  PushNull
  InstantiateTypeArgumentsTOS 0, CP#1
  PopLocal             r0
L1:
  Push                 FP[-6]
  LoadTypeArgumentsField CP#0
  Push                 r0
  PushConstant         CP#2
  PushConstant         CP#3
  PushConstant         CP#4
  AssertSubtype
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = TypeArgumentsField #lib::E
  [1] = TypeArgs [#lib::E::P, dart.core::List<#lib::E::P>]
  [2] = Type #lib::E::foo6::T
  [3] = Type #lib::E::P
  [4] = String 'T'
}
]  method foo6<generic-covariant-impl T extends self::E::P = self::E::P, U extends core::List<self::E::foo6::T> = core::List<self::E::P>>(core::Map<self::E::foo6::T, self::E::foo6::U> map) → void {}
}
static field core::List<core::Iterable<dynamic>> globalVar;
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack
  Push                 FP[-5]
  PushNull
  PushNull
  PushConstant         CP#0
  InstanceCall         4, CP#2
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L1
  PushConstant         CP#3
  PushConstant         CP#5
  IndirectStaticCall   1, CP#4
  Drop1
L1:
  Push                 FP[-5]
  PushNull
  PushNull
  PushConstant         CP#6
  InstanceCall         4, CP#7
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L2
  PushConstant         CP#8
  PushConstant         CP#9
  IndirectStaticCall   1, CP#4
  Drop1
L2:
  Push                 FP[-5]
  PushNull
  PushNull
  PushConstant         CP#10
  InstanceCall         4, CP#11
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = Type #lib::B
  [1] = ArgDesc num-args 4, num-type-args 0, names []
  [2] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#1
  [3] = String '11'
  [4] = ArgDesc num-args 1, num-type-args 0, names []
  [5] = StaticICData target 'dart.core::print', arg-desc CP#4
  [6] = Type #lib::C<dart.core::int, dart.core::Object, dynamic>
  [7] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#1
  [8] = String '12'
  [9] = StaticICData target 'dart.core::print', arg-desc CP#4
  [10] = Type #lib::A<dart.core::int>
  [11] = ICData target-name 'dart.core::_as', arg-desc CP#1
}
]static method foo1(dynamic x) → dynamic {
  if(x is self::B) {
    core::print("11");
  }
  if(x is self::C<core::int, core::Object, dynamic>) {
    core::print("12");
  }
  return x as self::A<core::int>;
}
[@vm.bytecode=
Bytecode {
  Entry                1
  CheckStack
  Push                 FP[-5]
  PushNull
  PushNull
  PushConstant         CP#0
  PushConstant         CP#1
  AssertAssignable     0, CP#2
  StoreStaticTOS       CP#3
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = Type dart.core::List<dart.core::Iterable<dynamic>>
  [1] = String ''
  [2] = SubtypeTestCache
  [3] = StaticField #lib::globalVar
}
]static method foo5(dynamic x) → void {
  self::globalVar = x as{TypeError} core::List<core::Iterable<dynamic>>;
}
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack
  PushNull
  ReturnTOS
}
ConstantPool {
}
]static method main() → dynamic {}
