        (list* 'let (map list bind-syms sani-binds) (map (partial sanitize let-env) body)))
 
      (['define name & val] :seq)
-     (let [sani-name (get @global-env name (sanitize-name name))]
-       (swap! global-env assoc name sani-name)
-       (list* 'define sani-name (map (partial sanitize (assoc env name sani-name)) val)))
+     (list* 'define name (map (partial sanitize env) val))
 
      :else
      (map (partial sanitize env) form))

  (when-not (get @*compiled-lambdas* lambda)
    (validate-params! params)
    (debug "Compiling:" lambda)
    (let [fv (vec (apply disj (free-vars lambda) (vals @global-env)))
          cw (ClassWriter. ClassWriter/COMPUTE_FRAMES)
          lname (str "lambda_" (next-id))
          fqname (str "wombat/" lname)

  (:require [clojure.core.match :refer [match]])
  (:import [org.objectweb.asm ClassWriter ClassVisitor Opcodes Type Handle]
           [org.objectweb.asm.commons GeneratorAdapter Method]
           [clojure.lang DynamicClassLoader Compiler RT LineNumberingPushbackReader]
           [java.lang.invoke MethodType MethodHandle MethodHandles MethodHandles$Lookup
            CallSite VolatileCallSite]
           [java.io FileReader]
           [wombat ILambda AsmUtil Global])
  (:refer-clojure :exclude [compile]))

(def ^:dynamic *class-loader* (DynamicClassLoader. (RT/baseLoader)))

(defn maybe-class
  [cname]
  (try
    (Class/forName (name cname) true *class-loader*)
    (catch ClassNotFoundException e)))

(def object-array-class (class (object-array 0)))

