It seems that CCL is more liberal/comprehensive than other Lisps in
its usage of MAKE-INSTANCES-OBSOLETE. I haven't dived further into
this but the following patch fixes the issue specifically for OpenMCL:

diff -rN -u old-elephant-1.0/src/elephant/classes.lisp
new-elephant-1.0/src/elephant/classes.lisp
--- old-elephant-1.0/src/elephant/classes.lisp  2009-05-04 08:47:38.533508088 
+0200
+++ new-elephant-1.0/src/elephant/classes.lisp  2009-05-04 08:47:39.830174415 
+0200
@@ -364,6 +364,20 @@
 ;;    (unless (match-schemas (%class-schema class) current-schema))
       (prog1
          (call-next-method)
+        ;; OpenMCL seems to make additional instances of differing types 
obsolete.
+        ;; Let's use a high-level approach until we have figured out how to 
handle this
+        ;; properly.
+        #+openmcl
+        (progn
+          (unless (schema-predecessor current-schema)
+            ;; make sure the class schema is up to date
+            (synchronize-stores-for-class (class-of instance)))
+          (let ((schema-predecessor (schema-predecessor current-schema)))
+            (when schema-predecessor
+              (let ((prior-schema (get-controller-schema sc 
schema-predecessor)))
+                (assert (and current-schema prior-schema))
+                (upgrade-db-instance instance current-schema prior-schema
property-list)))))
+        #-openmcl
        (let ((prior-schema (aif (schema-predecessor current-schema)
                                 (get-controller-schema sc it)
                                 (error "If the schemas mismatch, a derived 
controller
schema should have been computed"))))

If no one objects within the next few days I will push it.

  Leslie

-- 
http://www.linkedin.com/in/polzer


_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel

Reply via email to