fix zo-parse problem with graphs in literal data

svn: r14596

original commit: 2439b4cb75
This commit is contained in:
Matthew Flatt 2009-04-24 17:34:49 +00:00
parent 0a8691e0bb
commit cd3f1c8707

View File

@ -729,7 +729,7 @@
[read-accept-dot #t] [read-accept-dot #t]
[read-accept-infix-dot #t] [read-accept-infix-dot #t]
[read-accept-quasiquote #t]) [read-accept-quasiquote #t])
(read (open-input-bytes s))))] (read/recursive (open-input-bytes s))))]
[(reference) [(reference)
(make-primval (read-compact-number cp))] (make-primval (read-compact-number cp))]
[(small-list small-proper-list) [(small-list small-proper-list)
@ -837,7 +837,17 @@
[(box) [(box)
(box (read-compact cp))] (box (read-compact cp))]
[(quote) [(quote)
(make-reader-graph (read-compact cp))] (make-reader-graph
;; Nested escapes need to share graph references. So get inside the
;; read where `read/recursive' can be used:
(let ([rt (current-readtable)])
(parameterize ([current-readtable (make-readtable
#f
#\x 'terminating-macro
(lambda args
(parameterize ([current-readtable rt])
(read-compact cp))))])
(read (open-input-bytes #"x")))))]
[(symref) [(symref)
(let* ([l (read-compact-number cp)] (let* ([l (read-compact-number cp)]
[v (vector-ref (cport-symtab cp) l)]) [v (vector-ref (cport-symtab cp) l)])