1.0.36.11: Make slam.sh work on Win32.
[sbcl.git] / src / pcl / init.lisp
index 249e2ac..7e59506 100644 (file)
@@ -32,9 +32,9 @@
   (unless (class-finalized-p class) (finalize-inheritance class))
   (let ((class-default-initargs (class-default-initargs class)))
     (when class-default-initargs
-      (setf initargs (default-initargs class initargs class-default-initargs)))
+      (setf initargs (default-initargs initargs class-default-initargs)))
     (when initargs
-      (when (and (eq *boot-state* 'complete)
+      (when (and (eq **boot-state** 'complete)
                  (not (getf initargs :allow-other-keys)))
         (let ((class-proto (class-prototype class)))
           (check-initargs-1
@@ -49,9 +49,7 @@
       (apply #'initialize-instance instance initargs)
       instance)))
 
-(defmethod default-initargs ((class slot-class)
-                             supplied-initargs
-                             class-default-initargs)
+(defun default-initargs (supplied-initargs class-default-initargs)
   (loop for (key nil fun) in class-default-initargs
         when (eq (getf supplied-initargs key '.not-there.) '.not-there.)
           append (list key (funcall fun)) into default-initargs
   (flet ((initialize-slot-from-initarg (class instance slotd)
            (let ((slot-initargs (slot-definition-initargs slotd)))
              (doplist (initarg value) initargs
-                      (when (memq initarg slot-initargs)
-                        (setf (slot-value-using-class class instance slotd)
-                              value)
-                        (return t)))))
+               (when (memq initarg slot-initargs)
+                 (setf (slot-value-using-class class instance slotd)
+                       value)
+                 (return t)))))
          (initialize-slot-from-initfunction (class instance slotd)
            ;; CLHS: If a before method stores something in a slot,
            ;; that slot won't be initialized from its :INITFORM, if any.
            (let ((initfun (slot-definition-initfunction slotd)))
              (if (typep instance 'structure-object)
-                 (when (eq (funcall
-                            ;; not SLOT-VALUE-USING-CLASS, as that
-                            ;; throws an error if the value is the
-                            ;; unbound marker.
-                            (slot-definition-internal-reader-function slotd)
-                            instance)
-                           +slot-unbound+)
+                 ;; We don't have a consistent unbound marker for structure
+                 ;; object slots, and structure object redefinition is not
+                 ;; really supported anyways -- so unconditionally
+                 ;; initializing the slot should be fine.
+                 (when initfun
                    (setf (slot-value-using-class class instance slotd)
-                         (when initfun
-                           (funcall initfun))))
+                         (funcall initfun)))
                  (unless (or (not initfun)
                              (slot-boundp-using-class class instance slotd))
-                  (setf (slot-value-using-class class instance slotd)
-                        (funcall initfun)))))))
+                   (setf (slot-value-using-class class instance slotd)
+                         (funcall initfun)))))))
     (let* ((class (class-of instance))
            (initfn-slotds
             (loop for slotd in (class-slots class)
                   unless (initialize-slot-from-initarg class instance slotd)
                   collect slotd)))
       (dolist (slotd initfn-slotds)
-        (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)))))
+        (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.