0.8.0.24:
[sbcl.git] / src / code / late-format.lisp
index a7d63bd..ee5deb1 100644 (file)
                  (char-code (format-directive-character directive))))
           (*default-format-error-offset*
            (1- (format-directive-end directive))))
+       (declare (type (or null function) expander))
        (if expander
           (funcall expander directive more-directives)
           (error 'format-error
-                 :complaint "unknown directive"))))
+                 :complaint "unknown directive ~@[(character: ~A)~]"
+                 :args (list (char-name (format-directive-character directive)))))))
     (simple-string
      (values `(write-string ,directive stream)
             more-directives))))
        (values (progn ,@body-without-decls)
               ,directives))))
 
-(eval-when (:compile-toplevel :load-toplevel :execute)
+(eval-when (#-sb-xc :compile-toplevel :load-toplevel :execute)
 
 (defun %set-format-directive-expander (char fn)
   (setf (aref *format-directive-expanders* (char-code (char-upcase char))) fn)
                                         close params string end)
           (expand-format-logical-block prefix per-line-p insides
                                        suffix atsignp))
-        (let ((count (apply #'+ (mapcar (lambda (x) (count-if #'illegal-inside-justification-p x)) segments))))
+        (let ((count (reduce #'+ (mapcar (lambda (x) (count-if #'illegal-inside-justification-p x)) segments))))
           (when (> count 0)
             ;; ANSI specifies that "an error is signalled" in this
             ;; situation.