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 {}
