+ fputs ("])\n\n", out);
+}
+
+
+/*----------------------------------------.
+| Output the symbol destructors to OOUT. |
+`----------------------------------------*/
+
+static void
+symbol_destructors_output (FILE *out)
+{
+ int i;
+ int first = 1;
+
+ fputs ("m4_define([b4_symbol_destructors], \n[", out);
+ for (i = 0; i < nsyms; ++i)
+ if (symbols[i]->destructor)
+ {
+ symbol_t *symbol = symbols[i];
+
+ /* Filename, lineno,
+ Symbol-name, Symbol-number,
+ destructor, typename. */
+ fprintf (out, "%s[[[%s]], [[%d]], [[%s]], [[%d]], [[%s]], [[%s]]]",
+ first ? "" : ",\n",
+ infile, symbol->destructor_location.first_line,
+ symbol->tag,
+ symbol->number,
+ symbol->destructor,
+ symbol->type_name);
+
+ first = 0;
+ }
+ fputs ("])\n\n", out);
+}
+
+
+/*-------------------------------------.
+| Output the symbol printers to OOUT. |
+`-------------------------------------*/
+
+static void
+symbol_printers_output (FILE *out)
+{
+ int i;
+ int first = 1;
+
+ fputs ("m4_define([b4_symbol_printers], \n[", out);
+ for (i = 0; i < nsyms; ++i)
+ if (symbols[i]->destructor)
+ {
+ symbol_t *symbol = symbols[i];
+
+ /* Filename, lineno,
+ Symbol-name, Symbol-number,
+ destructor, typename. */
+ fprintf (out, "%s[[[%s]], [[%d]], [[%s]], [[%d]], [[%s]], [[%s]]]",
+ first ? "" : ",\n",
+ infile, symbol->printer_location.first_line,
+ symbol->tag,
+ symbol->number,
+ symbol->printer,
+ symbol->type_name);
+
+ first = 0;
+ }
+ fputs ("])\n\n", out);