X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fpcl%2Fenv.lisp;h=0a63836cffa14683b692efcfde14a929fafea2d5;hb=8cd045dfd24638b1958f1507f944f249d2d2ccde;hp=be5e67740b61e260888b4c3cce4ea6d3c2c30162;hpb=3a5eefac8a65dfd36729031f0a9b9dd8c022b7f2;p=sbcl.git diff --git a/src/pcl/env.lisp b/src/pcl/env.lisp index be5e677..0a63836 100644 --- a/src/pcl/env.lisp +++ b/src/pcl/env.lisp @@ -157,20 +157,22 @@ (error "~@" object 'make-load-form)) -(defun make-load-form-saving-slots (object &key slot-names environment) +(defun make-load-form-saving-slots (object &key (slot-names nil slot-names-p) environment) (declare (ignore environment)) (let ((class (class-of object))) (collect ((inits)) (dolist (slot (class-slots class)) (let ((slot-name (slot-definition-name slot))) (when (or (memq slot-name slot-names) - (and (null slot-names) + (and (not slot-names-p) (eq :instance (slot-definition-allocation slot)))) (if (slot-boundp-using-class class object slot) (let ((value (slot-value-using-class class object slot))) (if (typep object 'structure-object) ;; low-level but less noisy initializer form - (let* ((dd (get-structure-dd (class-name class))) + ;; FIXME: why not go class->layout->info == dd? + (let* ((dd (find-defstruct-description + (class-name class))) (dsd (find slot-name (dd-slots dd) :key #'dsd-name))) (inits `(,(slot-setter-lambda-form dd dsd)