If a combination is specified, use the new `aggregating-message' by
default.
(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 :message-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)))))))
This is the main constructor function for messages. This is a generic
function primarily so that the CLASS can intervene in the construction
This is the main constructor function for messages. This is a generic
function primarily so that the CLASS can intervene in the construction
- process. The default method uses the `:message-class' property
- (defaulting to `sod-message') to choose a (CLOS) class to instantiate.
- The message is then constructed by `make-instance' passing the arguments
- as initargs; further behaviour is left to the standard CLOS instance
- construction protocol; for example, `sod-message' defines an
- `:after'-method on `shared-initialize'."))
+ process. The default method uses the `:message-class' property to choose
+ a (CLOS) class to instantiate; if no such property is provided but a
+ `combination' property is present, then `aggregating-message' is chosen;
+ otherwise `standard-message' is used. The message is then constructed by
+ `make-instance' passing the arguments as initargs; further behaviour is
+ left to the standard CLOS instance construction protocol; for example,
+ `sod-message' defines an `:after'-method on `shared-initialize'."))
(export 'make-sod-method)
(defgeneric make-sod-method
(export 'make-sod-method)
(defgeneric make-sod-method