From: Stas Boukarev Date: Fri, 11 Jan 2013 03:38:13 +0000 (+0400) Subject: format: ~R should check a type only if base is not supplied. X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=63e78fc74df6e60019a9952531c4b7608656f07e;p=sbcl.git format: ~R should check a type only if base is not supplied. (format t "~2r" 1/2) is valid. --- diff --git a/src/code/late-format.lisp b/src/code/late-format.lisp index 9afc2a5..7777866 100644 --- a/src/code/late-format.lisp +++ b/src/code/late-format.lisp @@ -513,7 +513,8 @@ params (let ((n-arg (sb!xc:gensym "ARG"))) `(let ((,n-arg ,(expand-next-arg))) - (unless (integerp ,n-arg) + (unless (or ,base + (integerp ,n-arg)) (error 'format-error :complaint "~s is not of type INTEGER." :args (list ,n-arg) diff --git a/src/code/target-format.lisp b/src/code/target-format.lisp index 399feb0..f8ab91f 100644 --- a/src/code/target-format.lisp +++ b/src/code/target-format.lisp @@ -332,7 +332,8 @@ (commainterval 3)) params (let ((arg (next-arg))) - (unless (integerp arg) + (unless (or base + (integerp arg)) (error 'format-error :complaint "~s is not of type INTEGER." :args (list arg))) diff --git a/tests/print.impure.lisp b/tests/print.impure.lisp index 2e5b391..302fb6e 100644 --- a/tests/print.impure.lisp +++ b/tests/print.impure.lisp @@ -646,7 +646,11 @@ (error "Endless loop in FORMAT")))) (with-test (:name :format-type-check) + (assert (equal "1/10" (format nil "~2r" 1/2))) (assert (raises-error? (format nil "~r" 1.32) sb-format:format-error)) - (assert (raises-error? (format nil "~c" 1.32) sb-format:format-error))) + (assert (raises-error? (format nil "~c" 1.32) sb-format:format-error)) + (assert (equal "1/10" (eval '(format nil "~2r" 1/2)))) + (assert (raises-error? (eval '(format nil "~r" 1.32)) sb-format:format-error)) + (assert (raises-error? (eval '(format nil "~c" 1.32)) sb-format:format-error))) ;;; success