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

class B<T extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method f(generic-covariant-impl self::B::T x) → void {}
  method g({generic-covariant-impl self::B::T x = null}) → void {}
  method h<generic-covariant-impl U extends self::B::T = self::B::T>() → void {}
}
class C extends self::B<core::int> {
  synthetic constructor •() → void
    : super self::B::•()
    ;
}
static method g1(self::B<core::num> b) → void {
  b.{self::B::f}(1.5);
}
static method g2(self::C c) → void {
  c.{self::B::f}(1);
}
static method test() → void {
  self::g1(new self::C::•());
}
static method main() → void {}
