Call `comp--subr-safe-advice' from the advice machinery

* lisp/emacs-lisp/nadvice.el (advice--add-function): Call
	`comp--subr-safe-advice' when necessary.

	* lisp/emacs-lisp/advice.el (ad-add-advice): Likewhise.
This commit is contained in:
Andrea Corallo 2020-09-19 22:33:34 +02:00
parent 3ec1b932c9
commit db354ffd57
2 changed files with 18 additions and 0 deletions

View 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

View 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