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

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
class C<T extends self::A = dynamic> extends core::Object {
  field self::C::T _field = null;
  synthetic constructor •() → self::C<self::C::T>
    : super core::Object::•()
    ;
  method foo(self::C::T x) → dynamic {
    this.{self::C::_field} = x;
  }
}
class D extends self::C<self::B> {
  synthetic constructor •() → self::D
    : super self::C::•()
    ;
}
abstract class _Foo&Object&C = core::Object with self::C<self::B> {
  synthetic constructor •() → self::_Foo&Object&C
    : super core::Object::•()
    ;
}
class Foo extends self::_Foo&Object&C {
  synthetic constructor •() → self::Foo
    : super self::_Foo&Object&C::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
}
static method main() → dynamic {
  dynamic foo = new self::Foo::•();
  foo.foo(new self::B::•());
}
