[Ecls-list] Commenting: ((cl_object)(cl_symbols+%d))
Douglas R. Miles
logicmoo at comcast.net
Wed Mar 1 18:30:32 UTC 2006
I had an idea that makes the emitted C easier for me to read/hack after
compiler creates it
In my local config.h I define
#ifndef THE_SYM
#define THE_SYM(NNN,VVV) ((cl_object)(cl_symbols+VVV))
// This macro ignores the first argument
#endif
Then in many places (like src/c/all_symbols.d in the function name_mangle)
#if defined(THE_SYM)
output = cl_format(5, Cnil,
make_constant_string("~AYM(~S,~A)"),
make_constant_string("THE_S"),
((cl_object)(cl_symbols + p))->symbol.name,MAKE_FIXNUM(p));
#else
output = cl_format(3,Cnil,
make_constant_string("((cl_object)(cl_symbols+~A))"),MAKE_FIXNUM(p));
#endif
It makes the code emitted read like:
ECL_SET(THE_SYM("*PACKAGE*",41), cl_core.lisp_package);
But what the compiler will see is
ecl_set_symbol(((cl_object)(cl_symbols+41)), cl_core.lisp_package)
Maybe others would like this virtual commenting in their outputted C?
Later on I was thinking if the symbol table interning system changes you'd
only update the macro THE_SYM(..,..)
Idea?
Douglas
More information about the ecl-devel
mailing list