0.7.9.65:
[sbcl.git] / src / code / describe.lisp
index 5033aa1..584e709 100644 (file)
 
 (in-package "SB-IMPL") ;(SB-IMPL, not SB!IMPL, since we're built in warm load.)
 \f
-(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))
 \f
 ;;;; miscellaneous DESCRIBE-OBJECT methods
     (: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 "~@:_~@<Its associated name (as in ~S) is ~2I~_~S.~:>"
          'function-lambda-expression
          (%fun-name x))
   (case (widetag-of x)
 (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))
   (let* ((kind (info :variable :kind x))
         (wot (ecase kind
                (:special "special variable")
+                (:macro "symbol macro")
                (:constant "constant")
                (:global "undefined variable")
                (:alien nil))))
                 (sb-alien::heap-alien-info-type info)))
        (format s "~@<Its current value is ~3I~:_~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 "~@:_~@<It is a ~A; its ~_value is ~S.~:>"
              wot (symbol-value x)))