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

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

constants  {
  #C1 = tearoff self::f
  #C2 = tearoff self::C::g
}
