 ;; CLJS-3003
 (core/defn- add-ifn-methods [type type-sym [f & meths :as form]]
   (core/let [this-sym (with-meta 'self__ {:tag type})
-             argsym   (gensym "args")
+             argsym (gensym "args")
 
              ;; we are emulating JS .call where the first argument will become this inside the fn
              ;; but this is not actually what we want when emulating IFn since we need "this"

             (core/true? default)
             (core/false? default)) "a string, number or boolean as default value")
  (core/let [defname (comp/munge (core/str *ns* "/" sym))
             type    (core/cond
                       (core/string? default) "string"
                       (core/number? default) "number"
                       (core/or (core/true? default) (core/false? default)) "boolean")]

    `(def ~(core/vary-meta sym
             (core/fn [m]

        ;; this means the variadic-invoke (if fn? ... stuff below will do all the work
        ;; but proto? will supersede it. should probably look into skipping those parts
        protocol (:protocol info)
        tag (ana/infer-tag env (first (:args expr)))
        proto? (and protocol tag
                    (or (and ana/*cljs-static-fns* protocol (= tag 'not-native))
                        (and
