Update of /project/elephant/cvsroot/elephant/src/elephant In directory clnet:/tmp/cvs-serv14475/src/elephant
Modified Files: classes.lisp Log Message: Handle error conditions in change-class protocol; more docs
--- /project/elephant/cvsroot/elephant/src/elephant/classes.lisp 2007/04/24 03:02:27 1.30 +++ /project/elephant/cvsroot/elephant/src/elephant/classes.lisp 2007/04/24 16:39:30 1.31 @@ -177,13 +177,20 @@ (old-persistent-slots class)))) ;; Update new persistent slots, the others we get for free (same oid!) ;; Isn't this done by the default call-next-method? - (apply #'shared-initialize instance new-persistent-slots initargs)) + (apply #'shared-initialize instance new-persistent-slots initargs) + ) ))
;; ;; CLASS CHANGE PROTOCOL ;;
+(defmethod change-class ((inst persistent) (class t) &rest rest) + (error "Changing a persistent instance's class to a non-persistent class is not currently allowed")) + +(defmethod change-class ((inst standard-object) (class persistent-metaclass) &rest rest) + (error "Changing a standard instance to a persistent instance is not supported")) + (defmethod update-instance-for-different-class :around ((previous persistent) (current persistent) &rest initargs &key) (let* ((old-class (class-of previous)) (new-class (class-of current))