     (let [options   (apply core/hash-map options)
           default   (core/get options :default :default)]
       (check-valid-options options :default :hierarchy)
-      `(def ~(with-meta mm-name m)
+      `(defonce ~(with-meta mm-name m)
          (let [method-table# (atom {})
                prefer-table# (atom {})
                method-cache# (atom {})

            `[(symbol ~(name sym)) (var ~(symbol (name ns) (name sym)))])
          (get-in @env/*compiler* [:cljs.analyzer/namespaces ns :defs]))]))

(defmacro vswap!
  "Non-atomically swaps the value of the volatile as if:
   (apply f current-value-of-vol args). Returns the value that


                            cond-> cond->> as-> some-> some->>

                            if-some when-some test ns-interns ns-unmap var vswap! macroexpand-1 macroexpand])
  (:require clojure.walk
            clojure.set
            cljs.compiler
