X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fdescribe.lisp;h=584e709c58adb14827303f818c28344aed6292da;hb=5bf4a6a677c80a71dfa31b5c9c374f986594392f;hp=5033aa113f24d0d80d8eea6f9488d9d88b3407a2;hpb=27155202e7a3c0e997a4fad7ba2aa01fa1a2b7a9;p=sbcl.git diff --git a/src/code/describe.lisp b/src/code/describe.lisp index 5033aa1..584e709 100644 --- a/src/code/describe.lisp +++ b/src/code/describe.lisp @@ -12,21 +12,17 @@ (in-package "SB-IMPL") ;(SB-IMPL, not SB!IMPL, since we're built in warm load.) -(defvar *describe-indentation-step* 3 - #+sb-doc - "the number of spaces that sets off each line of a recursive description") - (declaim (ftype (function (t stream)) describe-object)) -(defgeneric describe-object ((x t) stream)) +(defgeneric describe-object (x stream)) (defun describe (x &optional (stream-designator *standard-output*)) #+sb-doc "Print a description of the object X." (let ((stream (out-synonym-of stream-designator))) + (fresh-line stream) (pprint-logical-block (stream nil) - (fresh-line stream) (describe-object x stream) - (fresh-line stream))) + (pprint-newline :mandatory stream))) (values)) ;;;; miscellaneous DESCRIBE-OBJECT methods @@ -189,7 +185,7 @@ (:function (if name (format s "Function: ~S" x) (format s "~S is a function." x)))) - (format s "~@:_Its associated name (as in ~S) is ~S." + (format s "~@:_~@" 'function-lambda-expression (%fun-name x)) (case (widetag-of x) @@ -213,7 +209,7 @@ (defmethod describe-object ((x function) s) (%describe-fun x s :function)) -(defgeneric describe-symbol-fdefinition (function stream &key (name nil) )) +(defgeneric describe-symbol-fdefinition (function stream &key name)) (defmethod describe-symbol-fdefinition ((fun function) stream &key name) (%describe-fun fun stream :function name)) @@ -245,6 +241,7 @@ (let* ((kind (info :variable :kind x)) (wot (ecase kind (:special "special variable") + (:macro "symbol macro") (:constant "constant") (:global "undefined variable") (:alien nil)))) @@ -257,6 +254,9 @@ (sb-alien::heap-alien-info-type info))) (format s "~@" (eval x)))) + ((eq kind :macro) + (let ((expansion (info :variable :macro-expansion x))) + (format s "~@:_It is a ~A with expansion ~S." wot expansion))) ((boundp x) (format s "~@:_~@" wot (symbol-value x)))