;;; Return a LAMBDA form which can be used to set a slot.
(defun slot-setter-lambda-form (dd dsd)
- `(lambda (new-value instance)
- ,(funcall (nth-value 1 (slot-accessor-transforms dd dsd))
- '(dummy new-value instance))))
+ ;; KLUDGE: Evaluating the results of SLOT-ACCESSOR-TRANSFORMS needs
+ ;; a lexenv.
+ (let ((sb!c:*lexenv* (if (boundp 'sb!c:*lexenv*)
+ sb!c:*lexenv*
+ (sb!c::make-null-lexenv))))
+ `(lambda (new-value instance)
+ ,(funcall (nth-value 1 (slot-accessor-transforms dd dsd))
+ '(dummy new-value instance)))))
;;; core compile-time setup of any class with a LAYOUT, used even by
;;; !DEFSTRUCT-WITH-ALTERNATE-METACLASS weirdosities
(inherits (inherits-for-structure dd)))
(%compiler-defstruct dd inherits)))
+;;; finding these beasts
+(defun find-defstruct-description (name &optional (errorp t))
+ (let ((info (layout-info (classoid-layout (find-classoid name errorp)))))
+ (if (defstruct-description-p info)
+ info
+ (when errorp
+ (error "No DEFSTRUCT-DESCRIPTION for ~S." name)))))
+
(/show0 "code/defstruct.lisp end of file")