Skip to content

Commit aa6ecdf

Browse files
stephenbradydnolen
authored andcommitted
CLJS-1641: Multi-arity defn copies arguments unnecessarily for all cases
Copying arguments to an array is only necessary in the variadic case. Move arguments array copy to only the variadic case in a multi-arity defn.
1 parent 8962849 commit aa6ecdf

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

src/main/clojure/cljs/core.cljc

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3003,22 +3003,22 @@
30033003
`(do
30043004
(def ~(with-meta name meta)
30053005
(fn [~'var_args]
3006-
(let [~args-sym (array)]
3007-
(copy-arguments ~args-sym)
3008-
(case (alength ~args-sym)
3009-
~@(mapcat #(fixed-arity rname %) sigs)
3010-
~(if variadic
3011-
`(let [argseq# (new ^::ana/no-resolve cljs.core/IndexedSeq
3012-
(.slice ~args-sym ~maxfa) 0 nil)]
3013-
(. ~rname
3014-
(~'cljs$core$IFn$_invoke$arity$variadic
3015-
~@(dest-args maxfa)
3016-
argseq#)))
3017-
(if (:macro meta)
3018-
`(throw (js/Error.
3019-
(str "Invalid arity: " (- (alength ~args-sym) 2))))
3020-
`(throw (js/Error.
3021-
(str "Invalid arity: " (alength ~args-sym))))))))))
3006+
(case (alength (js-arguments))
3007+
~@(mapcat #(fixed-arity rname %) sigs)
3008+
~(if variadic
3009+
`(let [args-arr# (array)]
3010+
(copy-arguments args-arr#)
3011+
(let [argseq# (new ^::ana/no-resolve cljs.core/IndexedSeq
3012+
(.slice args-arr# ~maxfa) 0 nil)]
3013+
(. ~rname
3014+
(~'cljs$core$IFn$_invoke$arity$variadic
3015+
~@(dest-args maxfa)
3016+
argseq#))))
3017+
(if (:macro meta)
3018+
`(throw (js/Error.
3019+
(str "Invalid arity: " (- (alength (js-arguments)) 2))))
3020+
`(throw (js/Error.
3021+
(str "Invalid arity: " (alength (js-arguments))))))))))
30223022
~@(map fn-method fdecl)
30233023
;; optimization properties
30243024
(set! (. ~name ~'-cljs$lang$maxFixedArity) ~maxfa)

0 commit comments

Comments
 (0)