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

typedef F<T extends core::Object> = (T) → void;
typedef G<T extends core::Object> = () → (T) → void;
class C<T extends core::Object> 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 {}
