X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Flate-format.lisp;h=2fc0f3a09972b5e2099d8b1c503e3fe057de239e;hb=7306e23c5a4687bef98fdfb3459aaf15fe79d5ca;hp=4e262c063b7aee48ca43316155143cb13e52a64c;hpb=4898ef32c639b1c7f4ee13a5ba566ce6debd03e6;p=sbcl.git diff --git a/src/code/late-format.lisp b/src/code/late-format.lisp index 4e262c0..2fc0f3a 100644 --- a/src/code/late-format.lisp +++ b/src/code/late-format.lisp @@ -78,7 +78,11 @@ ((and block (char= char #\;) (format-directive-colonp directive)) (setf semicolon directive)) ((char= char #\>) - (aver block) + (unless block + (error 'format-error + :complaint "~~> without a matching ~~<" + :control-string string + :offset next-directive)) (cond ((format-directive-colonp directive) (unless pprint @@ -233,11 +237,13 @@ :offset ,(cdr arg))) args)) (return `(lambda (stream &optional ,@args &rest args) + (declare (ignorable stream)) ,guts args)))) (let ((*orig-args-available* t) (*only-simple-args* nil)) `(lambda (stream &rest orig-args) + (declare (ignorable stream)) (let ((args orig-args)) ,(expand-control-string control-string) args))))) @@ -300,7 +306,7 @@ `(,*expander-next-arg-macro* ,*default-format-error-control-string* ,(or offset *default-format-error-offset*)) - (let ((symbol (gensym "FORMAT-ARG-"))) + (let ((symbol (sb!xc:gensym "FORMAT-ARG"))) (push (cons symbol (or offset *default-format-error-offset*)) *simple-args*) symbol))) @@ -309,34 +315,32 @@ (once-only ((params params)) (if specs (collect ((expander-bindings) (runtime-bindings)) - (dolist (spec specs) - (destructuring-bind (var default) spec - (let ((symbol (gensym))) - (expander-bindings - `(,var ',symbol)) - (runtime-bindings - `(list ',symbol - (let* ((param-and-offset (pop ,params)) - (offset (car param-and-offset)) - (param (cdr param-and-offset))) - (case param - (:arg `(or ,(expand-next-arg offset) - ,,default)) - (:remaining - (setf *only-simple-args* nil) - '(length args)) - ((nil) ,default) - (t param)))))))) - `(let ,(expander-bindings) - `(let ,(list ,@(runtime-bindings)) - ,@(if ,params - (error - 'format-error - :complaint - "too many parameters, expected no more than ~W" - :args (list ,(length specs)) - :offset (caar ,params))) - ,,@body))) + (dolist (spec specs) + (destructuring-bind (var default) spec + (let ((symbol (sb!xc:gensym "FVAR"))) + (expander-bindings + `(,var ',symbol)) + (runtime-bindings + `(list ',symbol + (let* ((param-and-offset (pop ,params)) + (offset (car param-and-offset)) + (param (cdr param-and-offset))) + (case param + (:arg `(or ,(expand-next-arg offset) ,,default)) + (:remaining + (setf *only-simple-args* nil) + '(length args)) + ((nil) ,default) + (t param)))))))) + `(let ,(expander-bindings) + `(let ,(list ,@(runtime-bindings)) + ,@(if ,params + (error + 'format-error + :complaint "too many parameters, expected no more than ~W" + :args (list ,(length specs)) + :offset (caar ,params))) + ,,@body))) `(progn (when ,params (error 'format-error @@ -351,8 +355,8 @@ (let ((defun-name (intern (format nil "~:@(~:C~)-FORMAT-DIRECTIVE-EXPANDER" char))) - (directive (gensym)) - (directives (if lambda-list (car (last lambda-list)) (gensym)))) + (directive (sb!xc:gensym "DIRECTIVE")) + (directives (if lambda-list (car (last lambda-list)) (sb!xc:gensym "DIRECTIVES")))) `(progn (defun ,defun-name (,directive ,directives) ,@(if lambda-list @@ -368,7 +372,7 @@ ;;; FIXME: only used in this file, could be SB!XC:DEFMACRO in EVAL-WHEN (defmacro def-format-directive (char lambda-list &body body) - (let ((directives (gensym)) + (let ((directives (sb!xc:gensym "DIRECTIVES")) (declarations nil) (body-without-decls body)) (loop @@ -477,8 +481,10 @@ `(format-print-integer stream ,(expand-next-arg) ,colonp ,atsignp ,base ,mincol ,padchar ,commachar ,commainterval)) - `(write ,(expand-next-arg) :stream stream :base ,base :radix nil - :escape nil))) + `(let ((*print-base* ,base) + (*print-radix* nil) + (*print-escape* nil)) + (output-object ,(expand-next-arg) stream)))) (def-format-directive #\D (colonp atsignp params) (expand-format-integer 10 colonp atsignp params)) @@ -497,7 +503,7 @@ ((base nil) (mincol 0) (padchar #\space) (commachar #\,) (commainterval 3)) params - (let ((n-arg (gensym))) + (let ((n-arg (sb!xc:gensym "ARG"))) `(let ((,n-arg ,(expand-next-arg))) (if ,base (format-print-integer stream ,n-arg ,colonp ,atsignp @@ -1241,7 +1247,7 @@ (collect ((param-names) (bindings)) (dolist (param-and-offset params) (let ((param (cdr param-and-offset))) - (let ((param-name (gensym))) + (let ((param-name (sb!xc:gensym "PARAM"))) (param-names param-name) (bindings `(,param-name ,(case param