(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
(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
(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)))))))
(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
;; 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.