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

class A extends core::Object {
  synthetic constructor •() → self::A*
    ;
  method foo(covariant core::num* x) → void
    ;
}
class B extends core::Object {
  synthetic constructor •() → self::B*
    ;
  method foo(core::num* x) → void
    ;
}
class C extends core::Object {
  synthetic constructor •() → self::C*
    ;
  method foo(core::num* x) → void
    ;
}
abstract class _D&A&B = self::A with self::B {
  synthetic constructor •() → self::_D&A&B*
    : super self::A::•()
    ;
  forwarding-stub method foo(covariant core::num* x) → void
    return super.{self::A::foo}(x);
}
class D extends self::_D&A&B implements self::C {
  synthetic constructor •() → self::D*
    ;
  method foo(covariant core::int* x) → void
    ;
}
static method main() → dynamic
  ;
