Recent changes to Emacs have introduced code like the following:
CSET (XCHAR_TABLE (char_table), parent, parent);
This is unnecessarily confusing. Those two 'parent' expressions
refer to different things; the first 'parent' is not really a C
expression at all. I recall that Stefan also expressed unease about
CSET's not acting like a function, in this respect.
It's easy to change lisp.h so that the same code can be
written as follows, which is shorter and clearer:
char_table_set_parent (char_table, parent);
The main objection to changing lisp.h, if I recall correctly, is that
it will make lisp.h longer, since lisp.h will need a separate setter
function for each field. But that's not much of a problem since
these functions are really simple. And the advantage of readability
in users of the code makes the .h change worthwhile.
Here's a patch to make this change for CSET. I'd like to install this,
along with similar patches for the other non-function ?SET macros defined
recently.