[Openmcl-devel] check-defmethod-congruency error message
Gary King
gwking at metabang.com
Tue Jan 24 10:44:20 PST 2006
I'm also a fan of the new message and of leaving off the process
prefix when the error happens via the listener...
On Jan 19, 2006, at 11:01 PM, Gary Byers wrote:
>
>
> On Thu, 19 Jan 2006, John Wiseman wrote:
>
>> Currently ccl::check-defmethod-congruency reports incongruent lambda
>> lists like this:
>>
>>> Error in process listener(1): Incompatible lambda list in
>> #<STANDARD-METHOD ADD-DOCUMENT (DOCUMENT-WRITER T)> for
>> #<STANDARD-GENERIC-FUNCTION ADD-DOCUMENT #x8422EB6>
>>
>> How about changing it to report this instead:
>>
>>> Error in process listener(1): Method #<STANDARD-METHOD ADD-DOCUMENT
>> (DOCUMENT-WRITER T)> has lambda list (SELF DOC &OPTIONAL ANALYZER)
>> which is incompatible with generic function's lambda list, (SELF DOC)
>>
>> It just seems friendlier to show me the current GF lambda list
>> than to
>> make me hunt down the definition (that I have apparently forgotten or
>> I might not have made the error in the first place).
>>
>>
>> John
>>
>>
>> (defun check-defmethod-congruency (gf method)
>> (unless (congruent-lambda-lists-p gf method)
>> (cerror (format nil
>> "Remove ~d method~:p from the generic-function and change its
>> lambda list."
>> (length (%gf-methods gf)))
>> "Method ~S has lambda list ~S which is incompatible with generic
>> function's lambda list, ~S"
>> method (method-lambda-list method) (generic-function-lambda-list
>> gf))
>> (loop
>> (let ((methods (%gf-methods gf)))
>> (if methods
>> (remove-method gf (car methods))
>> (return))))
>> (%set-defgeneric-keys gf nil)
>> (inner-lfun-bits gf (%ilogior (%ilsl $lfbits-gfn-bit 1)
>> (%ilogand $lfbits-args-mask
>> (lfun-bits (%method-
>> function method))))))
>> gf)
>>
>>
>
> Agreed.
>
> While playing around with this, I noticed that the code that prints
> (e.g.)
> "Error in process ..." was originally not supposed to print the extra
> "... in process ..." if the process in question was the initial
> listener,
> but it wasn't testing for that correctly. I've gotten used enough to
> seeing the longer error message prefix, so at first glance:
>
>> Error: Lambda list of method #<STANDARD-METHOD STREAM-WRITE-STRING
>> (T T)>,
>> which is (STREAM STRING &OPTIONAL (START 0)),
>> is incompatible with that of the generic function STREAM-
>> WRITE-STRING,
>> which is (STREAM STRING &OPTIONAL START END).
>> While executing: CHECK-DEFMETHOD-CONGRUENCY
>
> looks kind of wrong, but the shorter prefix makes it more likely
> that a long/
> multiline error message will be readable.
>
> Another approach would be to always print process context info, but to
> print it along with other context info, e.g.:
>
>> While executing: CHECK-DEFMETHOD-CONGRUENCY in process listener(1).
>
> When dealing with the standard tty environment, the process context is
> almost "dog bites man". As everyone knows, it's the "man bites dog"
> (error/warning occurred in some process other than the listener) case
> that's generally more newsworthy.
>
> Whether it's always printed or not, I think I'd rather see the process
> info -not- causing long error messages to be even harder to read.
> Does
> anyone object to this change, or know offhand if it would break
> existing
> code (SLIME, possibly ?)
>
>
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/mailman/listinfo/openmcl-devel
--
Gary Warren King
metabang.com
http://www.metabang.com/
More information about the Openmcl-devel
mailing list