1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-04 11:00:45 -08:00

* lisp/emacs-lisp/advice.el (ad-should-compile): Don't compile advice if the

base function is not yet defined.
(ad-activate-advised-definition): Use ad-compile-function.
(ad-activate): Use cond.

Fixes: debbugs:12965
This commit is contained in:
Stefan Monnier 2012-11-26 14:56:14 -05:00
parent 551aaa664f
commit 848a2dd19d
2 changed files with 41 additions and 35 deletions

View file

@ -1,3 +1,10 @@
2012-11-26 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/advice.el (ad-should-compile): Don't compile advice if the
base function is not yet defined (bug#12965).
(ad-activate-advised-definition): Use ad-compile-function.
(ad-activate): Use cond.
2012-11-25 Leo Liu <sdl.web@gmail.com>
* textmodes/sgml-mode.el (sgml-tag): Fix indentation for closing tag.
@ -10,14 +17,14 @@
Texinfo integration.
* textmodes/reftex.el (reftex-section-pre-regexp)
(reftex-section-post-regexp, reftex-section-info-function): New
variable.
(reftex-compile-variables): Use variables
reftex-section-pre-regexp, reftex-section-post-regexp, and
reftex-section-info-function in order to be compatible with Texinfo integration.
(reftex-section-post-regexp, reftex-section-info-function):
New variable.
(reftex-compile-variables): Use variables reftex-section-pre-regexp,
reftex-section-post-regexp, and reftex-section-info-function in order
to be compatible with Texinfo integration.
* textmodes/reftex-toc.el (reftex-toc-promote-action): use
reftex-section-pre-regexp variable in order to be compatible with
* textmodes/reftex-toc.el (reftex-toc-promote-action):
use reftex-section-pre-regexp variable in order to be compatible with
Texinfo integration.
2012-11-25 Chong Yidong <cyd@gnu.org>

View file

@ -2900,19 +2900,18 @@ If COMPILE is non-nil and not a negative number then it returns t.
If COMPILE is a negative number then it returns nil.
If COMPILE is nil then the result depends on the value of
`ad-default-compilation-action' (which see)."
(if (integerp compile)
(>= compile 0)
(if compile
compile
(cond ((eq ad-default-compilation-action 'never)
nil)
((eq ad-default-compilation-action 'always)
t)
(cond
;; Don't compile until the real function definition is known (bug#12965).
((not (ad-real-orig-definition function)) nil)
((integerp compile) (>= compile 0))
(compile)
((eq ad-default-compilation-action 'never) nil)
((eq ad-default-compilation-action 'always) t)
((eq ad-default-compilation-action 'like-original)
(or (ad-subr-p (ad-get-orig-definition function))
(ad-compiled-p (ad-get-orig-definition function))))
;; everything else means `maybe':
(t (featurep 'byte-compile))))))
(t (featurep 'byte-compile))))
(defun ad-activate-advised-definition (function compile)
"Redefine FUNCTION with its advised definition from cache or scratch.
@ -2927,7 +2926,7 @@ The current definition and its cache-id will be put into the cache."
(ad-make-advised-definition function)))
(advice-add function :around advicefunname)
(if (ad-should-compile function compile)
(byte-compile advicefunname))
(ad-compile-function function))
(if verified-cached-definition
(if (not (eq verified-cached-definition
(symbol-function advicefunname)))
@ -3003,20 +3002,20 @@ definition will always be cached for later usage."
(interactive
(list (ad-read-advised-function "Activate advice of")
current-prefix-arg))
(if (not (ad-is-advised function))
(error "ad-activate: `%s' is not advised" function)
(cond
((not (ad-is-advised function))
(error "ad-activate: `%s' is not advised" function))
;; Just return for forward advised and not yet defined functions:
(if (ad-get-orig-definition function)
(if (not (ad-has-any-advice function))
(ad-unadvise function)
((not (ad-get-orig-definition function)) nil)
((not (ad-has-any-advice function)) (ad-unadvise function))
;; Otherwise activate the advice:
(cond ((ad-has-redefining-advice function)
((ad-has-redefining-advice function)
(ad-activate-advised-definition function compile)
(ad-set-advice-info-field function 'active t)
(eval (ad-make-hook-form function 'activation))
function)
;; Here we are if we have all disabled advices:
(t (ad-deactivate function)))))))
(t (ad-deactivate function))))
(defalias 'ad-activate-on 'ad-activate)