From badffafde00a29f85e256906bd1ffb0c54a0786c Mon Sep 17 00:00:00 2001 From: David Nolen Date: Mon, 25 Nov 2013 18:46:18 -0500 Subject: [PATCH] new ns - cljs.analyzer.utils, make looking at the AST more fun --- src/clj/cljs/analyzer/utils.clj | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/clj/cljs/analyzer/utils.clj diff --git a/src/clj/cljs/analyzer/utils.clj b/src/clj/cljs/analyzer/utils.clj new file mode 100644 index 0000000000..8cac3fa56d --- /dev/null +++ b/src/clj/cljs/analyzer/utils.clj @@ -0,0 +1,26 @@ +(ns cljs.analyzer.utils + (:require [cljs.analyzer :as ana])) + +(defn simplify-env [_ {:keys [op] :as ast}] + (let [env (:env ast) + ast (if (= op :fn) + (assoc ast :methods + (map #(simplify-env nil %) (:methods ast))) + ast)] + (assoc (dissoc ast :env) + :env {:context (:context env)}))) + +(defn elide-children [_ ast] + (dissoc ast :children)) + +(defn to-ast + ([form] (to-ast 'cljs.user form)) + ([ns form] + (let [env (assoc-in (ana/empty-env) [:ns :name] ns)] + (binding [ana/*passes* [elide-children simplify-env ana/infer-type]] + (ana/analyze env form))))) + +(comment + (require '[clojure.pprint :as pp]) + (pp/pprint (to-ast '(defn foo [a b] (+ a b)))) +)