       (cond (util/macro? head) (xpand-macro head
                                             (xpand* (macroexpand form) path)
                                             path')
-            (= 'if head) (xpand-if (xpand** form path')
+            (= 'if head) (xpand-if (xpand** form path')  ;; TODO the rest of the special forms
                                    path')
             (special-symbol? head) (xpand** form path')
             :else (xpand-fn head

                            path')))
    form))

(defn xpand
  [form]
  (let [expr-map (mk-expr-mapping form)]
    `(let [~'$$ [(atom []) '~expr-map]
           ~'$return ~(xpand* form)]
       (record-trace-tree ~'$$)
       ~'$return)))


(defn tree1->trace-tree
  [tree parent src-map]
  (let [{:keys [form return children tags fn-meta path]} tree
        trace-tree (if (-> tags
                           first
                           #{:fn})
