diff --git a/pkgs/racket-test-core/tests/racket/print.rktl b/pkgs/racket-test-core/tests/racket/print.rktl index 6e6537ca2c..1cca0e17be 100644 --- a/pkgs/racket-test-core/tests/racket/print.rktl +++ b/pkgs/racket-test-core/tests/racket/print.rktl @@ -107,6 +107,9 @@ (ptest "#" (a 1 2)) (ptest "(b 1 2)" (b 1 2)) (ptest "'#s(c 1 2)" (c 1 2)) + (test "#s(c 1 2)" 'prefab + (parameterize ([print-unreadable #f]) + (format "~s" (c 1 2)))) (let ([s (b 1 2)]) (ptest "(list (cons (b 1 2) 0) (cons (b 1 2) 0))" (list (cons s 0) (cons s 0)))) diff --git a/racket/src/bc/src/print.c b/racket/src/bc/src/print.c index f776592421..e41646f68c 100644 --- a/racket/src/bc/src/print.c +++ b/racket/src/bc/src/print.c @@ -2276,7 +2276,7 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht, vec = scheme_struct_to_vector(obj, (notdisplay >= 3) ? qq_ellipses : NULL, pp->inspector); SCHEME_VEC_ELS(vec)[0] = prefab; print_vector(vec, notdisplay, compact, ht, mt, pp, 1); - } else if (compact || !pp->print_unreadable) { + } else if (compact || (!pp->print_unreadable && !SCHEME_PREFABP(obj))) { cannot_print(pp, notdisplay, obj, ht, compact); } else if (scheme_is_writable_struct(obj)) { if (notdisplay == 3) { diff --git a/racket/src/cs/schemified/io.scm b/racket/src/cs/schemified/io.scm index 2fe02bb543..92c292b73a 100644 --- a/racket/src/cs/schemified/io.scm +++ b/racket/src/cs/schemified/io.scm @@ -22081,8 +22081,10 @@ (config-get config_0 1/print-unreadable)) - (not - (|#%app| printable-regexp? v_0)) + (if (not (prefab-struct-key v_0)) + (not + (|#%app| printable-regexp? v_0)) + #f) #f) #f) (fail-unreadable who_0 v_0) diff --git a/racket/src/io/print/main.rkt b/racket/src/io/print/main.rkt index 51f619cdab..971c59a4bc 100644 --- a/racket/src/io/print/main.rkt +++ b/racket/src/io/print/main.rkt @@ -299,6 +299,7 @@ (write-string/max "#" o max-length)])] [(and (eq? mode WRITE-MODE) (not (config-get config print-unreadable)) + (not (prefab-struct-key v)) ;; Regexps are a special case: custom writers that produce readable input (not (printable-regexp? v))) (fail-unreadable who v)]