diff --git a/symbols.lisp b/symbols.lisp index e612afcaa098716851fd16ebdd747fcc7b00c365..5733d3e1cc501c5f9aa5f10bb86beb2c0991f2ce 100644 --- a/symbols.lisp +++ b/symbols.lisp @@ -21,12 +21,16 @@ Example: (declaim (inline format-symbol)) (defun format-symbol (package control &rest arguments) - "Constructs a string by applying ARGUMENTS to string designator -CONTROL as if by FORMAT, and then creates a symbol named by that -string. If PACKAGE is NIL, returns an uninterned symbol, if package is -T, returns a symbol interned in the current package, and otherwise -returns a symbol interned in the package designated by PACKAGE." - (maybe-intern (apply #'format nil (string control) arguments) package)) + "Constructs a string by applying ARGUMENTS to string designator CONTROL as +if by FORMAT within WITH-STANDARD-IO-SYNTAX, and then creates a symbol named +by that string. + +If PACKAGE is NIL, returns an uninterned symbol, if package is T, returns a +symbol interned in the current package, and otherwise returns a symbol +interned in the package designated by PACKAGE." + (maybe-intern (with-standard-io-syntax + (apply #'format nil (string control) arguments)) + package)) (defun make-keyword (name) "Interns the string designated by NAME in the KEYWORD package." diff --git a/tests.lisp b/tests.lisp index 61579d7393d1128765e9a5b00b4e7b5dbe48e14a..198104ceaf36ac41b3217d6c9ebecdc2c5ec896d 100644 --- a/tests.lisp +++ b/tests.lisp @@ -1862,3 +1862,21 @@ (starts-with-subseq "foo" "xfoop" :start2 1) t nil) + +(deftest format-symbol.print-case-bound + (let ((upper (intern "FOO-BAR")) + (lower (intern "foo-bar")) + (*print-escape* nil)) + (values + (let ((*print-case* :downcase)) + (and (eq upper (format-symbol t "~A" upper)) + (eq lower (format-symbol t "~A" lower)))) + (let ((*print-case* :upcase)) + (and (eq upper (format-symbol t "~A" upper)) + (eq lower (format-symbol t "~A" lower)))) + (let ((*print-case* :capitalize)) + (and (eq upper (format-symbol t "~A" upper)) + (eq lower (format-symbol t "~A" lower)))))) + t + t + t)