chiark / gitweb /
src/classes.lisp, src/class-layout-proto.lisp: Docstring fixes.
[sod] / src / class-make-impl.lisp
index ae65392185aed89338ef05891dc1123f7e7bb68d..28c1958ef81741eee965e5d3c8d8927a363b328a 100644 (file)
@@ -79,7 +79,7 @@   (default-slot-from-property (class 'chain-link slot-names)
 (defmethod make-sod-slot
     ((class sod-class) name type pset &optional location)
   (with-default-error-location (location)
 (defmethod make-sod-slot
     ((class sod-class) name type pset &optional location)
   (with-default-error-location (location)
-    (let ((slot (make-instance (get-property pset :lisp-class :symbol
+    (let ((slot (make-instance (get-property pset :slot-class :symbol
                                             'sod-slot)
                               :class class
                               :name name
                                             'sod-slot)
                               :class class
                               :name name
@@ -129,7 +129,7 @@ (defmethod make-sod-class-initializer
 (defmethod make-sod-initializer-using-slot
     ((class sod-class) (slot sod-slot)
      init-class value-kind value-form pset location)
 (defmethod make-sod-initializer-using-slot
     ((class sod-class) (slot sod-slot)
      init-class value-kind value-form pset location)
-  (make-instance (get-property pset :lisp-class :symbol init-class)
+  (make-instance (get-property pset :initializer-class :symbol init-class)
                 :class class
                 :slot slot
                 :value-kind value-kind
                 :class class
                 :slot slot
                 :value-kind value-kind
@@ -152,13 +152,16 @@ (defmethod shared-initialize :after
 (defmethod make-sod-message
     ((class sod-class) name type pset &optional location)
   (with-default-error-location (location)
 (defmethod make-sod-message
     ((class sod-class) name type pset &optional location)
   (with-default-error-location (location)
-    (let ((message (make-instance (get-property pset :lisp-class :symbol
-                                               'standard-message)
-                                 :class class
-                                 :name name
-                                 :type type
-                                 :location (file-location location)
-                                 :pset pset)))
+    (let* ((msg-class (or (get-property pset :message-class :symbol)
+                         (and (get-property pset :combination :keyword)
+                              'aggregating-message)
+                         'standard-message))
+          (message (make-instance msg-class
+                                  :class class
+                                  :name name
+                                  :type type
+                                  :location (file-location location)
+                                  :pset pset)))
       (with-slots (messages) class
        (setf messages (append messages (list message)))))))
 
       (with-slots (messages) class
        (setf messages (append messages (list message)))))))
 
@@ -189,7 +192,7 @@ (defmethod make-sod-method
 
 (defmethod make-sod-method-using-message
     ((message sod-message) (class sod-class) type body pset location)
 
 (defmethod make-sod-method-using-message
     ((message sod-message) (class sod-class) type body pset location)
-  (make-instance (or (get-property pset :lisp-class :symbol)
+  (make-instance (or (get-property pset :method-class :symbol)
                     (sod-message-method-class message class pset))
                 :message message
                 :class class
                     (sod-message-method-class message class pset))
                 :message message
                 :class class
@@ -210,7 +213,10 @@ (defmethod shared-initialize :after
   ;; Check that the arguments are named if we have a method body.
   (with-slots (body type) method
     (unless (or (not body)
   ;; 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.
       (error "Abstract declarators not permitted in method definitions")))
 
   ;; Check the method type.