               (tag-with done-tag [[:ldc 0] [:join]])
 
               (tag-with start-tag (compile-form fns xs))
-              [[:st 0 1 (format "; store %s" xs-sym)]
+              [(store-local xs-sym)
                [:ldc 0]
                [:sel (str "@" cond-tag) (str "@" cond-tag)]])))))
 


              (tag-with body-tag [(load-local xs-sym)])
              [[:car]
               [:st 0 0 (format "; store %s" x)]
               (load-local xs-sym)
               [:cdr]
               [:st 0 1 (format "; store %s" xs-sym)]]
              (compile-form fns body)

              (tag-with cond-tag [(load-local xs-sym)])

  (let [labeled (conj stmt (format "; #%s" label))]
    (vec (concat [labeled] stmts))))

(defn store-local
  [name]
  (let [cur-scope (first *scope*)
        index (.indexOf cur-scope name)]
    (if-not (neg? index)
      [:st 0 index (format "; store var %s" name)]
      (throw (IllegalArgumentException. (format "Tried to store to unknown scope var: %s" name))))))

(defn load-local
  [name]
  (loop [scope-stack  *scope*
