From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Tassilo Horn Newsgroups: gmane.emacs.devel Subject: Re: describe-function and advised C functions Date: Wed, 04 Dec 2013 15:05:01 +0100 Message-ID: <8761r4n242.fsf@tsdh.uni-koblenz.de> References: <87txeq8fek.fsf@tsdh.uni-koblenz.de> <87a9ggnaxe.fsf@tsdh.uni-koblenz.de> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1386165923 25228 80.91.229.3 (4 Dec 2013 14:05:23 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 4 Dec 2013 14:05:23 +0000 (UTC) Cc: emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Dec 04 15:05:24 2013 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VoD4t-0004h8-PH for ged-emacs-devel@m.gmane.org; Wed, 04 Dec 2013 15:05:23 +0100 Original-Received: from localhost ([::1]:48412 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VoD4t-0006wX-An for ged-emacs-devel@m.gmane.org; Wed, 04 Dec 2013 09:05:23 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:45513) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VoD4h-0006gR-Nq for emacs-devel@gnu.org; Wed, 04 Dec 2013 09:05:19 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VoD4a-0000eJ-18 for emacs-devel@gnu.org; Wed, 04 Dec 2013 09:05:11 -0500 Original-Received: from deliver.uni-koblenz.de ([141.26.64.15]:43227) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VoD4Z-0000aU-O2 for emacs-devel@gnu.org; Wed, 04 Dec 2013 09:05:03 -0500 Original-Received: from localhost (localhost [127.0.0.1]) by deliver.uni-koblenz.de (Postfix) with ESMTP id 795E21A83CD; Wed, 4 Dec 2013 15:05:02 +0100 (CET) X-Virus-Scanned: amavisd-new at uni-koblenz.de Original-Received: from deliver.uni-koblenz.de ([127.0.0.1]) by localhost (deliver.uni-koblenz.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JECtv93gAxAm; Wed, 4 Dec 2013 15:05:02 +0100 (CET) X-CHKRCPT: Envelopesender noch tsdh@gnu.org Original-Received: from tsdh.uni-koblenz.de (tsdh.uni-koblenz.de [141.26.67.142]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by deliver.uni-koblenz.de (Postfix) with ESMTPSA id EC66F1A83C1; Wed, 4 Dec 2013 15:05:01 +0100 (CET) Mail-Followup-To: Stefan Monnier , emacs-devel@gnu.org In-Reply-To: <87a9ggnaxe.fsf@tsdh.uni-koblenz.de> (Tassilo Horn's message of "Wed, 04 Dec 2013 11:54:37 +0100") User-Agent: Gnus/5.130008 (Ma Gnus v0.8) Emacs/24.3.50 (gnu/linux) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 141.26.64.15 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:166075 Archived-At: Hi again, my previous patch had an unreachable code path & one always-nil test I forgot to delete. Here's a better patch. The C-h f output is the same as in my last mail. BTW, why are the advice annotations in the *Help* buffer fontified for `load', `append', and `concat-seqs', but not for `scheme-mode' and `quack-mode'. Bye, Tassilo --8<---------------cut here---------------start------------->8--- === modified file 'lisp/help-fns.el' --- lisp/help-fns.el 2013-06-15 01:12:05 +0000 +++ lisp/help-fns.el 2013-12-04 13:59:39 +0000 @@ -382,8 +382,6 @@ (match-string 1 str)))) (and src-file (file-readable-p src-file) src-file)))))) -(declare-function ad-get-advice-info "advice" (function)) - (defun help-fns--key-bindings (function) (when (commandp function) (let ((pt2 (with-current-buffer standard-output (point))) @@ -531,27 +529,39 @@ ;;;###autoload (defun describe-function-1 (function) - (let* ((advised (and (symbolp function) (featurep 'advice) - (ad-get-advice-info function))) + (let* ((advised (and (symbolp function) + (featurep 'nadvice) + (advice--p (advice--symbol-function function)))) ;; If the function is advised, use the symbol that has the ;; real definition, if that symbol is already set up. (real-function (or (and advised - (let ((origname (cdr (assq 'origname advised)))) - (and (fboundp origname) origname))) + (let* ((f function) + (advised-fn (advice--cdr (advice--symbol-function f)))) + (while (advice--p advised-fn) + (setq f advised-fn) + (setq advised-fn (advice--cdr (if (symbolp f) + (advice--symbol-function f) + f)))) + advised-fn)) function)) ;; Get the real definition. (def (if (symbolp real-function) (symbol-function real-function) - function)) - (aliased (symbolp def)) - (real-def (if aliased - (let ((f def)) - (while (and (fboundp f) - (symbolp (symbol-function f))) - (setq f (symbol-function f))) - f) - def)) + real-function)) + (aliased (or (symbolp def) + ;; advised & aliased + (and (symbolp function) + (symbolp real-function) + (not (eq function real-function))))) + (real-def (cond + (aliased (let ((f real-function)) + (while (and (fboundp f) + (symbolp (symbol-function f))) + (setq f (symbol-function f))) + f)) + ((subrp def) (intern (subr-name def))) + (t def))) (file-name (find-lisp-object-file-name function def)) (pt1 (with-current-buffer (help-buffer) (point))) (beg (if (and (or (byte-code-function-p def) @@ -567,14 +577,14 @@ ;; Print what kind of function-like object FUNCTION is. (princ (cond ((or (stringp def) (vectorp def)) "a keyboard macro") + (aliased + (format "an alias for `%s'" real-def)) ((subrp def) (if (eq 'unevalled (cdr (subr-arity def))) (concat beg "special form") (concat beg "built-in function"))) ((byte-code-function-p def) (concat beg "compiled Lisp function")) - (aliased - (format "an alias for `%s'" real-def)) ((eq (car-safe def) 'lambda) (concat beg "Lisp function")) ((eq (car-safe def) 'macro) --8<---------------cut here---------------end--------------->8--- Bye, Tassilo