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

typedef F<T extends core::Object> = (T) → dynamic;
class C<T extends core::Object> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method f(generic-covariant-impl generic-covariant-interface self::C::T x) → void {}
  method g1(generic-covariant-impl generic-covariant-interface self::C::T x) → void {
    this.{self::C::f}(x);
  }
  method g2(generic-covariant-impl generic-covariant-interface self::C::T x) → void {
    this.{self::C::f}(x);
  }
  method g3(generic-covariant-impl generic-covariant-interface self::C<self::C::T> c, generic-covariant-impl generic-covariant-interface self::C::T x) → void {
    c.{self::C::f}(x);
  }
  generic-contravariant method g4() → (self::C::T) → dynamic
    return this.{self::C::f};
}
class D extends self::C<core::int> {
  synthetic constructor •() → void
    : super self::C::•()
    ;
  abstract forwarding-stub method f(generic-covariant-impl core::int x) → void;
  abstract forwarding-stub method g1(generic-covariant-impl core::int x) → void;
  abstract forwarding-stub method g2(generic-covariant-impl core::int x) → void;
  abstract forwarding-stub method g4() → (core::int) → dynamic;
  abstract forwarding-stub method g3(generic-covariant-impl self::C<core::int> c, generic-covariant-impl core::int x) → void;
}
class E extends self::C<core::num> {
  synthetic constructor •() → void
    : super self::C::•()
    ;
  method f(covariant generic-covariant-impl core::int x) → void {}
  abstract forwarding-stub method g1(generic-covariant-impl core::num x) → void;
  abstract forwarding-stub method g2(generic-covariant-impl core::num x) → void;
  abstract forwarding-stub method g4() → (core::num) → dynamic;
  abstract forwarding-stub method g3(generic-covariant-impl self::C<core::num> c, generic-covariant-impl core::num x) → void;
}
static method test() → dynamic {
  (core::Object) → dynamic x = new self::D::•().{self::D::g4}() as (core::Object) → dynamic;
  x.call("hi");
  new self::E::•().{self::E::g1}(1.5);
}
static method main() → dynamic {}
