0.9.6.37:
authorChristophe Rhodes <csr21@cam.ac.uk>
Wed, 9 Nov 2005 15:54:02 +0000 (15:54 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Wed, 9 Nov 2005 15:54:02 +0000 (15:54 +0000)
Do the CHANGE-CLASS checking for funcallable-standard-objects
too.

src/pcl/std-class.lisp
version.lisp-expr

index 9952a16..4caecc6 100644 (file)
 (defmethod change-class ((instance funcallable-standard-object)
                          (new-class funcallable-standard-class)
                          &rest initargs)
+  (let ((cpl (class-precedence-list new-class)))
+    (dolist (class cpl)
+      (macrolet
+          ((frob (class-name)
+             `(when (eq class (find-class ',class-name))
+               (error 'metaobject-initialization-violation
+                :format-control "~@<Cannot ~S objects into ~S metaobjects.~@:>"
+                :format-arguments (list 'change-class ',class-name)
+                :references (list '(:amop :initialization ,class-name))))))
+        (frob class)
+        (frob generic-function)
+        (frob method)
+        (frob slot-definition))))
   (change-class-internal instance new-class initargs))
 
 (defmethod change-class ((instance standard-object)
index 7914857..cdd8eaf 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.9.6.36"
+"0.9.6.37"