diff --git a/collects/mzlib/pconvert.ss b/collects/mzlib/pconvert.ss index 847363efe2..31601996e4 100644 --- a/collects/mzlib/pconvert.ss +++ b/collects/mzlib/pconvert.ss @@ -357,15 +357,21 @@ `(mcons ,(recur (mcar expr)) ,(recur (mcdr expr))))] [(weak-box? expr) `(make-weak-box ,(recur (weak-box-value expr)))] [(box? expr) `(box ,(recur (unbox expr)))] - [(hash-table? expr) `(,(cond - [(hash-table? expr 'weak 'equal) 'weak-hash] - [(hash-table? expr 'equal) 'hash] - [(hash-table? expr 'weak) 'weak-hasheq] - [else 'hasheq]) - ,@(hash-table-map - expr - (lambda (k v) - `(,(recur k) ,(recur v)))))] + [(hash-table? expr) + (let ([contents + (hash-table-map + expr + (lambda (k v) + `(cons ,(recur k) ,(recur v))))] + [constructor + (cond + [(hash-table? expr 'weak 'equal) 'weak-hash] + [(hash-table? expr 'equal) 'make-hash] + [(hash-table? expr 'weak) 'weak-hasheq] + [else 'hasheq])]) + (if (null? contents) + `(,constructor) + `(,constructor (list ,@contents))))] [(vector? expr) `(vector ,@(map recur (vector->list expr)))] [(symbol? expr) `',expr] [(keyword? expr) `',expr] diff --git a/collects/tests/mzscheme/pconvert.ss b/collects/tests/mzscheme/pconvert.ss index 628b6e4462..0ea0a806ed 100644 --- a/collects/tests/mzscheme/pconvert.ss +++ b/collects/tests/mzscheme/pconvert.ss @@ -207,13 +207,13 @@ (make-same-test (make-weak-hasheq) '(weak-hasheq)) (make-same-test (make-hash) - '(hash)) + '(make-hash)) (make-same-test (make-weak-hash) '(weak-hash)) (make-same-test (let ([ht (make-hash)]) (hash-set! ht 'x 1) ht) - '(hash ('x 1))) + '(make-hash (list (cons 'x 1)))) (make-pctest (list 'a (box (list '())) (cons 1 '())) '(list (quote a) (box (list empty)) (list 1)) '(list (quote a) (box (list empty)) (list 1)) @@ -356,7 +356,7 @@ (test-shared (vector 1 2 3) '(vector 1 2 3)) (let () (define-struct a () #:inspector (make-inspector)) (test-shared (make-a) '(make-a))) (test-shared (box 1) '(box 1)) - (test-shared (make-hash) '(hash))) + (test-shared (make-hash) '(make-hash))) (arity-test print-convert 1 2) (arity-test build-share 1 1)