0.6.12.49:
[sbcl.git] / src / code / parse-defmacro-errors.lisp
index 271b668..456c352 100644 (file)
 
 ;;; We save space in macro definitions by calling this function.
 (defun do-arg-count-error (error-kind name arg lambda-list minimum maximum)
-  (multiple-value-bind (fname sb!debug:*stack-top-hint*) (find-caller-name)
+  (multiple-value-bind (fname sb!debug:*stack-top-hint*)
+      (find-caller-name-and-frame)
     (error 'defmacro-ll-arg-count-error
           :kind error-kind
-          :function-name fname
           :name name
           :argument arg
           :lambda-list lambda-list
         :initform nil)))
 
 (defun print-defmacro-ll-bind-error-intro (condition stream)
-  (if (null (defmacro-lambda-list-bind-error-name condition))
-      (format stream
-             "error while parsing arguments to ~A in ~S:~%"
-             (defmacro-lambda-list-bind-error-kind condition)
-             (condition-function-name condition))
-      (format stream
-             "error while parsing arguments to ~A ~S:~%"
-             (defmacro-lambda-list-bind-error-kind condition)
-             (defmacro-lambda-list-bind-error-name condition))))
+  (format stream
+         "error while parsing arguments to ~A~@[ ~S~]:~%"
+         (defmacro-lambda-list-bind-error-kind condition)
+         (defmacro-lambda-list-bind-error-name condition)))
 
 (define-condition defmacro-bogus-sublist-error
                  (defmacro-lambda-list-bind-error)
   (:report (lambda (condition stream)
             (print-defmacro-ll-bind-error-intro condition stream)
             (format stream
+                    ;; FIXME: These should probably just be three
+                    ;; subclasses of the base class, so that we don't
+                    ;; need to maintain the set of tags both here and
+                    ;; implicitly wherever this macro is used.
                     (ecase
                         (defmacro-ll-broken-key-list-error-problem condition)
                       (:dotted-list
                        "dotted keyword/value list: ~S")
                       (:odd-length
                        "odd number of elements in keyword/value list: ~S")
-                      (:duplicate
-                       "duplicate keyword: ~S")
                       (:unknown-keyword
                        "~{unknown keyword: ~S; expected one of ~{~S~^, ~}~}"))
                     (defmacro-ll-broken-key-list-error-info condition)))))