0.8.7.46:
[sbcl.git] / src / pcl / describe.lisp
index e9ae2a4..d459b53 100644 (file)
 
 (defmethod describe-object ((fun standard-generic-function) stream)
   (format stream "~&~A is a generic function." fun)
-  (format stream "~&Its arguments are:~&  ~S"
+  (when (documentation fun t)
+    (format stream "~&  Function documentation: ~A" (documentation fun t)))
+  (format stream "~&Its lambda-list is:~&  ~S"
          (generic-function-pretty-arglist fun))
   (let ((methods (generic-function-methods fun)))
     (if (null methods)
        (format stream "~&It has no methods.~%")
        (let ((gf-name (generic-function-name fun)))
-         (format stream "Its methods are:")
+         (format stream "~&Its methods are:")
          (dolist (method methods)
-           (format stream "~2%    (~A ~{~S ~}~:S) =>"
+           (format stream "~&  (~A ~{~S ~}~:S)~%"
                    gf-name
                    (method-qualifiers method)
                    (unparse-specializers method))
-           (describe (or (method-fast-function method)
-                         (method-function method))
-                     stream))))))
+           (when (documentation method t)
+             (format stream "~&    Method documentation: ~A"
+                     (documentation method t))))))))
 
 (defmethod describe-object ((class class) stream)
   (flet ((pretty-class (c) (or (class-name c) c)))
     (macrolet ((ft (string &rest args) `(format stream ,string ,@args)))
-      (ft "~&~S is a class. It is an instance of ~S."
+      (ft "~&~@<~S is a class. It is an instance of ~S.~:@>"
          class (pretty-class (class-of class)))
       (let ((name (class-name class)))
        (if name
            (if (eq class (find-class name nil))
-               (ft "~&Its proper name is ~S." name)
-               (ft "~&Its name is ~S, but this is not a proper name." name))
-           (ft "It has no name (the name is NIL).~%")))
-      (ft "~&~@<The direct superclasses are: ~:S, and the direct~%~
-          subclasses are: ~:S. The class precedence list is:~2I~_~S~I~_~
-          There are ~S methods specialized for this class.~:>~%"
+               (ft "~&~@<Its proper name is ~S.~@:>" name)
+               (ft "~&~@<Its name is ~S, but this is not a proper name.~@:>"
+                   name))
+           (ft "~&~@<It has no name (the name is NIL).~@:>")))
+      (ft "~&~@<The direct superclasses are: ~:S, and the direct ~
+          subclasses are: ~:S.~I~_The class is ~:[not ~;~]finalized~
+           ~:[. ~;; its class precedence list is:~2I~_~:*~S.~]~I~_~
+          There ~[are~;is~:;are~] ~:*~S method~:P specialized for ~
+           this class.~:@>~%"
          (mapcar #'pretty-class (class-direct-superclasses class))
          (mapcar #'pretty-class (class-direct-subclasses class))
-         (mapcar #'pretty-class (class-precedence-list class))
+         (class-finalized-p class)
+         (mapcar #'pretty-class (cpl-or-nil class))
          (length (specializer-direct-methods class))))))
 
 (defmethod describe-object ((package package) stream)