1.0.23.36: typecheck :ALLOCATION :CLASS slot initforms in safe code
[sbcl.git] / src / pcl / init.lisp
index 912c197..249e2ac 100644 (file)
                   unless (initialize-slot-from-initarg class instance slotd)
                   collect slotd)))
       (dolist (slotd initfn-slotds)
-        (if (eq (slot-definition-allocation slotd) :class)
-            (when (or (eq t slot-names)
-                      (memq (slot-definition-name slotd) slot-names))
-              (unless (slot-boundp-using-class class instance slotd)
-                (initialize-slot-from-initfunction class instance slotd)))
-            (when (or (eq t slot-names)
-                      (memq (slot-definition-name slotd) slot-names))
-              (initialize-slot-from-initfunction class instance slotd)))))
+        (unless (eq (slot-definition-allocation slotd) :class)
+          ;; :ALLOCATION :CLASS slots use the :INITFORM when class is defined
+          ;; or redefined, not when instances are allocated.
+          (when (or (eq t slot-names)
+                    (memq (slot-definition-name slotd) slot-names))
+            (initialize-slot-from-initfunction class instance slotd)))))
     instance))
 \f
 ;;; If initargs are valid return nil, otherwise signal an error.