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

typedef F<T extends core::Object = dynamic> = (T) → void;
typedef G<T extends core::Object = dynamic> = () → (T) → void;
class C<T extends core::Object = dynamic> extends core::Object {
  field (self::C::T) → void _x;
  constructor •((self::C::T) → void _x) → void
    : self::C::_x = _x, super core::Object::•()
    ;
  method f() → (self::C::T) → void
    return this.{self::C::_x};
}
static method g(self::C<core::num> c) → () → (core::num) → void {
  return c.f;
}
static method h(core::int i) → void {
  core::print("${i}");
}
static method test() → void {
  dynamic x = self::g(new self::C::•<core::int>(self::h));
}
static method main() → void {}
