library test /*isNonNullableByDefault*/;
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::B
    return throw "";
  operator -(core::int i) → self::B
    return throw "";
  operator *(self::B v) → self::B
    return throw "";
  operator &(self::A v) → self::C
    return throw "";
}
class C extends self::B {
  synthetic constructor •() → self::C
    : super self::B::•()
    ;
}
static method f<T extends core::Object? = dynamic>() → self::f::T%
  return throw "";
static method test(self::B local, self::B? local2, self::B? local3) → void {
  local = self::f<self::B>();
  local2 == null ?{self::B?} local2 = self::f<self::B?>() : null;
  local = local.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
  local = local.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
  local = local.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
  local = local.{self::B::-}(1){(core::int) → self::B};
  local = local.{self::B::-}(1){(core::int) → self::B};
  self::B v1 = local = self::f<self::B>();
  self::B? v2 = let final self::B? #t1 = local3 in #t1 == null ?{self::B?} local3 = self::f<self::B?>() : #t1{self::B};
  self::B v3 = local = local.{self::B::+}(self::f<self::C>()){(self::C) → self::B};
  self::B v4 = local = local.{self::B::*}(self::f<self::B>()){(self::B) → self::B};
  self::C v5 = local = local.{self::B::&}(self::f<self::A>()){(self::A) → self::C};
  self::B v6 = local = local.{self::B::-}(1){(core::int) → self::B};
  self::B v7 = let final self::B #t2 = local in let final self::B #t3 = local = #t2.{self::B::-}(1){(core::int) → self::B} in #t2;
}
static method main() → dynamic {}
