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

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