diff --git a/collects/mzlib/pconvert.ss b/collects/mzlib/pconvert.ss index 31601996e4..b0d7a19994 100644 --- a/collects/mzlib/pconvert.ss +++ b/collects/mzlib/pconvert.ss @@ -356,7 +356,11 @@ `(cons ,(recur (mcar expr)) ,(recur (mcdr expr))))) `(mcons ,(recur (mcar expr)) ,(recur (mcdr expr))))] [(weak-box? expr) `(make-weak-box ,(recur (weak-box-value expr)))] - [(box? expr) `(box ,(recur (unbox expr)))] + [(box? expr) + `(,(if (immutable? expr) + 'box-immutable + 'box) + ,(recur (unbox expr)))] [(hash-table? expr) (let ([contents (hash-table-map @@ -372,7 +376,11 @@ (if (null? contents) `(,constructor) `(,constructor (list ,@contents))))] - [(vector? expr) `(vector ,@(map recur (vector->list expr)))] + [(vector? expr) + `(,(if (immutable? expr) + 'vector-immutable + 'vector) + ,@(map recur (vector->list expr)))] [(symbol? expr) `',expr] [(keyword? expr) `',expr] [(string? expr) expr] diff --git a/collects/tests/mzscheme/pconvert.ss b/collects/tests/mzscheme/pconvert.ss index 0ea0a806ed..1d6c2cdc3e 100644 --- a/collects/tests/mzscheme/pconvert.ss +++ b/collects/tests/mzscheme/pconvert.ss @@ -163,6 +163,7 @@ '(cons 3/2+3/2i empty)) (make-same-test (vector 0 0 0 0 0 0 0 0 0 0) '(vector 0 0 0 0 0 0 0 0 0 0)) + (make-same-test (vector-immutable 1 2 3 4 5) '(vector-immutable 1 2 3 4 5)) (make-same-test #t 'true) (make-same-test #f 'false) @@ -171,6 +172,7 @@ (make-same-test (delay 1) '(delay ...)) (make-same-test (let () (define-struct a (a) #:inspector (make-inspector)) (make-a 3)) '(make-a 3)) (make-same-test (box 3) '(box 3)) + (make-same-test (box-immutable 4) '(box-immutable 4)) (make-pctest null 'empty 'empty 'empty '`() '`() '`() 'empty) (make-same-test add1 'add1) (make-same-test (void) '(void))