Subject: bug#20718: 25.0.50; find-function fails on advised subrs (again)

From: Stefan Monnier <[email-masked]>
Date: Thu, 04 Jun 2015 11:55:32 -0400

> Something like the patch below should fix it, but then the function
> returns a #<subr> object, instead of function symbol, and several callers
> seem to depend on the return value being the latter (because they want to
> call symbol-function on it).

Indeed, even its docstring says that it returns "the original function
symbol", and that's basically meaningless in general (and in the
nadvice case in particular).

So the callers will need to be adjusted.

        Stefan

> diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el
> index 7ea13d4..75fdfc7 100644
> --- a/lisp/emacs-lisp/find-func.el
> +++ b/lisp/emacs-lisp/find-func.el
> @@ -192,9 +192,9 @@ defined in C.")
>    "Return the original function symbol of an advised function FUNC.
>  If FUNC is not the symbol of an advised function, just returns FUNC."
>    (or (and (symbolp func)
> -	   (featurep 'advice)
> -	   (let ((ofunc (cdr (assq 'origname (ad-get-advice-info func)))))
> -	     (and (fboundp ofunc) ofunc)))
> +	   (featurep 'nadvice)
> +	   (let ((ofunc (advice--symbol-function func)))
> +	     (and (advice--p ofunc) (advice--cd*r ofunc))))
>        func))

>  (defun find-function-C-source (fun-or-var file type)