From 0955ed6e8b54d710dfa6952b014a8deaca08fc2b Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 24 Aug 2010 06:23:22 -0600 Subject: [PATCH] fix custom printer attached to *SL structure types --- collects/lang/private/teach.rkt | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/collects/lang/private/teach.rkt b/collects/lang/private/teach.rkt index 095d92222a..20fd35c238 100644 --- a/collects/lang/private/teach.rkt +++ b/collects/lang/private/teach.rkt @@ -821,16 +821,20 @@ #`(recur (raw-generic-access r #,i))) fields)))) (cons prop:custom-write - (let ((n (string->symbol (string-append "struct:" - (symbol->string 'name_))))) - (lambda (r port write?) - (let ((v (vector n - #,@(map-with-index (lambda (i _) - #`(raw-generic-access r #,i)) - fields)))) - (if write? - (write v port) - (display v port)))))) + ;; Need a transparent-like printer, but hide auto field. + ;; This simplest way to do that is to create an instance + ;; of a transparet structure with the same name and field values. + (let-values ([(struct:plain make-plain plain? plain-ref plain-set) + (make-struct-type 'name_ #f #,field-count 0 #f null #f)]) + (lambda (r port mode) + (let ((v (make-plain + #,@(map-with-index (lambda (i _) + #`(raw-generic-access r #,i)) + fields)))) + (cond + [(eq? mode #t) (write v port)] + [(eq? mode #f) (display v port)] + [else (print v port mode)]))))) (cons prop:equal+hash (list (lambda (r1 r2 equal?)