diff options
author | Michael Käppler <xmichael-k@web.de> | 2024-04-02 08:58:52 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2024-05-06 11:51:53 +0200 |
commit | 80d4055e4213763e2d3a0bfcc39d6b55c52f5415 (patch) | |
tree | eee3e23a22d33a3eed23e9f83814f0a600f59728 /module/srfi | |
parent | 57a889b7282dab303c4cdc49cccbbe22f961bd1c (diff) | |
download | guile-80d4055e4213763e2d3a0bfcc39d6b55c52f5415.tar.gz |
Fix error messages containing format strings
The builtin primitive procedure `error` takes an optional message and
a list of arguments to include into the error message.
These args are formatted with `~S` and appended to the error message, so
that an example call of
`(error "Wrong argument: " 42)`
results in the output
"Wrong argument: 42"
If format strings occur in the message itself, however, they are
escaped. Thus a call like
`(error "Wrong argument: ~a" 42)`
is rendered as
"Wrong argument: ~a 42"
Some callers did not take this behavior into account, leading to
confusing error messages.
Changing the behavior of `error` to be
both backwards-compatible and accept also format strings inside messages
is not straightforward, because it would have to handle escaped `~`
characters as well. Therefore, fix `error` call sites using format
strings to use `format` before calling out to `error`.
The following files are affected:
* module/ice-9/format.scm (format)
* module/ice-9/r6rs-libraries.scm (resolve-r6rs-interface)
* module/oop/goops.scm (make)
* module/srfi/srfi-37.scm (Comment at the beginning of file)
* module/system/base/compile.scm (call-once)
* module/system/repl/command.scm (break, tracepoint)
* module/system/repl/common.scm (repl-default-options)
* module/system/vm/traps.scm (arg-check, trap-at-source-location)
There are a couple of further call sites that were left unchanged,
either because they are using their own `error` procedure:
* module/ice-9/read.scm
* module/ice-9/command-line.scm
or are not referenced from other modules:
* module/system/base/lalr.upstream.scm:
* module/sxml/upstream/assert.scm:
* module/sxml/sxml-match.ss:
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'module/srfi')
-rw-r--r-- | module/srfi/srfi-37.scm | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/module/srfi/srfi-37.scm b/module/srfi/srfi-37.scm index 9b57ac1c2..cd37f981e 100644 --- a/module/srfi/srfi-37.scm +++ b/module/srfi/srfi-37.scm @@ -31,9 +31,9 @@ ;; (display-and-exit-proc "Foo version 42.0\n")) ;; (option '(#\h "help") #f #f ;; (display-and-exit-proc -;; "Usage: foo scheme-file ...")))) +;; "Usage: foo scheme-file ...\n")))) ;; (lambda (opt name arg) -;; (error "Unrecognized option `~A'" name)) +;; (error (format #f "Unrecognized option `~A'" name))) ;; (lambda (op) (load op) (values))) ;; ;;; Code: |