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.{self::C::f1}(l);
}
static method g2(self::C<core::num*>* c, () →* core::num* callback) → void {
  c.{self::C::f2}(callback);
}
static method g3(self::C<core::num*>* c, (core::num*) →* core::num* callback) → void {
  c.{self::C::f3}(callback);
}
static method g4(self::C<core::num*>* c, (core::num*) →* void callback) → void {
  c.{self::C::f4}(callback);
}
static method main() → dynamic {}
