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

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

Re: Problem advising nreverse.


From: Pascal J. Bourguignon
Subject: Re: Problem advising nreverse.
Date: Mon, 14 Dec 2009 14:01:48 +0100
User-agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/22.3 (darwin)

Sergei Organov <address@hidden> writes:

> 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
> 2008).

Redefining nreverse and reloading the ewoc-collect function would help
as indicated...

-- 
__Pascal Bourguignon__


reply via email to

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