anchor.diff:                     #+clisp (ext:arglist (symbol-function object))
                      #-(or excl cmu sbcl clisp) "( ??? )"))
         (when arglist
  -        (clim:present arglist
  -                      (clim:presentation-type-of arglist)
  -                      :stream stream)))
  +        (present-simply arglist stream)))
       (terpri))
     (format stream "   it has a property list of ~S~%" (symbol-plist object)))
   
  +(defmethod describe-object-self ((object symbol) stream)
  +  (present-simply object stream))
  +
   (defmethod describe-object ((object number) stream)
  -  (clim:present object (clim:presentation-type-of object)
  -                :stream stream)
  -  (format stream " is a number of type ")
  -  (clim:present (type-of object) (clim:presentation-type-of (type-of object))
  -                :stream stream)
  +  (standard-describe-object-header object stream :kind "a number"))
  +
  +(defmethod describe-object ((object string) stream)
  +  (standard-describe-object-header
  +   object stream :suffix (lambda (stream)
  +                           (format stream " with a length of ")
  +                           (present-simply (length object) stream 'clim:integer))))
  +
  +(defmethod describe-object ((object package) stream)
  +  (standard-describe-object-header
  +   object stream :suffix (lambda (stream)
  +                           (format stream " its name is ")
  +                           (present-simply (package-name object) stream)))
  +  (format stream "   it has the nicknames of ")
  +  (clim:present (package-nicknames object) 'clim:expression :stream stream)
  +  (terpri stream)
  +  (format stream "   it uses these packages: ")
  +  (clim:present (package-use-list object) 'clim:expression :stream stream)
  +  (terpri stream)
  +  (format stream "   it is used by the packages: ")
  +  (clim:present (package-used-by-list object) 'clim:expression :stream stream)
     (terpri stream))
   
  -(defmethod describe-object ((object string) stream)
  -  (clim:present object (clim:presentation-type-of object)
  -                :stream stream)
  -  (format stream " is of type ")
  -  (clim:present (type-of object) (clim:presentation-type-of (type-of object))
  -                :stream stream)
  -  (format stream " with a length of ")
  -  (clim:present (length object) 'clim:integer
  -                :stream stream)
  -  (terpri stream))
  +(labels ((present-slot/text (slot object stream width)
  +           (let ((name (c2mop:slot-definition-name slot)))
  +             (cond
  +               ((slot-boundp object name)
  +                (format stream "      ~v@A: " width name)
  +                (clim:present (slot-value object name) 'clim:expression :stream stream)
  +                (terpri stream))
  +               (t
  +                (format stream "      ~v@A: <unbound>~%" width name)))))
   
  -(defmethod describe-object ((object package) stream)
  -  (clim:present object (clim:presentation-type-of object)
  -                :stream stream)
  -  (format stream " is a package named ")
  -  (clim:present (package-name object) (clim:presentation-type-of (package-name object))
  -                :stream stream)
  -  (terpri stream)
  -  (format stream "   it has the nicknames of ")
  -  (clim:present (package-nicknames object) 'clim:expression
  -                :stream stream)
  -  (terpri stream)
  -  (format stream "   it uses these packages: ")
  -  (clim:present (package-use-list object) 'clim:expression
  -                :stream stream)
  -  (terpri stream)
  -  (format stream "   it is used by the packages: ")
  -  (clim:present (package-used-by-list object) 'clim:expression
  -                :stream stream)
  -  (terpri stream))
  -
  -(labels ((present-instance-slots-text (object stream)
  +         (present-instance-slots/text (object stream)
              (let* ((slots (c2mop:class-slots (class-of object)))
                     (width (loop for slot in slots
  -                               maximizing (length (symbol-name (c2mop:slot-definition-name slot))))))
  -             (loop for slot in slots
  -                   do (cond
  -                        ((slot-boundp object (c2mop:slot-definition-name slot))
  -                         (format stream "      ~v@A: " width
  -                                 (c2mop:slot-definition-name slot))
  -                         (clim:present (slot-value object (c2mop:slot-definition-name slot))
  -                                       'clim:expression
  -                                       :stream stream)
  -                         (terpri stream))
  -                        (t
  -                         (format stream "      ~v@A: <unbound>~%" width
  -                                 (c2mop:slot-definition-name slot)))))))
  +                            maximizing (length (symbol-name (c2mop:slot-definition-name slot))))))
  +             (map nil (alexandria:rcurry #'present-slot/text object stream width) slots)))
   
  -         (present-instance-slots-clim (object stream)
  +         (present-slot/table (slot object stream)
  +           (let ((name (c2mop:slot-definition-name slot)))
  +             (clim:formatting-row (stream)
  +               (clim:formatting-cell (stream :align-x :right)
  +                 (present-simply name stream)
  +                 (write-char #\: stream))
  +               (clim:formatting-cell (stream)
  +                 (if (slot-boundp object name)
  +                     (clim:present (slot-value object name) 'clim:expression
  +                                   :stream stream)
  +                     (format stream "<unbound>"))))))
  +
  +         (present-instance-slots/table (object stream)
              (let ((slots (c2mop:class-slots (class-of object))))
                (clim:formatting-table (stream)
  -               (dolist (slot slots)
  -                 (clim:formatting-row (stream)
  -                   (clim:formatting-cell (stream :align-x :right)
  -                     (clim:present (c2mop:slot-definition-name slot)
  -                                   'clim:symbol
  -                                   :stream stream)
  -                     (write-char #\: stream))
  -                   (clim:formatting-cell (stream)
  -                     (if (slot-boundp object (c2mop:slot-definition-name slot))
  -                         (clim:present (slot-value object (c2mop:slot-definition-name slot))
  -                                       'clim:expression
  -                                       :stream stream)
  -                         (format stream "<unbound>"))))))))
  +               (map nil (alexandria:rcurry #'present-slot/table object stream) slots))))
   
  -         (describe-instance (object a-what stream)
  -           (clim:present object (clim:presentation-type-of object)
  -                         :stream stream)
  -           (format stream " is ~A of type " a-what)
  -           (clim:present (type-of object) (clim:presentation-type-of (type-of object))
  -                         :stream stream)
  -           (terpri stream)
  +         (describe-instance (object stream kind)
  +           (standard-describe-object-header object stream :kind kind)
              (format stream "   it has the following slots:~%")
              (if (typep stream 'clim:output-recording-stream)
  -               (present-instance-slots-clim object stream)
  -               (present-instance-slots-text object stream))))
  +               (present-instance-slots/table object stream)
  +               (present-instance-slots/text object stream))))
   
     (defmethod describe-object ((object standard-object) stream)
  -    (describe-instance object "an instance" stream))
  +    (describe-instance object stream "an instance"))
   
     (defmethod describe-object ((object structure-object) stream)
  -    (describe-instance object "a structure" stream)))
  +    (describe-instance object stream "a structure")))
  
positive.code: (clim-internals::with-system-redefinition-allowed
      (defmethod describe-object ((object t) stream)
        (let ((*print-array* nil))
          (clim:present object (clim:presentation-type-of object)
                        :stream stream)
          (format stream " is of type ")
          (clim:present (type-of object) (clim:presentation-type-of (type-of object))
                        :stream stream)
          (terpri stream))))
  
  (defmethod describe-object ((object symbol) stream)
    (clim:present object (clim:presentation-type-of object)
                  :stream stream)
    (format stream " is of type ")
    (clim:present (type-of object) (clim:presentation-type-of (type-of object))
                  :stream stream)
    (terpri stream)
    (cond
     ((not (boundp object))
      (format stream "   it is unbound~%"))
     (t
      (format stream "   it has a value of ")
      (clim:present (symbol-value object) (clim:presentation-type-of (symbol-value object))
                    :stream stream)
      (terpri)))
    (format stream "   it is in the ")
    (clim:present (symbol-package object) (clim:presentation-type-of (symbol-package object))
                  :stream stream)
    (format stream " package~%")
    (when (fboundp object)
      (format stream "   it has a function definition of ~S~%" (symbol-function object))
  
negative.code: 
  (defgeneric describe-object (object stream))
  
  (defgeneric describe-object-self (object stream))
  
  (defgeneric describe-object-type (object stream))
  
  ;;; For these methods, stream should be of type
  ;;; (or EXTENDED-OUTPUT-STREAM OUTPUT-RECORDING-STREAM)
  ;;; but CLIM-STREAM-PANE is used instead.
  