[Top][All Lists]

[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)

address@hidden (Pascal J. Bourguignon) writes:
> Sergei Organov <address@hidden> 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

-- Sergei.

reply via email to

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