|
2847 | 2847 | :js-op js-op |
2848 | 2848 | :numeric numeric}))) |
2849 | 2849 |
|
| 2850 | +(defn analyzed |
| 2851 | + [x] |
| 2852 | + (vary-meta x assoc ::analyzed true)) |
| 2853 | + |
2850 | 2854 | (defn- analyzed? |
2851 | 2855 | #?(:cljs {:tag boolean}) |
2852 | | - [f] |
2853 | | - (contains? (meta f) ::analyzed)) |
| 2856 | + [x] |
| 2857 | + (boolean (::analyzed (meta x)))) |
2854 | 2858 |
|
2855 | 2859 | (defn- all-values? |
2856 | 2860 | #?(:cljs {:tag boolean}) |
|
2907 | 2911 | f-sym (when bind-f-expr? (gensym "fexpr__")) |
2908 | 2912 | bindings (cond-> [] |
2909 | 2913 | bind-args? (into (interleave arg-syms args)) |
2910 | | - bind-f-expr? (conj f-sym f))] |
| 2914 | + bind-f-expr? (conj f-sym (analyzed f)))] |
2911 | 2915 | (analyze env |
2912 | | - `(let [~@bindings] |
2913 | | - (~(vary-meta (if bind-f-expr? f-sym f) assoc ::analyzed true) |
2914 | | - ~@(if bind-args? arg-syms args))))) |
| 2916 | + `(let [~@bindings] |
| 2917 | + (~(analyzed (if bind-f-expr? f-sym f)) |
| 2918 | + ~@(if bind-args? arg-syms args))))) |
2915 | 2919 | (let [ana-expr #(analyze enve %) |
2916 | 2920 | argexprs (map ana-expr args)] |
2917 | 2921 | {:env env :op :invoke :form form :f fexpr :args (vec argexprs) |
|
3296 | 3300 | ast (analyze-form env form name opts)] |
3297 | 3301 | (reduce (fn [ast pass] (pass env ast opts)) ast passes))) |
3298 | 3302 |
|
| 3303 | +(defn- warnings-for [form] |
| 3304 | + (if (analyzed? form) |
| 3305 | + (zipmap (keys *cljs-warnings*) (repeat false)) |
| 3306 | + *cljs-warnings*)) |
| 3307 | + |
3299 | 3308 | (defn analyze |
3300 | 3309 | "Given an environment, a map containing {:locals (mapping of names to bindings), :context |
3301 | 3310 | (one of :statement, :expr, :return), :ns (a symbol naming the |
|
3311 | 3320 | ([env form name opts] |
3312 | 3321 | (ensure |
3313 | 3322 | (wrapping-errors env |
3314 | | - (binding [reader/*alias-map* (or reader/*alias-map* {})] |
| 3323 | + (binding [*cljs-warnings* (warnings-for form) |
| 3324 | + reader/*alias-map* (or reader/*alias-map* {})] |
3315 | 3325 | (analyze* env form name opts)))))) |
3316 | 3326 |
|
3317 | 3327 | #?(:clj |
|
0 commit comments