Skip to content

Commit bc0cd45

Browse files
committed
make cljs.js/analyze more useful, return the last AST, fix some bugs
support providing custom passes
1 parent 3f54364 commit bc0cd45

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

src/main/cljs/cljs/js.cljs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -383,10 +383,11 @@
383383
the-ns (or (:ns opts) 'cljs.user)
384384
bound-vars (cond-> (merge bound-vars {:*cljs-ns* the-ns})
385385
(:source-map opts) (assoc :*sm-data* (sm-data)))]
386-
((fn analyze-loop []
386+
((fn analyze-loop [last-ast]
387387
(binding [env/*compiler* (:*compiler* bound-vars)
388388
ana/*cljs-ns* (:*cljs-ns* bound-vars)
389389
*ns* (create-ns (:*cljs-ns* bound-vars))
390+
ana/*passes* (:*passes* bound-vars)
390391
r/*data-readers* (:*data-readers* bound-vars)
391392
comp/*source-map-data* (:*sm-data* bound-vars)]
392393
(let [res (try
@@ -416,9 +417,9 @@
416417
(fn [res]
417418
(if (:error res)
418419
(cb res)
419-
(analyze-loop))))
420-
(recur)))))
421-
(cb {:value nil}))))))))))
420+
(analyze-loop ast))))
421+
(recur ast)))))
422+
(cb {:value last-ast}))))))) nil)))
422423

423424
(defn analyze
424425
"Analyze ClojureScript source. The compiler state will be populated with
@@ -454,6 +455,9 @@
454455
(analyze*
455456
{:*compiler* state
456457
:*data-readers* tags/*cljs-data-readers*
458+
:*passes* (or (:passes opts) ana/*passes*)
459+
:*analyze-deps* (or (:analyze-deps opts) true)
460+
:*load-macros* (or (:load-macros opts) true)
457461
:*load-fn* (or (:load opts) *load-fn*)
458462
:*eval-fn* (or (:eval opts) *eval-fn*)}
459463
source name opts cb)))
@@ -743,7 +747,8 @@
743747
source name opts cb)))
744748

745749
(comment
746-
(require '[cljs.js :as cljs])
750+
(require '[cljs.js :as cljs]
751+
'[cljs.analyzer :as ana])
747752

748753
(def vm (js/require "vm"))
749754
(def fs (js/require "fs"))
@@ -769,6 +774,15 @@
769774
(.error js/console err))))))
770775
(cb nil)))
771776

777+
(defn elide-env [env ast opts]
778+
(dissoc ast :env))
779+
780+
(cljs/analyze st "(+ 1 1)" nil
781+
{:passes [ana/infer-type elide-env]
782+
:eval cljs/js-eval}
783+
(fn [{:keys [value]}]
784+
(println value)))
785+
772786
(cljs/eval st '(defn foo [a b] (+ a b))
773787
{:eval cljs/js-eval}
774788
(fn [res]

0 commit comments

Comments
 (0)