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

typedef F = () →* void;
class C extends core::Object {
  synthetic constructor •() → self::C*
    : super core::Object::•()
    ;
  method f() → void {}
  get g() → () →* void
    return null;
  get h() → dynamic
    return null;
  method test() → void {
    this.{self::C::f}();
    this.{self::C::f}();
    this.{self::C::g}.call();
    this.{self::C::g}.call();
    this.{self::C::h}.call();
    this.{self::C::h}.call();
  }
}
static method test(self::C* c, () →* void f, dynamic d) → void {
  c.{self::C::f}();
  f.call();
  d.call();
  d.f();
  c.{self::C::g}.call();
  c.{self::C::h}.call();
}
static method main() → dynamic {}
