class A extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class C<T extends mix::A> extends core::Object {
  generic-covariant-impl generic-covariant-interface field mix::C::T _field = null;
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method foo(generic-covariant-impl generic-covariant-interface mix::C::T x) → dynamic {
    this.{mix::C::_field} = x;
  }
}
class D extends mix::C<mix::B> {
  synthetic constructor •() → void
    : super mix::C::•()
    ;
  abstract forwarding-stub method foo(generic-covariant-impl mix::B x) → dynamic;
  abstract forwarding-stub set _field(generic-covariant-impl mix::B _) → void;
}
abstract class _Foo&Object&C extends core::Object implements mix::C<mix::B> {
  generic-covariant-impl field mix::B _field = null;
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method foo(generic-covariant-impl mix::B x) → dynamic {
    this.{mix::C::_field} = x;
  }
}
class Foo extends mix::_Foo&Object&C {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  abstract forwarding-stub set _field(generic-covariant-impl mix::B _) → void;
}
class B extends mix::A {
  synthetic constructor •() → void
    : super mix::A::•()
    ;
}
static method main() → dynamic {
  mix::Foo foo = new mix::Foo::•();
  foo.{mix::C::foo}(new mix::B::•());
}
