~ chicken-core (chicken-5) 5b01de0a6c711ea940413fd813aa0247b92981aa
commit 5b01de0a6c711ea940413fd813aa0247b92981aa Author: felix <felix@call-with-current-continuation.org> AuthorDate: Thu May 20 18:43:50 2010 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Thu May 20 18:43:50 2010 +0200 catch errors in user-print-hook diff --git a/library.scm b/library.scm index 89f8e67e..59c39db3 100644 --- a/library.scm +++ b/library.scm @@ -2966,20 +2966,30 @@ EOF (##core#undefined) ) ) (define (##sys#user-print-hook x readable port) - (let* ([type (##sys#slot x 0)] - [a (assq type ##sys#record-printers)] ) - (cond [a ((##sys#slot a 1) x port)] - [else + (let* ((type (##sys#slot x 0)) + (a (assq type ##sys#record-printers)) ) + (cond (a (handle-exceptions ex + (begin + (##sys#print "#<Error in printer of record type `" #f port) + (##sys#print (##sys#symbol->string type) #f port) + (if (##sys#structure? ex 'condition) + (and-let* ((a (member '(exn . message) (##sys#slot ex 2)))) + (##sys#print "': " #f port) + (##sys#print (cadr a) #f port) + (##sys#write-char-0 #\> port)) + (##sys#print "'>" #f port))) + ((##sys#slot a 1) x port))) + (else (##sys#print "#<" #f port) (##sys#print (##sys#symbol->string type) #f port) (case type - [(condition) + ((condition) (##sys#print ": " #f port) - (##sys#print (##sys#slot x 1) #f port) ] - [(thread) + (##sys#print (##sys#slot x 1) #f port) ) + ((thread) (##sys#print ": " #f port) - (##sys#print (##sys#slot x 6) #f port) ] ) - (##sys#print #\> #f port) ] ) ) ) + (##sys#print (##sys#slot x 6) #f port) ) ) + (##sys#write-char-0 #\> port) ) ) ) ) (define ##sys#with-print-length-limit (let ([call-with-current-continuation call-with-current-continuation])Trap