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
  ;
