From 5506a9028528a50c74eb146620deab677c451818 Mon Sep 17 00:00:00 2001 From: Douglas Katzman Date: Mon, 12 Jun 2017 14:11:05 -0400 Subject: [PATCH] Fix pet peeve: 1000 different FORMAT-ARGn gensyms. Since a formatter's &REST arg is always named SB-FORMAT::ARGS, why not intern the positional arguments as well? --- src/code/late-format.lisp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/code/late-format.lisp b/src/code/late-format.lisp index b2708a6db..ca8c27449 100644 --- a/src/code/late-format.lisp +++ b/src/code/late-format.lisp @@ -216,6 +216,7 @@ (defun args-exhausted (control-string offset) (format-error-at control-string offset "No more arguments")) +(defvar *format-gensym-counter*) (defun expand-control-string (string) (let* ((string (etypecase string (simple-string @@ -223,6 +224,7 @@ (string (coerce string 'simple-string)))) (*default-format-error-control-string* string) + (*format-gensym-counter* 0) (directives (tokenize-control-string string))) `(block nil ,@(expand-directive-list directives)))) @@ -294,7 +296,12 @@ `(,*expander-next-arg-macro* ,*default-format-error-control-string* ,(or offset *default-format-error-offset*)) - (let ((symbol (sb!xc:gensym "FORMAT-ARG"))) + (let ((symbol + (without-package-locks + (package-symbolicate + (load-time-value (find-package "SB!FORMAT") t) + "FORMAT-ARG" + (write-to-string (incf *format-gensym-counter*)))))) (push (cons symbol (or offset *default-format-error-offset*)) *simple-args*) symbol))) -- 2.11.4.GIT