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

class A extends core::Object {
  synthetic constructor •() → self::A*
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B*
    : 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 •() → self::C*
    : 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 {}
