fix .zo marshal of a syntax object containing a hash table in a list
Also, fix `zo-parse` unmarshaling of syntax-object hash tables.
Closes PR 14087
original commit: 70b6f6464f
This commit is contained in:
parent
007d3fe205
commit
6ebcb502de
|
@ -608,24 +608,27 @@
|
||||||
[(pair? v)
|
[(pair? v)
|
||||||
(if (eq? #t (car v))
|
(if (eq? #t (car v))
|
||||||
;; Share decoded wraps with all nested parts.
|
;; Share decoded wraps with all nested parts.
|
||||||
(let loop ([v (cdr v)])
|
(let iloop ([v (cdr v)])
|
||||||
(cond
|
(cond
|
||||||
[(pair? v)
|
[(pair? v)
|
||||||
(let ploop ([v v])
|
(let ploop ([v v])
|
||||||
(cond
|
(cond
|
||||||
[(null? v) null]
|
[(null? v) null]
|
||||||
[(pair? v) (add-wrap (cons (loop (car v)) (ploop (cdr v))))]
|
[(pair? v) (add-wrap (cons (iloop (car v)) (ploop (cdr v))))]
|
||||||
[else (loop v)]))]
|
[else (iloop v)]))]
|
||||||
[(box? v) (add-wrap (box (loop (unbox v))))]
|
[(box? v) (add-wrap (box (iloop (unbox v))))]
|
||||||
[(vector? v)
|
[(vector? v)
|
||||||
(add-wrap (list->vector (map loop (vector->list v))))]
|
(add-wrap (list->vector (map iloop (vector->list v))))]
|
||||||
|
[(hash? v)
|
||||||
|
(add-wrap (for/hash ([(k v) (in-hash v)])
|
||||||
|
(values k (iloop v))))]
|
||||||
[(prefab-struct-key v)
|
[(prefab-struct-key v)
|
||||||
=> (lambda (k)
|
=> (lambda (k)
|
||||||
(add-wrap
|
(add-wrap
|
||||||
(apply
|
(apply
|
||||||
make-prefab-struct
|
make-prefab-struct
|
||||||
k
|
k
|
||||||
(map loop (struct->list v)))))]
|
(map iloop (struct->list v)))))]
|
||||||
[else (add-wrap v)]))
|
[else (add-wrap v)]))
|
||||||
;; Decode sub-elements that have their own wraps:
|
;; Decode sub-elements that have their own wraps:
|
||||||
(let-values ([(v counter) (if (exact-integer? (car v))
|
(let-values ([(v counter) (if (exact-integer? (car v))
|
||||||
|
@ -641,6 +644,9 @@
|
||||||
[(box? v) (add-wrap (box (loop (unbox v))))]
|
[(box? v) (add-wrap (box (loop (unbox v))))]
|
||||||
[(vector? v)
|
[(vector? v)
|
||||||
(add-wrap (list->vector (map loop (vector->list v))))]
|
(add-wrap (list->vector (map loop (vector->list v))))]
|
||||||
|
[(hash? v)
|
||||||
|
(add-wrap (for/hash ([(k v) (in-hash v)])
|
||||||
|
(values k (loop v))))]
|
||||||
[(prefab-struct-key v)
|
[(prefab-struct-key v)
|
||||||
=> (lambda (k)
|
=> (lambda (k)
|
||||||
(add-wrap
|
(add-wrap
|
||||||
|
|
Loading…
Reference in New Issue
Block a user