;;; Slot initializers.
(defmethod make-sod-instance-initializer
- ((class sod-class) nick name value pset &key location)
+ ((class sod-class) nick name value pset &key location inhibit-initargs)
(with-default-error-location (location)
(let* ((slot (find-instance-slot-by-name class nick name))
(initarg-name (get-property pset :initarg :id))
(with-slots (instance-initializers) class
(unless (or initarg-name initializer)
(error "Slot initializer declaration with no effect"))
- (when initarg-name
+ (when (and initarg-name (not inhibit-initargs))
(make-sod-slot-initarg-using-slot class initarg-name slot pset
:location location))
(when initializer
((class sod-class) name (slot sod-slot) pset &key location)
(with-slots (initargs) class
(with-slots ((type %type)) slot
- (push (make-instance (get-property pset :initarg-class :symbol
- 'sod-slot-initarg)
- :location (file-location location)
- :class class :name name :type type :slot slot)
- initargs))))
+ (setf initargs
+ (append initargs
+ (cons (make-instance (get-property pset :initarg-class
+ :symbol
+ 'sod-slot-initarg)
+ :location (file-location location)
+ :class class :name name
+ :type type :slot slot)
+ nil))))))
(defmethod sod-initarg-default ((initarg sod-initarg)) nil)