pretty-print: fix 'unquote in mpair and vectors

Fix misinterpretation of `'unquote` within an `mcons` or `vector`
construction in expression-printing mode.

Closes #3652
This commit is contained in:
Matthew Flatt 2021-05-05 17:10:35 -06:00
parent fc955b99f3
commit 1558e0bde4
2 changed files with 16 additions and 7 deletions

View File

@ -670,6 +670,14 @@
"('a ,a `a ,@a #'a #,a #`a #,@a)"
"'('a ,a `a ,@a #'a #,a #`a #,@a)"
"('a ,a `a ,@a #'a #,a #`a #,@a)"))
(parameterize ([print-reader-abbreviations #t])
(test-print/all (list (mcons 'unquote '()) (vector (mcons 1 2) 'unquote '()))
"({unquote} #({1 . 2} unquote ()))"
"({unquote} #({1 . 2} unquote ()))"
"({unquote} #({1 . 2} unquote ()))"
"(list (mcons 'unquote '()) (vector (mcons 1 2) 'unquote '()))"
"({unquote} #({1 . 2} unquote ()))"))
(void)))

View File

@ -756,7 +756,8 @@
(lambda ()
(cond
[(pair? l)
(if (and (eq? (do-remap (car l)) 'unquote)
(if (and check?
(eq? (do-remap (car l)) 'unquote)
(not (equal? qd 1))
(pair? (cdr l))
(null? (cdr (cdr l))))
@ -806,8 +807,8 @@
#f #f
(lambda ()
(if (and qd (zero? qd))
(wr-expr (list (make-unquoted 'mcons) (mcar obj) (mcdr obj))
depth pair? car cdr "(" ")" qd)
(wr-lst (list (make-unquoted 'mcons) (mcar obj) (mcdr obj))
#f depth pair? car cdr "(" ")" qd)
(wr-expr obj depth mpair? mcar mcdr mpair-open mpair-close qd))))]
[(null? obj)
(let ([qd (to-quoted out qd obj)])
@ -1048,8 +1049,8 @@
qd))]
[(mpair? obj)
(if (and qd (zero? qd))
(pp-pair (list (make-unquoted 'mcons) (mcar obj) (mcdr obj))
extra depth
(pp-list (list (make-unquoted 'mcons) (mcar obj) (mcdr obj))
extra pp-expr #f depth
pair? car cdr "(" ")"
qd)
(pp-pair obj extra depth
@ -1058,8 +1059,8 @@
[(vector? obj)
(let ([qd (to-quoted out qd obj)])
(if (and qd (zero? qd))
(pp-pair (cons (make-unquoted 'vector) (vector->list obj))
extra depth
(pp-list (cons (make-unquoted 'vector) (vector->list obj))
extra pp-expr #f depth
pair? car cdr pair-open pair-close
qd)
(begin