Skip to content

Commit 998933f

Browse files
mfikesdnolen
authored andcommitted
CLJS-2336: Call alength once in areduce and amap
1 parent bee66e0 commit 998933f

2 files changed

Lines changed: 12 additions & 3 deletions

File tree

benchmark/cljs/benchmark_runner.cljs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@
2424
(simple-benchmark [coll arr] (array-reduce coll + 0) 1)
2525
(simple-benchmark [coll arr] (array-reduce coll sum 0) 1)
2626

27+
(println ";; areduce")
28+
(def x (atom 0))
29+
(simple-benchmark [arr (to-array (range 1000000))] (reset! x (areduce arr i ret 0 (+ ret (aget arr i)))) 1)
30+
31+
(println ";; amap")
32+
(simple-benchmark [arr (to-array (range 1000000))] (amap arr i ret (* 10 (aget arr i))) 1)
33+
2734
(println ";;; instance?")
2835
;; WARNING: will get compiled away under advanced
2936
(simple-benchmark [coll []] (instance? PersistentVector coll) 1000000)

src/main/clojure/cljs/core.cljc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2576,9 +2576,10 @@
25762576
array ret."
25772577
[a idx ret expr]
25782578
`(let [a# ~a
2579+
l# (alength a#)
25792580
~ret (cljs.core/aclone a#)]
25802581
(loop [~idx 0]
2581-
(if (< ~idx (alength a#))
2582+
(if (< ~idx l#)
25822583
(do
25832584
(aset ~ret ~idx ~expr)
25842585
(recur (inc ~idx)))
@@ -2589,9 +2590,10 @@
25892590
and return value named ret, initialized to init, setting ret to the
25902591
evaluation of expr at each step, returning ret."
25912592
[a idx ret init expr]
2592-
`(let [a# ~a]
2593+
`(let [a# ~a
2594+
l# (alength a#)]
25932595
(loop [~idx 0 ~ret ~init]
2594-
(if (< ~idx (alength a#))
2596+
(if (< ~idx l#)
25952597
(recur (inc ~idx) ~expr)
25962598
~ret))))
25972599

0 commit comments

Comments
 (0)