{\dhead{gf}
{make-sod-instance-initializer
\=@<class> @<nick> @<name> @<value> @<pset> \\
- \>\&key :inhibit-initargs :location
+ \>\&key :inhibit-initargs :location :add-to-class
\nlret @<init>}
\dhead{gf}
{make-sod-class-initializer
- \=@<class> @<nick> @<name> @<value> @<pset> \&key :location
+ \=@<class> @<nick> @<name> @<value> @<pset> \\
+ \>\&key :location :add-to-class
\nlret @<init>}}
\end{describe*}
;;; 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))
(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
(export 'make-sod-instance-initializer)
(defgeneric make-sod-instance-initializer
- (class nick name value pset &key location inhibit-initargs)
+ (class nick name value pset &key location inhibit-initargs add-to-class)
(:documentation
"Construct and attach an instance slot initializer, to CLASS.
construction process. The default method looks up the slot using
`find-instance-slot-by-name', calls `make-sod-initializer-using-slot' to
actually make the initializer object, and adds it to the appropriate list
- in CLASS.
+ in CLASS unless ADD-TO-CLASS is nil.
Usually, if an `initarg' property is set on PSET, then a slot initarg is
created and attached to the slot; this can be prevented by setting
(export 'make-sod-class-initializer)
(defgeneric make-sod-class-initializer
- (class nick name value pset &key location)
+ (class nick name value pset &key location add-to-class)
(:documentation
"Construct and attach a class slot initializer, to CLASS.
construction process. The default method looks up the slot using
`find-class-slot-by-name', calls `make-sod-initializer-using-slot' to
actually make the initializer object, and adds it to the appropriate list
- in CLASS."))
+ in CLASS unless ADD-TO-CLASS is nil."))
(export 'make-sod-initializer-using-slot)
(defgeneric make-sod-initializer-using-slot