X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Finspect.lisp;h=43faa94fe68c658c73211895672d6c1b65011531;hb=15d6e7c9a2c3234f95dfe278046fa2fee1b0c007;hp=ed2b1759cc03ce55bae3a2ff5c951f18cad780e5;hpb=926e669f7dc4e38c69b116db24d1a3150d2ee6ab;p=sbcl.git diff --git a/src/code/inspect.lisp b/src/code/inspect.lisp index ed2b175..43faa94 100644 --- a/src/code/inspect.lisp +++ b/src/code/inspect.lisp @@ -55,10 +55,11 @@ evaluated expressions. (named-let reread () (format s "~&> ") (force-output) - (let (;; KMP idiom, using stream itself as EOF value - (command (read *standard-input* nil *standard-input*))) - (typecase command - (stream ; i.e. EOF + (let* (;; newly-consed object for hermetic protection against + ;; mischievous input like #.*EOF-OBJECT*: + (eof (cons *eof-object* nil)) + (command (read *standard-input* nil eof))) + (when (eq command eof) ;; currently-undocumented feature: EOF is handled as Q. ;; If there's ever consensus that this is *the* right ;; thing to do (as opposed to e.g. handling it as U), we @@ -66,6 +67,7 @@ evaluated expressions. ;; do this than to signal an error. (/show0 "THROWing QUIT-INSPECT for EOF") (throw 'quit-inspect nil)) + (typecase command (integer (let ((elements-length (length elements))) (cond ((< -1 command elements-length) @@ -153,7 +155,7 @@ evaluated expressions. (defgeneric inspected-parts (object)) (defmethod inspected-parts ((object symbol)) - (values (format nil "The object is a SYMBOL.~%" object) + (values (format nil "The object is a SYMBOL.~%") t (list (cons "Name" (symbol-name object)) (cons "Package" (symbol-package object)) @@ -170,7 +172,7 @@ evaluated expressions. (info (layout-info (sb-kernel:layout-of object)))) (when (sb-kernel::defstruct-description-p info) (dolist (dd-slot (dd-slots info) (nreverse parts-list)) - (push (cons (dsd-%name dd-slot) + (push (cons (dsd-name dd-slot) (funcall (dsd-accessor-name dd-slot) object)) parts-list))))) @@ -200,7 +202,13 @@ evaluated expressions. (values (format nil "The object is a FUNCALLABLE-INSTANCE of type ~S.~%" (type-of object)) t - (inspected-structure-elements object))) + (inspected-standard-object-elements object))) + +(defmethod inspected-parts ((object condition)) + (values (format nil "The object is a CONDITION of type ~S.~%" + (type-of object)) + t + (inspected-standard-object-elements object))) (defmethod inspected-parts ((object function)) (let* ((type (sb-kernel:widetag-of object))