src/class-make-{proto,impl}.lisp: Better choice of default message class.
authorMark Wooding <mdw@distorted.org.uk>
Sun, 30 Aug 2015 10:07:21 +0000 (11:07 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 30 Aug 2015 17:11:39 +0000 (18:11 +0100)
If a combination is specified, use the new `aggregating-message' by
default.

src/class-make-impl.lisp
src/class-make-proto.lisp

index 1daab39..28c1958 100644 (file)
 (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)))))))
 
index 01e18eb..c04727c 100644 (file)
 
    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