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:
parent
6d56982abe
commit
2c5b7fc27a
1 changed files with 2 additions and 2 deletions
|
|
@ -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))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue