X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/sod/blobdiff_plain/9e91c8e7b5fcdeb6389ac7ccbcd9c77348c4493a..4307347660f48628e307f299eb4fac58ba35fd1a:/src/class-make-impl.lisp diff --git a/src/class-make-impl.lisp b/src/class-make-impl.lisp index ed6189f..5b8baf0 100644 --- a/src/class-make-impl.lisp +++ b/src/class-make-impl.lisp @@ -243,7 +243,16 @@ (defun check-method-argument-lists (method-type message-type) "Signal an error unless METHOD-TYPE and MESSAGE-TYPE have matching argument lists. - This checks that the two types have matching lists of arguments." + This checks that (a) the two types have matching lists of mandatory + arguments, and (b) that either both or neither types accept keyword + arguments." + (let ((message-keywords-p (typep message-type 'c-keyword-function-type)) + (method-keywords-p (typep method-type 'c-keyword-function-type))) + (cond (message-keywords-p + (unless method-keywords-p + (error "Method must declare a keyword argument list"))) + (method-keywords-p + (error "Method must not declare a keyword argument list")))) (unless (argument-lists-compatible-p (c-function-arguments message-type) (c-function-arguments method-type)) (error "Method arguments ~A don't match message ~A"