0.9.6.31:
authorChristophe Rhodes <csr21@cam.ac.uk>
Mon, 7 Nov 2005 20:55:56 +0000 (20:55 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Mon, 7 Nov 2005 20:55:56 +0000 (20:55 +0000)
Better error messages for method initialization violations

src/code/condition.lisp
src/pcl/methods.lisp
version.lisp-expr

index c0f051d..165fa06 100644 (file)
      (format stream ", ")
      (destructuring-bind (type data) (cdr reference)
        (ecase type
+         (:initialization
+          (format stream "Initialization of ~A Metaobjects" data))
          (:generic-function (format stream "Generic Function ~S" data))
          (:section (format stream "Section ~{~D~^.~}" data)))))
     (:ansi-cl
index ae16f99..4122b7b 100644 (file)
 ;;;
 ;;; Methods are not reinitializable.
 
-(defmethod reinitialize-instance ((method standard-method) &rest initargs)
-  (declare (ignore initargs))
-  (error "An attempt was made to reinitialize the method ~S.~%~
-          Method objects cannot be reinitialized."
-         method))
-
+(define-condition metaobject-initialization-violation 
+    (reference-condition simple-condition)
+  ())  
+
+(macrolet ((def (name args control)
+               `(defmethod ,name ,args
+                 (declare (ignore initargs))
+                 (error 'metaobject-initialization-violation
+                  :format-control ,(format nil "~@<~A~@:>" control )
+                  :format-arguments (list ',name)
+                  :references (list '(:amop :initialization "Method"))))))
+  (def reinitialize-instance ((method method) &rest initargs)
+    "Method objects cannot be redefined by ~S.")
+  (def change-class ((method method) new &rest initargs)
+    "Method objects cannot be redefined by ~S.")
+  ;; FIXME: NEW being a subclass of METHOD.
+  (def update-instance-for-redefined-class ((method method) added discarded 
+                                            plist &rest initargs)
+    "No behaviour specified for ~S on method objects.")
+  (def update-instance-for-different-class (old (new method) &rest initargs)
+    "No behaviour specified for ~S on method objects.")
+  (def update-instance-for-different-class ((old method) new &rest initargs)
+    "No behaviour specified for ~S on method objects."))
+  
 (defmethod legal-documentation-p ((object standard-method) x)
   (if (or (null x) (stringp x))
       t
index 905c7e6..65c8b29 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.30"
+"0.9.6.31"