Support metadata on lazy seqs

with-meta/meta only recognized the eager collections, so (with-meta (map-indexed
…) m) — a lazy seq — threw "value does not support metadata". A lazy seq is IObj
on the JVM; add it to the metadatable set (keyed in the side-table by identity,
like cseq/procedure).
This commit is contained in:
Yogthos 2026-06-24 09:13:28 -04:00
parent 6d56982abe
commit 2c5b7fc27a

View file

@ -19,7 +19,7 @@
(jolt-assoc (if user user (jolt-hash-map)) (jolt-assoc (if user user (jolt-hash-map))
jolt-kw-var-ns (var-cell-ns x) jolt-kw-var-ns (var-cell-ns x)
jolt-kw-var-name (var-cell-name x)))) jolt-kw-var-name (var-cell-name x))))
((or (pvec? x) (pmap? x) (pset? x) (cseq? x) (empty-list-t? x) (jrec? x) (procedure? x)) ((or (pvec? x) (pmap? x) (pset? x) (cseq? x) (empty-list-t? x) (jolt-lazyseq? x) (jrec? x) (procedure? x))
(hashtable-ref meta-table x jolt-nil)) (hashtable-ref meta-table x jolt-nil))
(else jolt-nil))) (else jolt-nil)))
@ -36,7 +36,7 @@
(define (jolt-with-meta x m) (define (jolt-with-meta x m)
(cond (cond
((symbol-t? x) (make-symbol-t (symbol-t-ns x) (symbol-t-name x) m)) ((symbol-t? x) (make-symbol-t (symbol-t-ns x) (symbol-t-name x) m))
((or (pvec? x) (pmap? x) (pset? x) (cseq? x) (empty-list-t? x) (jrec? x) (procedure? x)) ((or (pvec? x) (pmap? x) (pset? x) (cseq? x) (empty-list-t? x) (jolt-lazyseq? x) (jrec? x) (procedure? x))
(let ((c (meta-copy x))) (let ((c (meta-copy x)))
(if (jolt-nil? m) (hashtable-delete! meta-table c) (hashtable-set! meta-table c m)) (if (jolt-nil? m) (hashtable-delete! meta-table c) (hashtable-set! meta-table c m))
c)) c))