mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-12 22:03:02 +00:00
Use the new code_props interface for destructors and printers.
* src/symtab.h (symbol, semantic_type): Remove destructor_location and printer_location members, and change the type of the destructor and printer members to code_props. (symbol_destructor_set, symbol_destructor_get, symbol_printer_set, symbol_printer_get, semantic_type_destructor_set, semantic_type_printer_set, default_tagged_destructor_set, default_tagless_destructor_set, default_tagged_printer_set, default_tagless_printer_set): Use code_props in arguments and return types in place of char const * and location. (symbol_destructor_location_get, symbol_printer_location_get): Remove since the locations are now contained in the return of symbol_destructor_get and symbol_printer_get. * src/output.c (symbol_destructors_output, symbol_printers_output): Replace with... (symbol_code_props_output): ... this to eliminate duplicate code. (output_skeleton): Update to use symbol_code_props_output. * src/reader.c (symbol_should_be_used): Update use of symbol_destructor_get. * src/symlist.c (symbol_list_destructor_set, symbol_list_printer_set): Update uses of the various _destructor_set and _printer_set functions. * src/symtab.c: (default_tagged_destructor_location, default_tagless_destructor_location, default_tagged_printer_location, default_tagless_printer_location): Remove since we... (default_tagged_destructor, default_tagless_destructor, default_tagged_printer, default_tagless_printer): ... change the type of these to code_props. (symbol_new, semantic_type_new, symbol_destructor_set, semantic_type_destructor_set, symbol_destructor_get, symbol_printer_set, semantic_type_printer_set, symbol_printer_get, symbol_check_alias_consistency, default_tagged_destructor_set, default_tagless_destructor_set, default_tagged_printer_set, default_tagless_printer_set): Update. (symbol_destructor_location_get, symbol_printer_location_get): Remove. (SYMBOL_CODE_PRINT): New similar to SYMBOL_ATTR_PRINT but for code_props members. (symbol_print): Use SYMBOL_CODE_PRINT.
This commit is contained in:
91
src/output.c
91
src/output.c
@@ -373,70 +373,41 @@ token_definitions_output (FILE *out)
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------.
|
||||
| Output the symbol destructors to OUT. |
|
||||
`---------------------------------------*/
|
||||
/*---------------------------------------------------.
|
||||
| Output the symbol destructors or printers to OUT. |
|
||||
`---------------------------------------------------*/
|
||||
|
||||
static void
|
||||
symbol_destructors_output (FILE *out)
|
||||
symbol_code_props_output (FILE *out, char const *what,
|
||||
code_props const *(*get)(symbol const *))
|
||||
{
|
||||
int i;
|
||||
char const *sep = "";
|
||||
|
||||
fputs ("m4_define([b4_symbol_destructors], \n[", out);
|
||||
fputs ("m4_define([b4_symbol_", out);
|
||||
fputs (what, out);
|
||||
fputs ("], \n[", out);
|
||||
for (i = 0; i < nsyms; ++i)
|
||||
if (symbol_destructor_get (symbols[i]))
|
||||
{
|
||||
symbol *sym = symbols[i];
|
||||
|
||||
/* Filename, lineno,
|
||||
Symbol-name, Symbol-number,
|
||||
destructor, optional typename. */
|
||||
fprintf (out, "%s[", sep);
|
||||
sep = ",\n";
|
||||
escaped_output (out, symbol_destructor_location_get (sym).start.file);
|
||||
fprintf (out, ", %d, ",
|
||||
symbol_destructor_location_get (sym).start.line);
|
||||
escaped_output (out, sym->tag);
|
||||
fprintf (out, ", %d, [[%s]]", sym->number,
|
||||
symbol_destructor_get (sym));
|
||||
if (sym->type_name)
|
||||
fprintf (out, ", [[%s]]", sym->type_name);
|
||||
fputc (']', out);
|
||||
}
|
||||
fputs ("])\n\n", out);
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------.
|
||||
| Output the symbol printers to OUT. |
|
||||
`------------------------------------*/
|
||||
|
||||
static void
|
||||
symbol_printers_output (FILE *out)
|
||||
{
|
||||
int i;
|
||||
char const *sep = "";
|
||||
|
||||
fputs ("m4_define([b4_symbol_printers], \n[", out);
|
||||
for (i = 0; i < nsyms; ++i)
|
||||
if (symbol_printer_get (symbols[i]))
|
||||
{
|
||||
symbol *sym = symbols[i];
|
||||
|
||||
/* Filename, lineno,
|
||||
Symbol-name, Symbol-number,
|
||||
printer, optional typename. */
|
||||
fprintf (out, "%s[", sep);
|
||||
sep = ",\n";
|
||||
escaped_output (out, symbol_printer_location_get (sym).start.file);
|
||||
fprintf (out, ", %d, ", symbol_printer_location_get (sym).start.line);
|
||||
escaped_output (out, sym->tag);
|
||||
fprintf (out, ", %d, [[%s]]", sym->number, symbol_printer_get (sym));
|
||||
if (sym->type_name)
|
||||
fprintf (out, ", [[%s]]", sym->type_name);
|
||||
fputc (']', out);
|
||||
}
|
||||
{
|
||||
symbol *sym = symbols[i];
|
||||
char const *code = (*get) (sym)->code;
|
||||
if (code)
|
||||
{
|
||||
location loc = (*get) (sym)->location;
|
||||
/* Filename, lineno,
|
||||
Symbol-name, Symbol-number,
|
||||
code, optional typename. */
|
||||
fprintf (out, "%s[", sep);
|
||||
sep = ",\n";
|
||||
escaped_output (out, loc.start.file);
|
||||
fprintf (out, ", %d, ", loc.start.line);
|
||||
escaped_output (out, sym->tag);
|
||||
fprintf (out, ", %d, [[%s]]", sym->number, code);
|
||||
if (sym->type_name)
|
||||
fprintf (out, ", [[%s]]", sym->type_name);
|
||||
fputc (']', out);
|
||||
}
|
||||
}
|
||||
fputs ("])\n\n", out);
|
||||
}
|
||||
|
||||
@@ -561,8 +532,8 @@ output_skeleton (void)
|
||||
user_actions_output (out);
|
||||
merger_output (out);
|
||||
token_definitions_output (out);
|
||||
symbol_destructors_output (out);
|
||||
symbol_printers_output (out);
|
||||
symbol_code_props_output (out, "destructors", &symbol_destructor_get);
|
||||
symbol_code_props_output (out, "printers", &symbol_printer_get);
|
||||
|
||||
muscles_m4_output (out);
|
||||
|
||||
@@ -604,10 +575,10 @@ prepare (void)
|
||||
MUSCLE_INSERT_BOOL ("nondeterministic_flag", nondeterministic_parser);
|
||||
MUSCLE_INSERT_BOOL ("pull_flag", pull_parser);
|
||||
MUSCLE_INSERT_BOOL ("pure_flag", pure_parser);
|
||||
MUSCLE_INSERT_BOOL ("use_push_for_pull_flag", use_push_for_pull_flag);
|
||||
MUSCLE_INSERT_BOOL ("push_flag", push_parser);
|
||||
MUSCLE_INSERT_BOOL ("synclines_flag", !no_lines_flag);
|
||||
MUSCLE_INSERT_BOOL ("tag_seen_flag", tag_seen);
|
||||
MUSCLE_INSERT_BOOL ("use_push_for_pull_flag", use_push_for_pull_flag);
|
||||
MUSCLE_INSERT_BOOL ("yacc_flag", yacc_flag);
|
||||
|
||||
/* File names. */
|
||||
|
||||
Reference in New Issue
Block a user