mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 20:33:03 +00:00
Use the symbol properties to output the printer/destructor for lalr1.cc.
Instead of defining complex list of tuples to define various properties of the symbols, we now prefer to define symbols as "structs" in m4: using the symbol key (its number), and the property name, b4_symbol gives it value. Use this to handle destructors and printers. * src/output.c (CODE_PROP): New. (prepare_symbol_definitions): Use it to define the printer and destructor related attributes of the symbols. * data/lalr1.cc (b4_symbol_actions): Rename as... (b4_symbol_action): this. Use b4_symbol instead of 6 arguments. (b4_symbol_printer, b4_symbol_destructor): New. Use them instead of b4_symbol_actions.
This commit is contained in:
22
src/output.c
22
src/output.c
@@ -428,6 +428,28 @@ prepare_symbol_definitions (void)
|
||||
SET_KEY("type");
|
||||
MUSCLE_INSERT_STRING (key, sym->type_name ? sym->type_name : "");
|
||||
|
||||
#define CODE_PROP(PropName) \
|
||||
do { \
|
||||
code_props const *p = symbol_ ## PropName ## _get (sym); \
|
||||
SET_KEY("has_" #PropName); \
|
||||
MUSCLE_INSERT_INT (key, !!p->code); \
|
||||
\
|
||||
if (p->code) \
|
||||
{ \
|
||||
SET_KEY(#PropName "_file"); \
|
||||
MUSCLE_INSERT_STRING (key, p->location.start.file); \
|
||||
\
|
||||
SET_KEY(#PropName "_line"); \
|
||||
MUSCLE_INSERT_INT (key, p->location.start.line); \
|
||||
\
|
||||
SET_KEY(#PropName); \
|
||||
MUSCLE_INSERT_STRING_RAW (key, p->code); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
CODE_PROP(destructor);
|
||||
CODE_PROP(printer);
|
||||
#undef CODE_PROP
|
||||
#undef SET_KEY
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user