- `(defstruct ,(if (var-structure-parent str)
- `(,(var-structure-name str) (:include ,(var-structure-name (var-structure-parent str))
- (,(var-structure-discriminator-slot (var-structure-parent str))
- ,(first (var-structure-variant-discriminating-values
- (find str
- (var-structure-variants
- (var-structure-parent str))
- :key #'var-structure-variant-structure))))))
- `,(var-structure-name str))
- ,@(iter (for slot in (var-structure-slots str))
- (collect `(,(cstruct-slot-description-name slot)
- ,(cstruct-slot-description-initform slot))))))
+ (let ((name (var-structure-name str)))
+ `(progn
+ (defstruct ,(if (var-structure-parent str)
+ `(,(var-structure-name str) (:include ,(var-structure-name (var-structure-parent str))
+ (,(var-structure-discriminator-slot (var-structure-parent str))
+ ,(first (var-structure-variant-discriminating-values
+ (find str
+ (var-structure-variants
+ (var-structure-parent str))
+ :key #'var-structure-variant-structure))))))
+ `,(var-structure-name str))
+ ,@(iter (for slot in (var-structure-slots str))
+ (collect `(,(cstruct-slot-description-name slot)
+ ,(cstruct-slot-description-initform slot)))))
+ (setf (get ',name 'structure-constructor)
+ ',(intern (format nil "MAKE-~A" (symbol-name name)) (symbol-package name))))))