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

typedef F<T extends core::Object = dynamic> = (T) → dynamic;
class C<T extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → void
    ;
  method f(self::C::T x) → void
    ;
  method g1(self::C::T x) → void
    ;
  method g2(self::C::T x) → void
    ;
  method g3(self::C<self::C::T> c, self::C::T x) → void
    ;
  method g4() → (self::C::T) → dynamic
    ;
}
class D extends self::C<core::int> {
  synthetic constructor •() → void
    ;
}
class E extends self::C<core::num> {
  synthetic constructor •() → void
    ;
  method f(covariant core::int x) → void
    ;
}
static method test() → dynamic
  ;
static method main() → dynamic
  ;
