Fix conj on a lazy-seq, add lazy-seq interop regression rows
The rest = more() change made (rest coll) return a jolt-lazyseq, so the very common (conj (rest xs) y) hit jolt-conj1's base case, which doesn't recognize a lazyseq, and threw "conj: unsupported collection" (caught by core.match's seq-pattern compiler). conj on a lazy-seq now prepends like conj on any seq. The corpus had no row exercising a collection op on a rest-derived seq, so the class slipped past the gate; add a seqs/lazy-seq-interop suite (conj/into/first/ count/nth/reduce/map/filter/apply/cons/=/empty?/seq over (rest …) and lazy-seq), all JVM-certified.
This commit is contained in:
parent
1d55d9fa27
commit
271411b3e2
2 changed files with 22 additions and 0 deletions
|
|
@ -49,6 +49,13 @@
|
|||
(cseq-lazy x (lambda () (force-lazyseq coll)))
|
||||
(%ls-cons x coll))))
|
||||
|
||||
;; (conj lazyseq x): conj onto a seq prepends, like any seq — (conj (rest xs) y).
|
||||
;; rest returns a lazyseq, so this is a common path; without it conj reports the
|
||||
;; lazyseq as an "unsupported collection".
|
||||
(define %ls-conj1 jolt-conj1)
|
||||
(set! jolt-conj1 (lambda (coll x)
|
||||
(if (jolt-lazyseq? coll) (jolt-cons x coll) (%ls-conj1 coll x))))
|
||||
|
||||
;; A lazyseq is a NEW value type, so the dispatchers that DON'T route through
|
||||
;; jolt-seq must learn it or a raw (unrealized) lazyseq escapes — e.g. the corpus
|
||||
;; compares (= [1 3 5] (take-nth 2 …)) against the raw lazyseq, and jolt=2 would
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue