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

abstract class A extends core::Object {
  synthetic constructor •() → self::A*
    ;
  abstract set x(core::int* value) → void;
}
class B extends core::Object {
  synthetic constructor •() → self::B*
    ;
  set x(core::int* value) → void
    ;
}
class C extends self::A {
  field core::int* x;
  synthetic constructor •() → self::C*
    ;
}
class D extends self::B {
  field core::int* x;
  synthetic constructor •() → self::D*
    ;
}
class E extends core::Object implements self::A {
  field core::int* x;
  synthetic constructor •() → self::E*
    ;
}
class F extends core::Object implements self::B {
  field core::int* x;
  synthetic constructor •() → self::F*
    ;
}
abstract class _G&Object&B = core::Object with self::B /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_G&Object&B*
    : super core::Object::•()
    ;
}
class G extends self::_G&Object&B {
  field core::int* x;
  synthetic constructor •() → self::G*
    ;
}
static method main() → dynamic
  ;
