        :methods pmethods
        :type "protocol"})))
 
+(defn valid-protocol? [form]
+  (and (symbol? form) (not= form 'Object)))
+
 (defn parse-deftype
   [form]
   (when (not= *cur-ns* "cljs.pprint") ;; ignore custom deftypes here

        types (filter symbol? (drop 2 form))]
    {:type-extension
     {:protocols #{(str protocol)}
      :types (set (map str types))}}))

(defn parse-extend-type [form]
  (let [type (second form)
        protocols (filter symbol? (drop 2 form))]
    {:type-extension
     {:types #{(str type)}
      :protocols (set (map str protocols))}}))

(defn parse-defmulti

          form (drop 2 form)
          signature (first form)
          protocols (->> (drop 1 form)
                         (filter valid-protocol?)
                         (map str)
                         (set))]
      (when (or *parse-private-defs?*
