[elephant-cvs] CVS elephant/src/elephant
rread
rread at common-lisp.net
Wed Mar 1 18:57:34 UTC 2006
Update of /project/elephant/cvsroot/elephant/src/elephant
In directory clnet:/tmp/cvs-serv22716/src/elephant
Modified Files:
classes.lisp classindex-utils.lisp classindex.lisp
elephant.lisp serializer.lisp
Log Message:
Workaround for SBCL 0.9.9 weirdness and making the tests repeatably runnable.
--- /project/elephant/cvsroot/elephant/src/elephant/classes.lisp 2006/02/25 20:53:57 1.7
+++ /project/elephant/cvsroot/elephant/src/elephant/classes.lisp 2006/03/01 18:57:34 1.8
@@ -130,6 +130,7 @@
;; situation where we write the class or index page that we are currently reading
;; via a cursor without going through the cursor abstraction. There has to be a
;; better way to do this.
+
(when (and (indexed class) (not from-oid))
(let ((class-index (find-class-index class)))
(when class-index
--- /project/elephant/cvsroot/elephant/src/elephant/classindex-utils.lisp 2006/02/19 04:53:00 1.1
+++ /project/elephant/cvsroot/elephant/src/elephant/classindex-utils.lisp 2006/03/01 18:57:34 1.2
@@ -139,5 +139,29 @@
(disable-class-indexing name)
(flush-instance-cache *store-controller*)
(setf (find-class name) nil)))
-
-
+
+
+;; Rob created this just for some debugging.
+;; It seesm theoretically possible that we could make
+;; a function that fully checks the consinstency of the index;
+;; that is, that the indexed classes indeed exist in the store.
+(defun dump-class-index (c)
+ (let ((idx (find-class-index c)))
+ (dump-btree
+ idx)
+ )
+)
+(defun report-indexed-classes (&key (class nil) (sc *store-controller*))
+ (format t "indexed-classes:~%")
+ (let ((bt (controller-class-root sc)))
+ (declare (type btree bt))
+ (dump-btree bt)
+ (if class
+ (dump-class-index class)
+ (map-btree
+ #'(lambda (k v)
+ (dump-class-index k)
+ )
+ bt))
+ )
+ )
--- /project/elephant/cvsroot/elephant/src/elephant/classindex.lisp 2006/02/25 20:53:57 1.5
+++ /project/elephant/cvsroot/elephant/src/elephant/classindex.lisp 2006/03/01 18:57:34 1.6
@@ -98,6 +98,9 @@
(defmethod find-class-index ((class-name symbol) &key (sc *store-controller*) (errorp t))
(find-class-index (find-class class-name) :sc sc :errorp errorp))
+(defmethod class-indexedp-by-name ((class-name symbol) &key (sc *store-controller*) (errorp t))
+ (get-value class-name (controller-class-root sc)))
+
(defmethod find-class-index ((class persistent-metaclass) &key (sc *store-controller*) (errorp t))
(ensure-finalized class)
(if (not (indexed class))
--- /project/elephant/cvsroot/elephant/src/elephant/elephant.lisp 2006/02/21 19:40:03 1.2
+++ /project/elephant/cvsroot/elephant/src/elephant/elephant.lisp 2006/03/01 18:57:34 1.3
@@ -70,6 +70,8 @@
#:add-class-slot-index #:remove-class-slot-index
#:add-class-derived-index #:remove-class-derived-index
#:describe-db-class-index
+ #:report-indexed-classes
+ #:class-indexedp-by-name
;; Low level cursor API
#:make-inverted-cursor #:make-class-cursor
--- /project/elephant/cvsroot/elephant/src/elephant/serializer.lisp 2006/02/19 04:53:00 1.1
+++ /project/elephant/cvsroot/elephant/src/elephant/serializer.lisp 2006/03/01 18:57:34 1.2
@@ -69,7 +69,7 @@
(labels
((%serialize (frob)
(declare (optimize (speed 3) (safety 0)))
- (etypecase frob
+ (typecase frob
(fixnum
(buffer-write-byte +fixnum+ bs)
(buffer-write-int frob bs))
@@ -115,7 +115,17 @@
(persistent
(buffer-write-byte +persistent+ bs)
(buffer-write-int (oid frob) bs)
- (%serialize (type-of frob)))
+ ;; This circumlocution is necessitated by
+ ;; an apparent bug in SBCL 9.9 --- type-of sometimes
+ ;; does NOT return the "proper name" of the class as the
+ ;; CLHS says it should, but gives the class object itself,
+ ;; which cannot be directly serialized....
+ (let ((tp (type-of frob)))
+ #+(or sbcl)
+ (if (not (symbolp tp))
+ (setf tp (class-name (class-of frob))))
+ (%serialize tp))
+ )
#-(and :lispworks (or :win32 :linux))
(single-float
(buffer-write-byte +single-float+ bs)
More information about the Elephant-cvs
mailing list