chiark / gitweb /
src/class-make-{proto,impl}.lisp: Don't always add initializers to classes.
[sod] / src / class-make-impl.lisp
index 1da8bacbab7ac8aeb0c403a7b2b0cfb8b511a83c..02fd5f55311cebb6433396b8636b46320960b326 100644 (file)
@@ -115,7 +115,8 @@ (defmethod shared-initialize :after ((slot sod-slot) slot-names &key pset)
 ;;; Slot initializers.
 
 (defmethod make-sod-instance-initializer
-    ((class sod-class) nick name value pset &key location inhibit-initargs)
+    ((class sod-class) nick name value pset
+     &key location inhibit-initargs (add-to-class t))
   (with-default-error-location (location)
     (let* ((slot (find-instance-slot-by-name class nick name))
           (initarg-name (get-property pset :initarg :id))
@@ -129,21 +130,22 @@ (defmethod make-sod-instance-initializer
        (when (and initarg-name (not inhibit-initargs))
          (make-sod-slot-initarg-using-slot class initarg-name slot pset
                                            :location location))
-       (when initializer
+       (when (and initializer add-to-class)
          (setf instance-initializers
                (append instance-initializers (list initializer)))))
       initializer)))
 
 (defmethod make-sod-class-initializer
-    ((class sod-class) nick name value pset &key location)
+    ((class sod-class) nick name value pset &key location (add-to-class t))
   (with-default-error-location (location)
     (let* ((slot (find-class-slot-by-name class nick name))
           (initializer (make-sod-initializer-using-slot
                         class slot 'sod-class-initializer
                         value pset (file-location location))))
-      (with-slots (class-initializers) class
-       (setf class-initializers
-             (append class-initializers (list initializer))))
+      (when add-to-class
+       (with-slots (class-initializers) class
+         (setf class-initializers
+               (append class-initializers (list initializer)))))
       initializer)))
 
 (defmethod make-sod-initializer-using-slot