From 73381c3ad3405bfe2acd9a459a9b562ce89690f9 Mon Sep 17 00:00:00 2001 From: Sorawee Porncharoenwase Date: Fri, 16 Apr 2021 16:55:55 +0700 Subject: [PATCH] expander: another improvement to make-readtable's error message Currently `(make-readtable #f #\a 'dispatch-macro)` produces the error message ``` ; make-readtable: expected procedure argument after symbol argument ; given: 'dispatch-macro ``` which is very confusing, because it sounds like `'dispatch-macro` is incorrect, but it is in fact correct already. This PR adjusts the error message to: ``` ; make-readtable: expected procedure argument after symbol argument ; symbol: 'dispatch-macro ``` which is the convention that is already used when the mode argument is not given. --- racket/src/bc/src/startup.inc | 2 +- racket/src/cs/schemified/expander.scm | 16 +++++++++------- racket/src/expander/read/readtable.rkt | 3 ++- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/racket/src/bc/src/startup.inc b/racket/src/bc/src/startup.inc index 2ddf91363b..1f42bfc5a8 100644 --- a/racket/src/bc/src/startup.inc +++ b/racket/src/bc/src/startup.inc @@ -54518,7 +54518,7 @@ static const char *startup_source = "(if(char? mode_0)" " \"expected readtable or #f argument after character argument\"" " \"expected procedure argument after symbol argument\")" -" \"given\"" +" (if (char? mode_0) \"character\" \"symbol\")" " mode_0))" "(void))" "(values))))" diff --git a/racket/src/cs/schemified/expander.scm b/racket/src/cs/schemified/expander.scm index 829b6d760d..d09fcf6b69 100644 --- a/racket/src/cs/schemified/expander.scm +++ b/racket/src/cs/schemified/expander.scm @@ -61329,13 +61329,15 @@ "expected 'non-terminating-macro after #f"))) (begin (if (null? (cddr args_1)) - (raise-arguments-error - 'make-readtable - (if (char? mode_0) - "expected readtable or #f argument after character argument" - "expected procedure argument after symbol argument") - "given" - mode_0) + (let ((app_0 + (if (char? mode_0) + "expected readtable or #f argument after character argument" + "expected procedure argument after symbol argument"))) + (raise-arguments-error + 'make-readtable + app_0 + (if (char? mode_0) "character" "symbol") + mode_0)) (void)) (let ((target_0 (caddr args_1))) (let ((rest-args_0 (cdddr args_1))) diff --git a/racket/src/expander/read/readtable.rkt b/racket/src/expander/read/readtable.rkt index b6cac3edfb..7661ad1755 100644 --- a/racket/src/expander/read/readtable.rkt +++ b/racket/src/expander/read/readtable.rkt @@ -81,7 +81,8 @@ (if (char? mode) "expected readtable or #f argument after character argument" "expected procedure argument after symbol argument") - "given" mode)) + (if (char? mode) "character" "symbol") + mode)) (define target (caddr args)) ;; Update the readtable