From c67c08396aa234f7d651f80cc531cd8ee57c6701 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 6 May 2013 11:27:11 -0400 Subject: [PATCH] * lisp/emacs-lisp/nadvice.el (advice--member-p): Return the advice if found. (advice--add-function): Refresh the advice if already present. Fixes: debbugs:14317 --- lisp/ChangeLog | 6 ++++++ lisp/emacs-lisp/nadvice.el | 10 +++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5abb4954a9..dd7b845636 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2013-05-06 Stefan Monnier + + * emacs-lisp/nadvice.el (advice--member-p): Return the advice if found. + (advice--add-function): Refresh the advice if already present + (bug#14317). + 2013-05-06 Ivan Andrus * find-file.el (cc-other-file-alist): Add ".m" for ObjC. (Bug#14339) diff --git a/lisp/emacs-lisp/nadvice.el b/lisp/emacs-lisp/nadvice.el index 12166553a1..c08d671e7e 100644 --- a/lisp/emacs-lisp/nadvice.el +++ b/lisp/emacs-lisp/nadvice.el @@ -167,7 +167,7 @@ WHERE is a symbol to select an entry in `advice--where-alist'." (if (or (equal function (advice--car definition)) (when name (equal name (cdr (assq 'name (advice--props definition)))))) - (setq found t) + (setq found definition) (setq definition (advice--cdr definition)))) found)) @@ -260,8 +260,12 @@ is also interactive. There are 3 cases: ;;;###autoload (defun advice--add-function (where ref function props) - (unless (advice--member-p function (cdr (assq 'name props)) - (gv-deref ref)) + (let ((a (advice--member-p function (cdr (assq 'name props)) + (gv-deref ref)))) + (when a + ;; The advice is already present. Remove the old one, first. + (setf (gv-deref ref) + (advice--remove-function (gv-deref ref) (advice--car a)))) (setf (gv-deref ref) (advice--make where function (gv-deref ref) props)))) -- 2.20.1