Skip to content

Commit 940b6c8

Browse files
committed
CLJS-2125: Duplicate HOF invoke warnings if :static-fns true
1 parent c7cf897 commit 940b6c8

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

src/main/clojure/cljs/analyzer.cljc

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2847,10 +2847,14 @@
28472847
:js-op js-op
28482848
:numeric numeric})))
28492849

2850+
(defn analyzed
2851+
[x]
2852+
(vary-meta x assoc ::analyzed true))
2853+
28502854
(defn- analyzed?
28512855
#?(:cljs {:tag boolean})
2852-
[f]
2853-
(contains? (meta f) ::analyzed))
2856+
[x]
2857+
(boolean (::analyzed (meta x))))
28542858

28552859
(defn- all-values?
28562860
#?(:cljs {:tag boolean})
@@ -2907,11 +2911,11 @@
29072911
f-sym (when bind-f-expr? (gensym "fexpr__"))
29082912
bindings (cond-> []
29092913
bind-args? (into (interleave arg-syms args))
2910-
bind-f-expr? (conj f-sym f))]
2914+
bind-f-expr? (conj f-sym (analyzed f)))]
29112915
(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)))))
29152919
(let [ana-expr #(analyze enve %)
29162920
argexprs (map ana-expr args)]
29172921
{:env env :op :invoke :form form :f fexpr :args (vec argexprs)
@@ -3296,6 +3300,11 @@
32963300
ast (analyze-form env form name opts)]
32973301
(reduce (fn [ast pass] (pass env ast opts)) ast passes)))
32983302

3303+
(defn- warnings-for [form]
3304+
(if (analyzed? form)
3305+
(zipmap (keys *cljs-warnings*) (repeat false))
3306+
*cljs-warnings*))
3307+
32993308
(defn analyze
33003309
"Given an environment, a map containing {:locals (mapping of names to bindings), :context
33013310
(one of :statement, :expr, :return), :ns (a symbol naming the
@@ -3311,7 +3320,8 @@
33113320
([env form name opts]
33123321
(ensure
33133322
(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* {})]
33153325
(analyze* env form name opts))))))
33163326

33173327
#?(:clj

0 commit comments

Comments
 (0)