[elephant-cvs] CVS update: elephant/src/classes.lisp
blee at common-lisp.net
blee at common-lisp.net
Tue Sep 21 19:35:30 UTC 2004
Update of /project/elephant/cvsroot/elephant/src
In directory common-lisp.net:/tmp/cvs-serv2234/src
Modified Files:
classes.lisp
Log Message:
added preliminary support for change-class (though redef
class is broken.)
Date: Tue Sep 21 21:35:29 2004
Author: blee
Index: elephant/src/classes.lisp
diff -u elephant/src/classes.lisp:1.11 elephant/src/classes.lisp:1.12
--- elephant/src/classes.lisp:1.11 Sun Sep 19 19:47:44 2004
+++ elephant/src/classes.lisp Tue Sep 21 21:35:29 2004
@@ -111,6 +111,20 @@
;; let the implementation initialize the transient slots
(apply #'call-next-method instance transient-slot-inits initargs)))))
+(defmethod update-instance-for-different-class :around ((previous persistent) (current persistent) &rest initargs &key)
+ "Need to also update the persistent-slots, which have
+:class allocation."
+ (let ((new-persistent-slots
+ (loop for slotd in (class-slots (class-of current))
+ for slot-name = (slot-definition-name slotd)
+ with old-slot-names = (mapcar #'slot-definition-name
+ (class-slots (class-of previous)))
+ when (and (not (member slot-name old-slot-names :test #'eq))
+ (persistent-p slotd))
+ collect slot-name)))
+ (apply #'shared-initialize current new-persistent-slots initargs)
+ (call-next-method)))
+
(defmethod slot-value-using-class :around (class (instance persistent-object) (slot-def persistent-slot-definition))
"Get the slot value from the database."
(declare (optimize (speed 3))
More information about the Elephant-cvs
mailing list