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

class C extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method f<T extends core::Object>(self::C::f::T x) → self::C::f::T
    return x;
  static method g<T extends core::Object>(self::C::g::T x) → self::C::g::T
    return x;
}
class D extends self::C {
  synthetic constructor •() → void
    : super self::C::•()
    ;
  method test() → void {
    (core::int) → core::int func;
    func = super.{self::C::f}<core::int>;
  }
}
static method f<T extends core::Object>(self::f::T x) → self::f::T
  return x;
static method test() → void {
  function h<T extends core::Object>(T x) → T
    return x;
  (core::int) → core::int func;
  func = self::f<core::int>;
  func = new self::C::•().{self::C::f}<core::int>;
  func = self::C::g<core::int>;
  func = h<core::int>;
}
static method main() → dynamic {}
