* abstraction. Functions with more complicated interfaces, and their
* callers, will have to make their own arrangements.
*/
* abstraction. Functions with more complicated interfaces, and their
* callers, will have to make their own arrangements.
*/
/* Slight hack. The @KWCALL@ macro sets GCC and similar compilers up to
* check for a sentinal null pointer at the end of the variable-length
* argument tail. Alas, if there are no keywords at all, then the null
/* Slight hack. The @KWCALL@ macro sets GCC and similar compilers up to
* check for a sentinal null pointer at the end of the variable-length
* argument tail. Alas, if there are no keywords at all, then the null
* empty, with the result that the compiler gives an annoying warning.
* Supplying an extra argument here is obviously harmless, and makes the
* otherwise useful warning go away in this case where it's not wanted.
*/
* empty, with the result that the compiler gives an annoying warning.
* Supplying an extra argument here is obviously harmless, and makes the
* otherwise useful warning go away in this case where it's not wanted.
*/
*
* Arguments: @kw@ = keyword name, as an unquoted token list
* @val@ = keyword value, as an expression
*
* Arguments: @kw@ = keyword name, as an unquoted token list
* @val@ = keyword value, as an expression
#define KWSET__STRUCTMEM(type, name, dflt) type name;
/* --- @KWSET_PARSEFN@ --- *
#define KWSET__STRUCTMEM(type, name, dflt) type name;
/* --- @KWSET_PARSEFN@ --- *