- if (symbols[i]->destructor)
- {
- symbol_t *symbol = symbols[i];
-
- /* Filename, lineno,
- Symbol-name, Symbol-number,
- destructor, typename. */
- fprintf (out, "%s[",
- first ? "" : ",\n");
- escaped_file_name_output (out, symbol->destructor_location.file);
- fprintf (out, ", [[%d]], [[%s]], [[%d]], [[%s]], [[%s]]]",
- 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 OUT. |
-`------------------------------------*/
-
-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,
- printer, typename. */
- fprintf (out, "%s[",
- first ? "" : ",\n");
- escaped_file_name_output (out, symbol->printer_location.file);
- fprintf (out, ", [[%d]], [[%s]], [[%d]], [[%s]], [[%s]]]",
- symbol->printer_location.first_line,
- symbol->tag,
- symbol->number,
- symbol->printer,
- symbol->type_name);
-
- first = 0;
- }
+ {
+ 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);
+ }
+ }