An actual running implementation, which makes code that compiles.
[sod] / src / class-make-impl.lisp
index 4470416..09ce441 100644 (file)
@@ -87,8 +87,7 @@
                               :location (file-location location)
                               :pset pset)))
       (with-slots (slots) class
-       (setf slots (append slots (list slot))))
-      (check-unused-properties pset))))
+       (setf slots (append slots (list slot)))))))
 
 (defmethod shared-initialize :after ((slot sod-slot) slot-names &key pset)
   "This method does nothing.
                         (file-location location))))
       (with-slots (instance-initializers) class
        (setf instance-initializers
-             (append instance-initializers (list initializer))))
-      (check-unused-properties pset))))
+             (append instance-initializers (list initializer)))))))
 
 (defmethod make-sod-class-initializer
     ((class sod-class) nick name value-kind value-form pset
                         (file-location location))))
       (with-slots (class-initializers) class
        (setf class-initializers
-             (append class-initializers (list initializer))))
-      (check-unused-properties pset))))
+             (append class-initializers (list initializer)))))))
 
 (defmethod make-sod-initializer-using-slot
     ((class sod-class) (slot sod-slot)
                                  :location (file-location location)
                                  :pset pset)))
       (with-slots (messages) class
-       (setf messages (append messages (list message))))
-      (check-unused-properties pset))))
+       (setf messages (append messages (list message)))))))
 
 (defmethod shared-initialize :after
     ((message sod-message) slot-names &key pset)
                                                  type body pset
                                                  (file-location location))))
       (with-slots (methods) class
-       (setf methods (append methods (list method)))))
-    (check-unused-properties pset)))
+       (setf methods (append methods (list method)))))))
 
 (defmethod make-sod-method-using-message
     ((message sod-message) (class sod-class) type body pset location)
   ;; Check that the arguments are named if we have a method body.
   (with-slots (body type) method
     (unless (or (not body)
-               (every #'argument-name (c-function-arguments type)))
+               (every (lambda (arg)
+                        (or (argument-name arg)
+                            (eq (argument-type arg) (c-type void))))
+                      (c-function-arguments type)))
       (error "Abstract declarators not permitted in method definitions")))
 
   ;; Check the method type.