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

class A extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → void
    : super self::A::•()
    ;
  operator +(self::C v) → self::A
    return null;
  operator -(core::int i) → self::B
    return null;
  operator *(self::B v) → self::B
    return null;
  operator &(self::A v) → self::C
    return null;
}
class C extends self::B {
  synthetic constructor •() → void
    : super self::B::•()
    ;
}
static method f<T extends core::Object = dynamic>() → self::f::T
  return null;
static method test() → void {
  self::B local;
  local = self::f<dynamic>();
  local.==(null) ? local = self::f<dynamic>() : null;
  local = local.+(self::f<dynamic>());
  local = local.*(self::f<dynamic>());
  local = local.&(self::f<dynamic>());
  local = local.-(1);
  local = local.-(1);
  dynamic v1 = local = self::f<dynamic>();
  dynamic v2 = let final dynamic #t1 = local in #t1.==(null) ? local = self::f<dynamic>() : #t1;
  dynamic v4 = local = local.*(self::f<dynamic>());
  dynamic v5 = local = local.&(self::f<dynamic>());
  dynamic v6 = local = local.-(1);
  dynamic v7 = let final dynamic #t2 = local in let final dynamic #t3 = local = #t2.-(1) in #t2;
}
static method main() → dynamic {}
