[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 <osv@javad.com> writes:
> 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).
Redefining nreverse and reloading the ewoc-collect function would help
as indicated...
--
__Pascal Bourguignon__
- Problem advising nreverse., Sergei Organov, 2009/12/11
- Re: Problem advising nreverse., Pascal J. Bourguignon, 2009/12/12
- Message not available
- Re: Problem advising nreverse., Pascal J. Bourguignon, 2009/12/14
- Re: Problem advising nreverse., Sergei Organov, 2009/12/14
- Message not available
- Re: Problem advising nreverse., Pascal J. Bourguignon, 2009/12/14
- Re: Problem advising nreverse., Sergei Organov, 2009/12/14
- Message not available
- Re: Problem advising nreverse., Pascal J. Bourguignon, 2009/12/14
- Re: Problem advising nreverse., Sergei Organov, 2009/12/15
- Re: Problem advising nreverse., Sergei Organov, 2009/12/15