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:
Akim Demaille
2008-11-27 21:47:11 +01:00
parent 44494bf684
commit 2bde91138d
3 changed files with 64 additions and 15 deletions

View File

@@ -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
}
}