(defn supers
"Returns the immediate and indirect superclasses and interfaces of c, if any"
{:added "1.0"
:static true}
[^Class class]
(loop [ret (set (bases class)) cs ret]
(if (seq cs)
(let [c (first cs) bs (bases c)]
(recur (into1 ret bs) (into1 (disj cs c) bs)))
(not-empty ret))))