0.8.19.15:
authorChristophe Rhodes <csr21@cam.ac.uk>
Fri, 4 Feb 2005 17:23:03 +0000 (17:23 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Fri, 4 Feb 2005 17:23:03 +0000 (17:23 +0000)
Maybe speed up PCL a tiny bit more
... make the slot positioning a little less confusing, so that
the 'same' slot tends to be in the same location;
... this should help the clever DFUN mechanism to keep neat ones
like ONE-INDEX around;
... (also this puts slots in objects in the 'expected' order --
frob sb-aclrepl's dealing with the unexpected

contrib/sb-aclrepl/inspect.lisp
src/pcl/std-class.lisp
version.lisp-expr

index c2378b6..8611d9d 100644 (file)
@@ -791,7 +791,7 @@ cons cells and LIST-TYPE is :normal, :dotted, or :cyclic"
 (defun inspected-standard-object-parts (object)
   (let ((components nil)
        (class-slots (sb-pcl::class-slots (class-of object))))
-    (dolist (class-slot class-slots components)
+    (dolist (class-slot class-slots (nreverse components))
       (let* ((slot-name (slot-value class-slot 'sb-pcl::name))
             (slot-value (if (slot-boundp object slot-name)
                             (slot-value object slot-name)
index 3a6b3b9..261941d 100644 (file)
          :class class
          initargs))
 
+;;; I (CSR) am not sure, but I believe that the particular order of
+;;; slots is quite important: it is ideal to attempt to have a
+;;; constant slot location for the same notional slots as much as
+;;; possible, so that clever discriminating functions (ONE-INDEX et
+;;; al.) have a chance of working.  The below at least walks through
+;;; the slots predictably, but maybe it would be good to compute some
+;;; kind of optimal slot layout by looking at locations of slots in
+;;; superclasses?
 (defmethod compute-slots ((class std-class))
   ;; As specified, we must call COMPUTE-EFFECTIVE-SLOT-DEFINITION once
   ;; for each different slot name we find in our superclasses. Each
   ;; call receives the class and a list of the dslotds with that name.
   ;; The list is in most-specific-first order.
   (let ((name-dslotds-alist ()))
-    (dolist (c (class-precedence-list class))
+    (dolist (c (reverse (class-precedence-list class)))
       (dolist (slot (class-direct-slots c))
        (let* ((name (slot-definition-name slot))
               (entry (assq name name-dslotds-alist)))
     (mapcar (lambda (direct)
              (compute-effective-slot-definition class
                                                 (car direct)
-                                                (nreverse (cdr direct))))
-           name-dslotds-alist)))
+                                                (cdr direct)))
+           (nreverse name-dslotds-alist))))
 
 (defmethod compute-slots ((class standard-class))
   (call-next-method))
index 030c40b..b2bb4e6 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.19.14"
+"0.8.19.15"