0.pre7.14:
[sbcl.git] / src / code / describe.lisp
index 93c17f6..fc7bb94 100644 (file)
@@ -10,7 +10,7 @@
 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
 ;;;; files for more information.
 
-(in-package "SB-IMPL")
+(in-package "SB-IMPL") ;(SB-IMPL, not SB!IMPL, since we're built in warm load.)
 
 (declaim #.*optimize-byte-compilation*)
 
 ;;; Interpreted function describing; handles both closure and
 ;;; non-closure functions. Instead of printing the compiled-from info,
 ;;; we print the definition.
+#+sb-interpreter
 (defun %describe-function-interpreted (x s kind name)
   (declare (type stream s))
   (multiple-value-bind (exp closure-p dname)
          (let ((data (byte-closure-data x)))
            (dotimes (i (length data))
              (format s "~@:_~S: ~S" i (svref data i))))))
+       #+sb-interpreter
        (sb-eval:interpreted-function
        (%describe-function-interpreted x s kind name))
        (standard-generic-function
         (%describe-function (fdefinition x) s :function x)))
 
   ;; FIXME: Print out other stuff from the INFO database:
-  ;;   * Does it name a type or class?
+  ;;   * Does it name a type?
   ;;   * Is it a structure accessor? (This is important since those are 
   ;;     magical in some ways, e.g. blasting the structure if you 
   ;;     redefine them.)
   (%describe-doc x s 'structure "Structure")
   (%describe-doc x s 'type "Type")
   (%describe-doc x s 'setf "Setf macro")
+
   (dolist (assoc (info :random-documentation :stuff x))
     (format s
            "~@:_Documentation on the ~(~A~):~@:_~A"
            (car assoc)
-           (cdr assoc))))
+           (cdr assoc)))
+  
+  ;; Describe the associated class, if any.
+  (let ((symbol-named-class (cl:find-class x nil)))
+    (when symbol-named-class
+      (format t "~&It names a class ~A." symbol-named-class)
+      (describe symbol-named-class))))