Subject: bug#8428: 24.0.50; describe-function is broken

From: Sam Steingold <[email-masked]>
Date: Tue, 05 Apr 2011 14:39:22 -0400

current bzr tip:
emacs -q
C-h f interactive-p RET

standard-output == t

Debugger entered--Lisp error: (wrong-type-argument stringp t)
  set-buffer(t)
  (save-current-buffer (set-buffer standard-output) (save-excursion (save-match-data (when (re-search-backward "alias for `\\([^`']+\\)'" nil t) (help-xref-button 1 (quote help-function) def)))))
  (with-current-buffer standard-output (save-excursion (save-match-data (when (re-search-backward "alias for `\\([^`']+\\)'" nil t) (help-xref-button 1 (quote help-function) def)))))
  (if (eq errtype (quote alias)) (princ ",\nwhich is not defined.  Please make a bug report.") (with-current-buffer standard-output (save-excursion (save-match-data (when (re-search-backward "alias for `\\([^`']+\\)'" nil t) (help-xref-button 1 (quote help-function) def))))) (setq file-name (find-lisp-object-file-name function def)) (when file-name (princ " in `") (princ (if (eq file-name (quote C-source)) "C source code" (file-name-nondirectory file-name))) (princ "'") (with-current-buffer standard-output (save-excursion (re-search-backward "`\\([^`']+\\)'" nil t) (help-xref-button 1 (quote help-function-def) function file-name)))) (princ ".") (with-current-buffer (help-buffer) (fill-region-as-paragraph (save-excursion (goto-char pt1) (forward-line 0) (point)) (point))) (terpri) (terpri) (when (commandp function) (let ((pt2 (with-current-buffer (help-buffer) (point))) (remapped (command-remapping function))) (unless (memq remapped (quote (ignore undefined))) (let ((keys (where-is-internal ... overriding-local-map nil nil)) non-modified-keys) (if (and (eq function ...) (vectorp ...) (consp ...)) (princ "It is bound to many ordinary text characters.\n") (dolist (key keys) (if ... ...)) (when remapped (princ "It is remapped to `") (princ ...) (princ "'")) (when keys (princ ...) (if ... ... ... ...)) (when (or remapped keys non-modified-keys) (princ ".") (terpri))))) (with-current-buffer (help-buffer) (fill-region-as-paragraph pt2 (point)) (unless (looking-back "\n\n") (terpri))))) (when (and (symbolp function) (eq (get function (quote byte-compile)) (quote cl-byte-compile-compiler-macro))) (princ "This function has a compiler macro") (let ((lib (get function (quote compiler-macro-file)))) (when (stringp lib) (princ (format " in `%s'" lib)) (with-current-buffer standard-output (save-excursion (re-search-backward "`\\([^`']+\\)'" nil t) (help-xref-button 1 (quote help-function-cmacro) function lib))))) (princ ".\n\n")) (let* ((advertised (gethash def advertised-signature-table t)) (arglist (if (listp advertised) advertised (help-function-arglist def))) (doc (condition-case err (documentation function) (error (format "No Doc! %S" err)))) (usage (help-split-fundoc doc function))) (with-current-buffer standard-output (unless (keymapp function) (if usage (setq doc (cdr usage))) (let* ((use (cond ... ... ... ... ... ...)) (high (help-highlight-arguments use doc))) (let ((fill-begin ...)) (insert (car high) "\n") (fill-region fill-begin (point))) (setq doc (cdr high)))) (let* ((obsolete (and (symbolp function) (get function ...))) (use (car obsolete))) (when obsolete (princ "\nThis function is obsolete") (when (nth 2 obsolete) (insert (format " since %s" ...))) (insert (cond (... ...) (use ...) (t ".")) "\n")) (insert "\n" (or doc "Not documented."))))))
  (let* ((advised (and (symbolp function) (featurep (quote advice)) (ad-get-advice-info function))) (real-function (or (and advised (let ((origname ...)) (and (fboundp origname) origname))) function)) (def (if (symbolp real-function) (symbol-function real-function) function)) file-name string (beg (if (commandp def) "an interactive " "a ")) (pt1 (with-current-buffer (help-buffer) (point))) errtype) (setq string (cond ((or (stringp def) (vectorp def)) "a keyboard macro") ((subrp def) (if (eq (quote unevalled) (cdr (subr-arity def))) (concat beg "special form") (concat beg "built-in function"))) ((byte-code-function-p def) (concat beg "compiled Lisp function")) ((symbolp def) (while (and (fboundp def) (symbolp (symbol-function def))) (setq def (symbol-function def))) (or (fboundp def) (setq errtype (quote alias))) (format "an alias for `%s'" def)) ((eq (car-safe def) (quote lambda)) (concat beg "Lisp function")) ((eq (car-safe def) (quote macro)) "a Lisp macro") ((eq (car-safe def) (quote closure)) (concat beg "Lisp closure")) ((eq (car-safe def) (quote autoload)) (format "%s autoloaded %s" (if (commandp def) "an interactive" "an") (if (eq (nth 4 def) (quote keymap)) "keymap" (if (nth 4 def) "Lisp macro" "Lisp function")))) ((keymapp def) (let ((is-full nil) (elts (cdr-safe def))) (while elts (if (char-table-p ...) (setq is-full t elts nil)) (setq elts (cdr-safe elts))) (if is-full "a full keymap" "a sparse keymap"))) (t ""))) (princ string) (if (eq errtype (quote alias)) (princ ",\nwhich is not defined.  Please make a bug report.") (with-current-buffer standard-output (save-excursion (save-match-data (when (re-search-backward "alias for `\\([^`']+\\)'" nil t) (help-xref-button 1 (quote help-function) def))))) (setq file-name (find-lisp-object-file-name function def)) (when file-name (princ " in `") (princ (if (eq file-name (quote C-source)) "C source code" (file-name-nondirectory file-name))) (princ "'") (with-current-buffer standard-output (save-excursion (re-search-backward "`\\([^`']+\\)'" nil t) (help-xref-button 1 (quote help-function-def) function file-name)))) (princ ".") (with-current-buffer (help-buffer) (fill-region-as-paragraph (save-excursion (goto-char pt1) (forward-line 0) (point)) (point))) (terpri) (terpri) (when (commandp function) (let ((pt2 (with-current-buffer (help-buffer) (point))) (remapped (command-remapping function))) (unless (memq remapped (quote (ignore undefined))) (let ((keys ...) non-modified-keys) (if (and ... ... ...) (princ "It is bound to many ordinary text characters.\n") (dolist ... ...) (when remapped ... ... ...) (when keys ... ...) (when ... ... ...)))) (with-current-buffer (help-buffer) (fill-region-as-paragraph pt2 (point)) (unless (looking-back "\n\n") (terpri))))) (when (and (symbolp function) (eq (get function (quote byte-compile)) (quote cl-byte-compile-compiler-macro))) (princ "This function has a compiler macro") (let ((lib (get function (quote compiler-macro-file)))) (when (stringp lib) (princ (format " in `%s'" lib)) (with-current-buffer standard-output (save-excursion (re-search-backward "`\\([^`']+\\)'" nil t) (help-xref-button 1 ... function lib))))) (princ ".\n\n")) (let* ((advertised (gethash def advertised-signature-table t)) (arglist (if (listp advertised) advertised (help-function-arglist def))) (doc (condition-case err (documentation function) (error (format "No Doc! %S" err)))) (usage (help-split-fundoc doc function))) (with-current-buffer standard-output (unless (keymapp function) (if usage (setq doc (cdr usage))) (let* ((use ...) (high ...)) (let (...) (insert ... "\n") (fill-region fill-begin ...)) (setq doc (cdr high)))) (let* ((obsolete (and ... ...)) (use (car obsolete))) (when obsolete (princ "\nThis function is obsolete") (when (nth 2 obsolete) (insert ...)) (insert (cond ... ... ...) "\n")) (insert "\n" (or doc "Not documented.")))))))
  describe-function-1(interactive-p)
  describe-function(interactive-p)
  call-interactively(describe-function nil nil)

In GNU Emacs 24.0.50.10 (x86_64-unknown-linux-gnu, X toolkit)
 of 2011-03-28 on tbox
Windowing system distributor `Colin Harrison', version 11.0.60900031
configured using `configure  '--exec-prefix=/opt/emacs/lucid' '--prefix=/opt/emacs' '--with-x-toolkit=lucid''

-- 
Sam Steingold (http://sds.podval.org/) on CentOS release 5.5 (Final) X
http://jihadwatch.org http://thereligionofpeace.com http://camera.org
http://dhimmi.com http://openvotingconsortium.org http://memri.org
Vegetarians eat Vegetables, Humanitarians are scary.