             (reduce into (sorted-set) (map #(free-vars (second %)) bindings))
             (map first bindings))
 
+     (['define name & val] :seq)
+     (disj (free-vars val) name)
+
      :else
      (reduce into (sorted-set) (map free-vars form)))
 
-   (and (symbol? form) (not (contains? specials form)))
+   (and (symbol? form)
+        (not (contains? specials form))
+        (not (contains? @global-bindings form))
+        (not (maybe-class form)))
    (sorted-set form)
 
    :else


(defmethod emit-seq -invoke-
  [env context gen [fun & args :as call]]
  (debug "emitting invoke:" call)
  (debug "context:" context)


(defmethod emit-dup :default
  [_ obj]
  (throw (IllegalArgumentException. (str "cannot emit-dup of " obj))))

(defmethod emit-dup Class
  [gen ^Class class]
  (debug "emit-dup class" class)
  (. gen push (asmtype class)))

(defmethod emit-dup Integer
  [gen ^Integer int]
