summaryrefslogtreecommitdiff
path: root/src/output.c
diff options
context:
space:
mode:
authorJoel E. Denny <jdenny@ces.clemson.edu>2006-11-12 07:39:37 +0000
committerJoel E. Denny <jdenny@ces.clemson.edu>2006-11-12 07:39:37 +0000
commitb0f4c4eaa1da1437b18d5d8e250d666133225d8a (patch)
treed3c9e8ccd915c02aebda361b78c868134704527d /src/output.c
parent40cb301cd8d49db41e8e6920c584b53e73f43bad (diff)
downloadbison-b0f4c4eaa1da1437b18d5d8e250d666133225d8a.tar.gz
Remove last commit at the request of Paul Eggert.
Diffstat (limited to 'src/output.c')
-rw-r--r--src/output.c89
1 files changed, 59 insertions, 30 deletions
diff --git a/src/output.c b/src/output.c
index 70be1b9d..6b62ccd6 100644
--- a/src/output.c
+++ b/src/output.c
@@ -373,41 +373,70 @@ token_definitions_output (FILE *out)
}
-/*----------------------------------------------------.
-| Output the symbol destructors and printers to OUT. |
-`----------------------------------------------------*/
+/*---------------------------------------.
+| Output the symbol destructors to OUT. |
+`---------------------------------------*/
static void
-symbol_code_props_output (FILE *out, char const *what,
- code_props (*get)(symbol *))
+symbol_destructors_output (FILE *out)
{
int i;
char const *sep = "";
- fputs ("m4_define([b4_symbol_", out);
- fputs (what, out);
- fputs ("], \n[", out);
+ fputs ("m4_define([b4_symbol_destructors], \n[", out);
for (i = 0; i < nsyms; ++i)
- {
- symbol *sym = symbols[i];
- char const *code = code_props_code_get ((*get) (sym));
- if (code)
- {
- location loc = code_props_location_get ((*get) (sym));
- /* 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);
- }
- }
+ 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);
+ }
fputs ("])\n\n", out);
}
@@ -532,8 +561,8 @@ output_skeleton (void)
user_actions_output (out);
merger_output (out);
token_definitions_output (out);
- symbol_code_props_output (out, "destructors", &symbol_destructor_get);
- symbol_code_props_output (out, "printers", &symbol_printer_get);
+ symbol_destructors_output (out);
+ symbol_printers_output (out);
muscles_m4_output (out);