X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fdescribe.lisp;h=94afc2c71971457a23ba8e84a9556f20c67aaf43;hb=872175cd9cb5b4966a36d4bd92421cc407a0355b;hp=93c17f66d65ab9357fb5b6d471024b42ec774436;hpb=30d3955b07af6b6b2e52699f213e3b87b11e0f2d;p=sbcl.git diff --git a/src/code/describe.lisp b/src/code/describe.lisp index 93c17f6..94afc2c 100644 --- a/src/code/describe.lisp +++ b/src/code/describe.lisp @@ -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*) @@ -132,34 +132,6 @@ ~:[no~;~] expansion is available." inlinep (info :function :inline-expansion name)))))) -;;; Interpreted function describing; handles both closure and -;;; non-closure functions. Instead of printing the compiled-from info, -;;; we print the definition. -(defun %describe-function-interpreted (x s kind name) - (declare (type stream s)) - (multiple-value-bind (exp closure-p dname) - (sb-eval:interpreted-function-lambda-expression x) - (let ((args (sb-eval:interpreted-function-arglist x))) - (format s "~@:_~@(~@[~A ~]arguments:~@:_~)" kind) - (if args - (format s " ~<~S~:>" args) - (write-string " There are no arguments." s))) - (let ((name (or name dname))) - (%describe-doc name s 'function kind) - (unless (eq kind :macro) - (%describe-function-name - name - s - (type-specifier (sb-eval:interpreted-function-type x))))) - (when closure-p - (format s "~@:_Its closure environment is:~%") - (pprint-logical-block (s nil) - (pprint-indent :current 2) - (let ((closure (sb-eval:interpreted-function-closure x))) - (dotimes (i (length closure)) - (format s "~@:_~S: ~S" i (svref closure i)))))) - (format s "~@:_Its definition is:~@:_ ~S" exp))) - ;;; Print information from the debug-info about where CODE-OBJ was ;;; compiled from. (defun %describe-compiled-from (code-obj s) @@ -256,8 +228,6 @@ (let ((data (byte-closure-data x))) (dotimes (i (length data)) (format s "~@:_~S: ~S" i (svref data i)))))) - (sb-eval:interpreted-function - (%describe-function-interpreted x s kind name)) (standard-generic-function ;; There should be a special method for this case; we'll ;; delegate to that. @@ -326,7 +296,7 @@ (%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.) @@ -335,8 +305,15 @@ (%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))))