help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Problem advising nreverse.


From: Sergei Organov
Subject: Re: Problem advising nreverse.
Date: Mon, 14 Dec 2009 14:07:56 +0300
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.2 (gnu/linux)

pjb@informatimago.com (Pascal J. Bourguignon) writes:
> Sergei Organov <osv@javad.com> writes:
>
>> Hello,
>>
>> It seems that an advice set for `nreverse' function fails to be called
>> when `nreverse' is called from a byte compiled function:

[...]

>> Is it bug or feature? What's going on here? 
>
> Indeed, it is a feature.
>
> Advices are not available from several call points:
>
> 1- when the advised function is called from C code.
>
> 2- when the advised function is a an opcode of the virtual machine.
>    You can observe the difference between the two primitives nreverse
>    and buffer-name for example, with:     
>
>      (disassemble (byte-compile (lambda (x) (nreverse x))))
>    vs.:
>      (disassemble (byte-compile (lambda (x) (buffer-name x))))
>
>    In the former case, nreverse is a byte code, and therefore no
>    advice applies.  In the later case, buffer-name is called with the
>    call byte code, which will go thru the advice.
>
> Notice that if you really want to advice such a low level primitive
> function as nreverse, you can replace it with a lisp function (and
> recompile all the code that uses it).

Thanks a lot for the explanations and suggestion.

Unfortunately this is not an option as intention was to advise
`nreverse' during calls to a possibly buggy `ewoc-collect' function that
for a long time errorneously called `nreverse' at the end (fixed since
2008).

-- Sergei.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]