Hrvoje Niksic <hniksic(a)srce.hr> writes:
Fault handling stuff? That was half a joke. Again, have you read
my
original message?
Yes [I'll reread again to be sure]. You mean
#define XSETCAR(conscell, newcar) do {
CHECK_IMPURE (conscell);
XCAR (conscell) = newcar;
} while (0)
However
#define CHECK_IMPURE(obj) \
do { if (purified (obj)) pure_write_error (obj); } while (0)
And
int
purified (Lisp_Object obj)
{
return POINTER_TYPE_P (XGCTYPE (obj)) && PURIFIED (XPNTR (obj));
}
i.e. you might have eliminated the call to Fsetcar, but there is still
a function call involved. Note that the 'PURIFIED' macro ALSO involves
a function call. However that one will be hopefully be inlined when
compiled at -O3 (the default level for gcc is still -O2 isn't it?)
So I think if you want to go that way, you should at the very least
eliminate the function calls from all those macros. Also the
POINTER_TYPE_P (XGCTYPE (obj) check is completely unneeded in XSETCAR.
Jan