Advice и байт-код
Не для всех функций можно надежно установить advice. Байт-компилятор может заменить вызов функции последовательностью инструкций, которая не вызывает функцию, которую вы хотели изменить.
Обычно это происходит из-за одного из следующих трех механизмов:
-
byte-compileсвойства -
Если у символа функции есть свойство
byte-compile, вместо определения функции символа будет использоваться это свойство. См. Функции байтовой компиляции. -
byte-optimizeсвойства -
Если у символа функции есть свойство
byte-optimize, байт-компилятор может изменить аргументы функции или решить использовать совсем другую функцию. -
compiler-macroформы declare В определении функции может присутствовать специальная форма
compiler-macrodeclare(см. Формаdeclare), которая определяет расширитель, вызываемый при компиляции функции. Затем расширитель может привести к тому, что сгенерированный байт-код не будет вызывать исходную функцию.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Advice-and-Byte-Code.html