Skip to content

Commit 1589e58

Browse files
Thomas Hellerdnolen
authored andcommitted
CLJS-1591 avoid analyzing invoke arguments multiple times
It is safe to use the source form to figure out if an argument to an invoke needs to be assigned before being used. See CLJS-855 for more details on why the assignment is required.
1 parent c98e9a7 commit 1589e58

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

src/main/clojure/cljs/analyzer.cljc

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2459,7 +2459,7 @@
24592459
(defn- all-values?
24602460
#?(:cljs {:tag boolean})
24612461
[exprs]
2462-
(every? #{:var :constant} (map :op exprs)))
2462+
(every? #(or (nil? %) (symbol? %) (string? %) (number? %) (true? %) (false? %)) exprs))
24632463

24642464
(defn- valid-arity?
24652465
#?(:cljs {:tag boolean})
@@ -2488,19 +2488,19 @@
24882488
(warning :fn-deprecated env {:fexpr fexpr})))
24892489
(when-not (nil? (-> fexpr :info :type))
24902490
(warning :invoke-ctor env {:fexpr fexpr}))
2491-
(let [ana-expr #(analyze enve %)
2492-
argexprs (map ana-expr args)]
2493-
(if (or (not (boolean *cljs-static-fns*))
2494-
(not (symbol? f))
2495-
fn-var?
2496-
(analyzed? f)
2497-
(all-values? argexprs))
2491+
(if (or (not (boolean *cljs-static-fns*))
2492+
(not (symbol? f))
2493+
fn-var?
2494+
(analyzed? f)
2495+
(all-values? args))
2496+
(let [ana-expr #(analyze enve %)
2497+
argexprs (map ana-expr args)]
24982498
{:env env :op :invoke :form form :f fexpr :args (vec argexprs)
2499-
:children (into [fexpr] argexprs)}
2500-
(let [arg-syms (take argc (repeatedly gensym))]
2501-
(analyze env
2502-
`(let [~@(vec (interleave arg-syms args))]
2503-
(~(vary-meta f assoc ::analyzed true) ~@arg-syms))))))))
2499+
:children (into [fexpr] argexprs)})
2500+
(let [arg-syms (take argc (repeatedly gensym))]
2501+
(analyze env
2502+
`(let [~@(vec (interleave arg-syms args))]
2503+
(~(vary-meta f assoc ::analyzed true) ~@arg-syms)))))))
25042504

25052505
(defn parse-invoke
25062506
[env form]

0 commit comments

Comments
 (0)