]> git.eshelyaron.com Git - emacs.git/commitdiff
Call `comp--subr-safe-advice' from the advice machinery
authorAndrea Corallo <akrl@sdf.org>
Sat, 19 Sep 2020 20:33:34 +0000 (22:33 +0200)
committerAndrea Corallo <akrl@sdf.org>
Thu, 24 Sep 2020 07:57:17 +0000 (09:57 +0200)
* lisp/emacs-lisp/nadvice.el (advice--add-function): Call
`comp--subr-safe-advice' when necessary.

* lisp/emacs-lisp/advice.el (ad-add-advice): Likewhise.

lisp/emacs-lisp/advice.el
lisp/emacs-lisp/nadvice.el

index 0ebd2741d2e383834714ab527623653b5c96625a..4c19197024d4e4a1a5d891c49a01e47fa803ecee 100644 (file)
@@ -2075,6 +2075,8 @@ mapped to the closest extremal position).
 If FUNCTION was not advised already, its advice info will be
 initialized.  Redefining a piece of advice whose name is part of
 the cache-id will clear the cache."
+  (when (subr-primitive-p (symbol-function function))
+    (comp--subr-safe-advice function))
   (cond ((not (ad-is-advised function))
          (ad-initialize-advice-info function)
         (ad-set-advice-info-field
index b779aa27888f35b9e071cd93f9fc32d21e11cc6c..32b5df8f261f3948172624f2fd8634e63953ea5c 100644 (file)
@@ -318,6 +318,22 @@ is also interactive.  There are 3 cases:
 
 ;;;###autoload
 (defun advice--add-function (where ref function props)
+  (when (and (boundp 'comp-ctxt)
+             (subr-primitive-p (gv-deref ref)))
+    (let ((subr-name (intern (subr-name (gv-deref ref)))))
+      ;; Requiring the native compiler to advice `macroexpand' cause a
+      ;; circular dependency in eager macro expansion.
+      ;; uniquify is advising `rename-buffer' while being loaded in
+      ;; loadup.el.  This would require the whole native compiler
+      ;; machinery but we don't want to include it in the dump.
+      ;; Because these two functions are already handled in
+      ;; `comp-never-optimize-functions' we hack the problem this way
+      ;; for now :/
+      (unless (memq subr-name '(macroexpand rename-buffer))
+        ;; Must require explicitly as during bootstrap we have no
+        ;; autoloads.
+        (require 'comp)
+        (comp--subr-safe-advice subr-name))))
   (let* ((name (cdr (assq 'name props)))
          (a (advice--member-p (or name function) (if name t) (gv-deref ref))))
     (when a