"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"