diff options
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/ChangeLog | 6 | ||||
-rw-r--r-- | lisp/emacs-lisp/nadvice.el | 10 |
2 files changed, 13 insertions, 3 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5abb4954a97..dd7b8456368 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2013-05-06 Stefan Monnier <monnier@iro.umontreal.ca> + + * 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 <darthandrus@gmail.com> * 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 12166553a14..c08d671e7eb 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)))) |