X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/a9fc7990fac9294374dd5e723c1e2609079cddcb..a6df593dfe9918e8d9bdf8f59c881e93d5d292e8:/src/output.c diff --git a/src/output.c b/src/output.c index 80fef444..8457ba19 100644 --- a/src/output.c +++ b/src/output.c @@ -283,6 +283,31 @@ prepare_states (void) +/*-----------------------------------------------. +| For each symbol type, its tags and type name. | +`-----------------------------------------------*/ + +static void +type_names_output (FILE *out) +{ + int i; + char const *sep = ""; + + fputs ("m4_define([b4_type_names],\n[", out); + for (i = 0; i < nsyms; ++i) + { + symbol *sym = symbols[i]; + /* Symbol-name, Symbol-number, optional typename. */ + fprintf (out, "%s[", i ? ",\n" : ""); + escaped_output (out, sym->tag); + fprintf (out, ", %d, [[%s]]]", + sym->number, + sym->type_name ? sym->type_name : ""); + } + fputs ("])\n\n", out); +} + + /*---------------------------------. | Output the user actions to OUT. | `---------------------------------*/ @@ -461,7 +486,6 @@ prepare_actions (void) muscle_insert_unsigned_int_table ("conflicting_rules", conflict_list, 0, 1, conflict_list_cnt); } - /*---------------------------. | Call the skeleton parser. | @@ -473,7 +497,7 @@ output_skeleton (void) FILE *in; FILE *out; int filter_fd[2]; - char const *argv[7]; + char const *argv[9]; pid_t pid; /* Compute the names of the package data dir and skeleton files. */ @@ -524,6 +548,8 @@ output_skeleton (void) { int i = 0; argv[i++] = m4; + argv[i++] = "-I"; + argv[i++] = pkgdatadir; if (trace_flag & trace_m4) argv[i++] = "-dV"; argv[i++] = full_m4sugar; @@ -565,6 +591,7 @@ output_skeleton (void) /* Output the definitions of all the muscles. */ fputs ("m4_init()\n", out); + type_names_output (out); user_actions_output (out); merger_output (out); token_definitions_output (out);