    (match (seq form)
      nil form
      
-     (['quote val] :seq) val
+     (['quote val] :seq) (list 'quote val)
 
      (['lambda params & body] :seq)
      (let [lambda-env (extend-env env params)]

(defmethod emit-dup clojure.lang.Seqable
  [gen ^clojure.lang.Seqable lis]
  (println "emit-dup list" lis)
  (. gen push (count lis))
  (. gen newArray object-type)
  (dotimes [n (count lis)]
    (. gen dup)
    (AsmUtil/pushInt gen n)
    (emit-value :context/expression gen (nth lis n))
    (. gen arrayStore object-type))
  (. gen invokeStatic (asmtype java.util.Arrays) (Method/getMethod "java.util.List asList(Object[])"))
  (. gen invokeStatic (asmtype clojure.lang.PersistentList) (Method/getMethod "clojure.lang.IPersistentList create(java.util.List)")))


    (. gen returnValue)
    (. gen endMethod)))

(def ^:dynamic *compiled-lambdas*)
(defn compile
  "Compiles a given sanitized lambda form. If the input is not already
  sanitized, the results are undefined!

  Returns a vector of [<class name>, <closed-overs>, <bytecode>]"
  [[_ params & body :as lambda]]
  (when-not (get @*compiled-lambdas* lambda)
    (println "Compiling:" lambda)
    (let [fv (vec (free-vars lambda))
          cw (ClassWriter. ClassWriter/COMPUTE_FRAMES)
          lname (str "lambda_" (next-id))
          fqname (str "cljstatic/scheme2/" lname)
          _ (println "fqname:" fqname)
          dotname (.replace fqname "/" ".")
          ifaces (into-array String ["cljstatic/ILambda"])
          env {:params params, :closed-overs fv, :locals {} :thistype (Type/getObjectType fqname)}]
      (. cw visit Opcodes/V1_7 Opcodes/ACC_PUBLIC fqname nil "java/lang/Object" ifaces)
      (gen-closure-fields cw fv)
      (gen-ctor cw fqname fv)
      (gen-body cw env body)
      (gen-handle cw fqname (count params))
      (swap! *compiled-lambdas* conj lambda)
      [dotname fv (.toByteArray cw)])))

(defn emit
  [env context gen form]
