chiark / gitweb /
New feature: messages with keyword arguments!
[sod] / src / class-make-impl.lisp
index ed6189f982ae27e2862e054e8d9875facf02de48..5b8baf0a0e5ec0cdf19548758dd763b1871ec9c6 100644 (file)
@@ -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"