|
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