X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fcode%2Fparse-defmacro-errors.lisp;h=456c35271db8fbd64a1c9b6013e4a511d129be56;hb=7dd568fb64927be78556ac27f1f0dc60e79cf942;hp=883cb0d75a0b358c01b060aba487baf15e46953e;hpb=a530bbe337109d898d5b4a001fc8f1afa3b5dc39;p=sbcl.git diff --git a/src/code/parse-defmacro-errors.lisp b/src/code/parse-defmacro-errors.lisp index 883cb0d..456c352 100644 --- a/src/code/parse-defmacro-errors.lisp +++ b/src/code/parse-defmacro-errors.lisp @@ -15,15 +15,12 @@ (in-package "SB!KERNEL") -(file-comment - "$Header$") - ;;; 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 @@ -37,15 +34,10 @@ :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) @@ -96,14 +88,16 @@ (: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)))))