    :else
    form))
 
-(declare free-vars)
-(defn quasiquote-free-vars
-  [form]
-  (if (list-like? form)
-    (loop [f form
-           frees (sorted-set)]
-      (if (seq f)
-        (if (#{'unquote 'unquote-splicing} (first f))
-          (reduce into frees (map free-vars (rest f)))
-          (recur (next f) (into frees (quasiquote-free-vars (first f)))))
-        frees))
-    (sorted-set)))
-
 (defn free-vars
   "Returns a sorted-set of free symbols in the given form. Sorting is
   arbitrary, but consistent."

      #{'define 'define-macro} :>> (partial sanitize-define env)

      #{'define-class*} form

      #{'quasiquote} :>> (fn [[_ & forms]]
                           (list* 'quasiquote (map (partial sanitize-quasiquote env) forms)))

      #{:jvm} :>> (fn [[_ & insns]]
                    (list* :jvm (map (partial sanitize-jvm env) insns)))


(declare sanitize-jvm)

(defn sanitize-define
  [env [define name & val :as form]]
  (debug "sanitize-define: " form)
