We'll need some properties in other methods on the message.
(defclass aggregating-message (simple-message)
((combination :initarg :combination :type keyword
:reader sod-message-combination)
(defclass aggregating-message (simple-message)
((combination :initarg :combination :type keyword
:reader sod-message-combination)
+ (plist :type list :accessor sod-message-plist)
(kernel-function :type function :reader sod-message-kernel-function))
(:documentation
"Message class for aggregating method combinations.
(kernel-function :type function :reader sod-message-kernel-function))
(:documentation
"Message class for aggregating method combinations.
(defmethod shared-initialize :before
((message aggregating-message) slot-names &key pset)
(declare (ignore slot-names))
(defmethod shared-initialize :before
((message aggregating-message) slot-names &key pset)
(declare (ignore slot-names))
- (with-slots (combination kernel-function) message
+ (with-slots (combination plist kernel-function) message
(let ((most-specific (get-property pset :most-specific :keyword :first))
(comb (get-property pset :combination :keyword)))
(let ((most-specific (get-property pset :most-specific :keyword :first))
(comb (get-property pset :combination :keyword)))
(prop (get-property pset name type magic)))
(unless (eq prop magic)
(setf keys (list* name prop keys)))))
(prop (get-property pset name type magic)))
(unless (eq prop magic)
(setf keys (list* name prop keys)))))
;; Set the kernel function for later.
(setf kernel-function
;; Set the kernel function for later.
(setf kernel-function
(:first methods)
(:last (setf methods (reverse methods))))
arg-names
(:first methods)
(:last (setf methods (reverse methods))))
arg-names
;;;--------------------------------------------------------------------------
;;; Utilities.
;;;--------------------------------------------------------------------------
;;; Utilities.