0.8.12.37:
[sbcl.git] / src / code / late-format.lisp
index 77597af..7d4095e 100644 (file)
                   ;; corresponding argument was a list.
                   (t (values 1 1 remaining))))))
           (walk-conditional (conditional directives args)
-            (declare (ignore args))
             (let ((*default-format-error-offset*
                    (1- (format-directive-end conditional))))
               (multiple-value-bind (sublists last-semi-with-colon-p remaining)
                   (parse-conditional-directive directives)
                 (declare (ignore last-semi-with-colon-p))
-                (let ((sub-max (loop for s in sublists
-                                     maximize (nth-value 1 (walk-directive-list s args)))))
+                (let ((sub-max
+                       (loop for s in sublists
+                             maximize (nth-value
+                                       1 (walk-directive-list s args)))))
                   (cond
                     ((format-directive-atsignp conditional)
                      (values 1 (max 1 sub-max) remaining))
             (let ((*default-format-error-offset*
                    (1- (format-directive-end iteration))))
               (let* ((close (find-directive directives #\} nil))
-                     (posn (position close directives))
+                     (posn (or (position close directives)
+                                (error 'format-error
+                                       :complaint "no corresponding close brace")))
                      (remaining (nthcdr (1+ posn) directives)))
                 ;; FIXME: if POSN is zero, the next argument must be
                 ;; a format control (either a function or a string).
                         (unless (format-directive-colonp directive)
                           (incf-both)))
                        ((or (find c "IT%&|_();>") (char= c #\Newline)))
+                        ;; FIXME: check correspondence of ~( and ~)
                        ((char= c #\<)
                         (walk-complex-directive walk-justification))
                        ((char= c #\[)