summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/clj/clojure/core/protocols.clj10
-rw-r--r--test/clojure/test_clojure/sequences.clj3
2 files changed, 9 insertions, 4 deletions
diff --git a/src/clj/clojure/core/protocols.clj b/src/clj/clojure/core/protocols.clj
index 737345d1..bcf4f7b5 100644
--- a/src/clj/clojure/core/protocols.clj
+++ b/src/clj/clojure/core/protocols.clj
@@ -24,11 +24,13 @@
(internal-reduce
[s f val]
(if-let [s (seq s)]
- (recur (chunk-next s)
- f
- (.reduce (chunk-first s) f val))
+ (if (chunked-seq? s)
+ (recur (chunk-next s)
+ f
+ (.reduce (chunk-first s) f val))
+ (internal-reduce s f val))
val))
-
+
clojure.lang.StringSeq
(internal-reduce
[str-seq f val]
diff --git a/test/clojure/test_clojure/sequences.clj b/test/clojure/test_clojure/sequences.clj
index 6cc5c47f..5c71e174 100644
--- a/test/clojure/test_clojure/sequences.clj
+++ b/test/clojure/test_clojure/sequences.clj
@@ -18,6 +18,9 @@
; apply, map, filter, remove
; and more...
+(deftest test-reduce-from-chunked-into-unchunked
+ (= [1 2 \a \b] (into [] (concat [1 2] "ab"))))
+
(deftest test-reduce
(let [int+ (fn [a b] (+ (int a) (int b)))
arange (range 100) ;; enough to cross nodes