From 938bca8e4141f5f96497f9be26b0ea0bb90f40cd Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 21 Jan 2015 23:16:45 -0500 Subject: [PATCH] Avoid generating invalid usage info for pathological function Fixes: debbugs:19645 * lisp/help.el (help-make-usage): Don't turn a "_" arg into an empty-string. * lisp/emacs-lisp/cl-generic.el (cl--generic-lambda): Don't confuse a string body with a docstring. --- lisp/ChangeLog | 7 +++++++ lisp/emacs-lisp/cl-generic.el | 5 +++-- lisp/help.el | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 39ae463b043..c000d6bb9a6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2015-01-22 Stefan Monnier + + * help.el (help-make-usage): Don't turn a "_" arg into an empty-string + arg (bug#19645). + * emacs-lisp/cl-generic.el (cl--generic-lambda): Don't confuse a string + body with a docstring. + 2015-01-22 Dmitry Gutov * progmodes/xref.el (xref-location-marker, xref-location-group): diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el index 8dee9a38ab0..f214faff237 100644 --- a/lisp/emacs-lisp/cl-generic.el +++ b/lisp/emacs-lisp/cl-generic.el @@ -228,7 +228,8 @@ This macro can only be used within the lexical scope of a cl-generic method." "Make the lambda expression for a method with ARGS and BODY." (let ((plain-args ()) (specializers nil) - (doc-string (if (stringp (car-safe body)) (pop body))) + (doc-string (if (and (stringp (car-safe body)) (cdr body)) + (pop body))) (mandatory t)) (dolist (arg args) (push (pcase arg @@ -252,7 +253,7 @@ This macro can only be used within the lexical scope of a cl-generic method." ;; destructuring args, `declare' and whatnot). (pcase (macroexpand fun macroenv) (`#'(lambda ,args . ,body) - (let* ((doc-string (and doc-string (stringp (car body)) + (let* ((doc-string (and doc-string (stringp (car body)) (cdr body) (pop body))) (cnm (make-symbol "cl--cnm")) (nmp (make-symbol "cl--nmp")) diff --git a/lisp/help.el b/lisp/help.el index 39ec6be1fde..bf724252d5a 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -1445,7 +1445,7 @@ the same names as used in the original source code, when possible." (let ((name (symbol-name arg))) (cond ((string-match "\\`&" name) arg) - ((string-match "\\`_" name) + ((string-match "\\`_." name) (intern (upcase (substring name 1)))) (t (intern (upcase name))))))) arglist))) -- 2.39.5