]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/advice.el (ad-should-compile): Don't compile advice if the
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 26 Nov 2012 19:56:14 +0000 (14:56 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Mon, 26 Nov 2012 19:56:14 +0000 (14:56 -0500)
base function is not yet defined.
(ad-activate-advised-definition): Use ad-compile-function.
(ad-activate): Use cond.

Fixes: debbugs:12965
lisp/ChangeLog
lisp/emacs-lisp/advice.el

index 9e403af64169cbe1ac30f8521b7f4172f64d2642..2771ca42f25956d3c7a5b7f909c9e4e8e4989d06 100644 (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.
        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>
index c2ebb3bbdc62663e73d0052cb89e5cf563a6597a..a947dceccc96eef9026e72d82f8eb6301cc9dd16 100644 (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)
-           ((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))))))
+  (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))))
 
 (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)
-    ;; 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)
-          ;; Otherwise activate the advice:
-          (cond ((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)))))))
+  (cond
+   ((not (ad-is-advised function))
+    (error "ad-activate: `%s' is not advised" function))
+   ;; Just return for forward advised and not yet defined functions:
+   ((not (ad-get-orig-definition function)) nil)
+   ((not (ad-has-any-advice function)) (ad-unadvise function))
+   ;; Otherwise activate the advice:
+   ((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))))
 
 (defalias 'ad-activate-on 'ad-activate)