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

class A extends core::Object {
  default constructor •() → void
    ;
}
class B extends self::A {
  default constructor •() → void
    ;
  operator +(self::C v) → self::A
    ;
  operator -(core::int i) → self::B
    ;
  operator *(self::B v) → self::B
    ;
  operator &(self::A v) → self::C
    ;
}
class C extends self::B {
  default constructor •() → void
    ;
}
class Base extends core::Object {
  field self::B member;
  default constructor •() → void
    ;
}
class Test extends self::Base {
  default constructor •() → void
    ;
  method test() → void
    ;
}
static method f<T extends core::Object>() → self::f::T
  ;
static method main() → dynamic
  ;
