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

class C<T extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::T*>*
    : super core::Object::•()
    ;
  method f1(generic-covariant-impl core::List<self::C::T*>* x) → void {}
  method f2(generic-covariant-impl () →* self::C::T* callback) → void {}
  method f3(generic-covariant-impl (self::C::T*) →* self::C::T* callback) → void {}
  method f4((self::C::T*) →* void callback) → void {}
}
static method g1(self::C<core::num*>* c, core::List<core::num*>* l) → void {
  c.f1(l);
}
static method g2(self::C<core::num*>* c, () →* core::num* callback) → void {
  c.f2(callback);
}
static method g3(self::C<core::num*>* c, (core::num*) →* core::num* callback) → void {
  c.f3(callback);
}
static method g4(self::C<core::num*>* c, (core::num*) →* void callback) → void {
  c.f4(callback);
}
static method main() → dynamic {}
