library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  method foo(core::num n) → core::num {
    core::print(n.{core::Object::runtimeType}{core::Type});
    return 1.1;
  }
}
abstract class B<X extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::B<self::B::X%>
    : super core::Object::•()
    ;
  abstract method foo(covariant-by-class self::B::X% x) → self::B::X%;
}
abstract class _C&A&B = self::A with self::B<core::num> /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_C&A&B
    : super self::A::•()
    ;
  forwarding-stub method foo(covariant-by-class core::num x) → core::num
    return super.{self::A::foo}(x);
}
class C extends self::_C&A&B {
  synthetic constructor •() → self::C
    : super self::_C&A&B::•()
    ;
}
static method main() → void {
  self::B<core::Object> b = new self::C::•();
  try {
    b.{self::B::foo}(true){(core::Object) → core::Object};
  }
  on core::Object catch(final core::Object e) {
    core::print(e);
    return;
  }
  throw "Missing type error";
}
