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 v3 = local = local.+(self::f<dynamic>());
  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 {}
