DESCRIBE improvements
authorNikodemus Siivola <nikodemus@random-state.net>
Tue, 6 Dec 2011 00:07:24 +0000 (02:07 +0200)
committerNikodemus Siivola <nikodemus@random-state.net>
Wed, 7 Dec 2011 11:43:19 +0000 (13:43 +0200)
 * Nicer DESCRIBE for type designators. Use TYPEXPAND-1 to get it done right.

 * Bind *PRINT-CIRCLE* to NIL around lambda-list printing, but compensate with
   *PRINT-LEVEL* and *PRINT-LENGTH* for sanity's sake.

src/code/describe.lisp

index 828227a..2d41172 100644 (file)
                                     (%fun-lambda-list fun)
                                     (info :type :lambda-list symbol))
                                 stream)
-          (when (eq (%fun-fun fun) (%fun-fun (constant-type-expander t)))
-            (format stream "~@:_Expansion: ~S" (funcall fun (list symbol))))))
+          (multiple-value-bind (expansion ok)
+              (handler-case (typexpand-1 symbol)
+                (error () (values nil nil)))
+            (when ok
+              (format stream "~@:_Expansion: ~S" expansion)))))
       (terpri stream)))
 
   (when (or (member symbol sb-c::*policy-qualities*)
         (format stream "~@:_~A:~@<~;~{ ~A~^,~:_~}~;~:>" label list))))
 
 (defun describe-lambda-list (lambda-list stream)
-  (format stream "~@:_Lambda-list: ~:A" lambda-list))
+  (let ((*print-circle* nil)
+        (*print-level* 24)
+        (*print-length* 24))
+    (format stream "~@:_Lambda-list: ~:A" lambda-list)))
 
 (defun describe-function-source (function stream)
   (if (compiled-function-p function)