|
383 | 383 | the-ns (or (:ns opts) 'cljs.user)
|
384 | 384 | bound-vars (cond-> (merge bound-vars {:*cljs-ns* the-ns})
|
385 | 385 | (:source-map opts) (assoc :*sm-data* (sm-data)))]
|
386 |
| - ((fn analyze-loop [] |
| 386 | + ((fn analyze-loop [last-ast] |
387 | 387 | (binding [env/*compiler* (:*compiler* bound-vars)
|
388 | 388 | ana/*cljs-ns* (:*cljs-ns* bound-vars)
|
389 | 389 | *ns* (create-ns (:*cljs-ns* bound-vars))
|
| 390 | + ana/*passes* (:*passes* bound-vars) |
390 | 391 | r/*data-readers* (:*data-readers* bound-vars)
|
391 | 392 | comp/*source-map-data* (:*sm-data* bound-vars)]
|
392 | 393 | (let [res (try
|
|
416 | 417 | (fn [res]
|
417 | 418 | (if (:error res)
|
418 | 419 | (cb res)
|
419 |
| - (analyze-loop)))) |
420 |
| - (recur))))) |
421 |
| - (cb {:value nil})))))))))) |
| 420 | + (analyze-loop ast)))) |
| 421 | + (recur ast))))) |
| 422 | + (cb {:value last-ast}))))))) nil))) |
422 | 423 |
|
423 | 424 | (defn analyze
|
424 | 425 | "Analyze ClojureScript source. The compiler state will be populated with
|
|
454 | 455 | (analyze*
|
455 | 456 | {:*compiler* state
|
456 | 457 | :*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) |
457 | 461 | :*load-fn* (or (:load opts) *load-fn*)
|
458 | 462 | :*eval-fn* (or (:eval opts) *eval-fn*)}
|
459 | 463 | source name opts cb)))
|
|
743 | 747 | source name opts cb)))
|
744 | 748 |
|
745 | 749 | (comment
|
746 |
| - (require '[cljs.js :as cljs]) |
| 750 | + (require '[cljs.js :as cljs] |
| 751 | + '[cljs.analyzer :as ana]) |
747 | 752 |
|
748 | 753 | (def vm (js/require "vm"))
|
749 | 754 | (def fs (js/require "fs"))
|
|
769 | 774 | (.error js/console err))))))
|
770 | 775 | (cb nil)))
|
771 | 776 |
|
| 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 | + |
772 | 786 | (cljs/eval st '(defn foo [a b] (+ a b))
|
773 | 787 | {:eval cljs/js-eval}
|
774 | 788 | (fn [res]
|
|
0 commit comments