Skip to content

Commit f6f4c04

Browse files
anmonteiroswannodette
authored andcommitted
CLJS-2258: Stack overflow regression for sequence xform applied to eduction
1 parent 5e17860 commit f6f4c04

File tree

2 files changed

+12
-13
lines changed

2 files changed

+12
-13
lines changed

src/main/cljs/cljs/core.cljs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3999,10 +3999,10 @@ reduces them without incurring seq initialization"
39993999

40004000
(defn iter [coll]
40014001
(cond
4002+
(iterable? coll) (-iterator coll)
40024003
(nil? coll) (nil-iter)
40034004
(string? coll) (string-iter coll)
40044005
(array? coll) (array-iter coll)
4005-
(iterable? coll) (-iterator coll)
40064006
(seqable? coll) (seq-iter coll)
40074007
:else (throw (js/Error. (str "Cannot create iterator from " coll)))))
40084008

@@ -4131,15 +4131,12 @@ reduces them without incurring seq initialization"
41314131
iterator))
41324132

41334133
(set! (.-create TransformerIterator)
4134-
(fn [xform coll]
4135-
(transformer-iterator xform (iter coll) false)))
4134+
(fn [xform source]
4135+
(transformer-iterator xform source false)))
41364136

41374137
(set! (.-createMulti TransformerIterator)
4138-
(fn [xform colls]
4139-
(let [iters (array)]
4140-
(doseq [coll colls]
4141-
(.push iters (iter coll)))
4142-
(transformer-iterator xform (MultiIterator. iters) true))))
4138+
(fn [xform sources]
4139+
(transformer-iterator xform (MultiIterator. (to-array sources)) true)))
41434140

41444141
(defn sequence
41454142
"Coerces coll to a (possibly empty) sequence, if it is not already
@@ -4156,11 +4153,11 @@ reduces them without incurring seq initialization"
41564153
(or (seq coll) ())))
41574154
([xform coll]
41584155
(or (chunkIteratorSeq
4159-
(.create TransformerIterator xform coll))
4156+
(.create TransformerIterator xform (iter coll)))
41604157
()))
41614158
([xform coll & colls]
41624159
(or (chunkIteratorSeq
4163-
(.createMulti TransformerIterator xform (to-array (cons coll colls))))
4160+
(.createMulti TransformerIterator xform (map iter (cons coll colls))))
41644161
())))
41654162

41664163
(defn ^boolean every?
@@ -10166,8 +10163,8 @@ reduces them without incurring seq initialization"
1016610163
ISequential
1016710164

1016810165
IIterable
10169-
(-iterator [coll]
10170-
(.create TransformerIterator xform coll))
10166+
(-iterator [_]
10167+
(.create TransformerIterator xform (iter coll)))
1017110168

1017210169
ISeqable
1017310170
(-seq [_] (seq (sequence xform coll)))

src/test/cljs/cljs/core_test.cljs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,9 @@
364364
([] (rf))
365365
([result] (rf result :foo))
366366
([result input] (rf result input))))]
367-
(is (= (sequence xf [1 2 3]) [1 2 3 :foo])))))
367+
(is (= (sequence xf [1 2 3]) [1 2 3 :foo]))))
368+
(testing "CLJS-2258"
369+
(is (= ["1"] (sequence (map str) (eduction [1]))))))
368370

369371
(deftest test-obj-equiv
370372
(testing "Object equiv method"

0 commit comments

Comments
 (0)