prunedtree in IRC reported a stack overflow with this code:
http://paste.lisp.org/display/67882
I was able to trim this down and still reproduce the error:
(dorun (for [i (range 10000) j nil] 1))
It turns out that "for" and "lazy-cat" interact badly in this
degenerate case. Having "for" use "recur" instead of "lazy-cat" in
such cases seems to fix the problem. Patch is attached.
--Chouser
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---
diff --git a/src/clj/clojure/boot.clj b/src/clj/clojure/boot.clj
index 68cb448..30c8d68 100644
--- a/src/clj/clojure/boot.clj
+++ b/src/clj/clojure/boot.clj
@@ -2274,9 +2274,11 @@
(when-first ~b ~gxs
(if ~f
~(if rses
- `(let [iterys# ~(emit rses)]
- (lazy-cat (iterys# ~ys)
- (~giter (rest ~gxs))))
+ `(let [iterys# ~(emit rses)
+ fs# (iterys# ~ys)]
+ (if fs#
+ (lazy-cat fs# (~giter (rest ~gxs)))
+ (recur (rest ~gxs))))
`(lazy-cons ~expr (~giter (rest ~gxs))))
~(if (= w :when)
`(recur (rest ~gxs))