|
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