X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/270a173cf307c5032f3644593eef0d66ed68676f..d945f5cd8e85c0343da52dc720d23624e1c28661:/src/files.c diff --git a/src/files.c b/src/files.c index 0dbcac37..b3064b5a 100644 --- a/src/files.c +++ b/src/files.c @@ -23,23 +23,23 @@ #include "getargs.h" #include "files.h" #include "gram.h" +#include "error.h" #include "complain.h" FILE *finput = NULL; struct obstack action_obstack; struct obstack attrs_obstack; -struct obstack table_obstack; -struct obstack defines_obstack; struct obstack guard_obstack; struct obstack output_obstack; char *spec_outfile = NULL; /* for -o. */ char *spec_file_prefix = NULL; /* for -b. */ -char *spec_name_prefix = NULL; /* for -p. */ +const char *spec_name_prefix = "yy"; /* for -p. */ char *spec_verbose_file = NULL; /* for --verbose. */ char *spec_graph_file = NULL; /* for -g. */ char *spec_defines_file = NULL; /* for --defines. */ +char *parser_file_name = NULL; char *infile = NULL; char *attrsfile = NULL; @@ -93,7 +93,7 @@ stringappend (const char *string1, const char *string2) | alphanumerical + underscore). | `-----------------------------------------------------------------*/ -static char * +char * compute_header_macro (void) { const char *prefix = "BISON_"; @@ -177,26 +177,6 @@ obstack_save (struct obstack *obs, const char *filename) xfclose (out); } -/*---------------------------------------------------------------------. -| Output double inclusion protection macros and saves defines_obstack | -`---------------------------------------------------------------------*/ - -static void -defines_obstack_save (const char *filename) -{ - FILE *out = xfopen (filename, "w"); - size_t size = obstack_object_size (&defines_obstack); - char *macro_name = compute_header_macro (); - - fprintf (out, "#ifndef %s\n", macro_name); - fprintf (out, "# define %s\n\n", macro_name); - fwrite (obstack_finish (&defines_obstack), 1, size, out); - fprintf (out, "\n#endif /* not %s */\n", macro_name); - - free (macro_name); - xfclose (out); -} - /*------------------------------------------------------------------. | Return the path to the skeleton which locaction might be given in | | ENVVAR, otherwise return SKELETON_NAME. | @@ -211,9 +191,9 @@ skeleton_find (const char *envvar, const char *skeleton_name) if (!res) { /* Skeleton file name without path */ - const char *skel_name = strrchr(skeleton_name, '/'); + const char *skel_name = strrchr (skeleton_name, '/'); if (!skel_name) - skel_name = strrchr(skeleton_name, '\\'); + skel_name = strrchr (skeleton_name, '\\'); if (!skel_name) skel_name = skeleton_name; else @@ -432,6 +412,9 @@ compute_output_file_names (void) { compute_base_names (); + parser_file_name = + spec_outfile ? spec_outfile : stringappend (base_name, src_extension); + /* If not yet done. */ if (!src_extension) src_extension = ".c"; @@ -452,40 +435,9 @@ compute_output_file_names (void) #ifndef MSDOS attrsfile = stringappend (attrsfile, header_extension); #endif /* MSDOS */ - -} - -/*-----------------------------------------------------------------. -| Open the input file. Look for the skeletons. Find the names of | -| the output files. Prepare the obstacks. | -`-----------------------------------------------------------------*/ - -void -open_files (void) -{ - finput = xfopen (infile, "r"); - - /* Initialize the obstacks. */ - obstack_init (&action_obstack); - obstack_init (&attrs_obstack); - obstack_init (&table_obstack); - obstack_init (&defines_obstack); - obstack_init (&guard_obstack); - obstack_init (&output_obstack); } - -/*-----------------------. -| Close the open file.. | -`-----------------------*/ - -void -close_files (void) -{ - xfclose (finput); -} - /*---------------------------. | Produce the output files. | `---------------------------*/ @@ -493,18 +445,6 @@ close_files (void) void output_files (void) { - /* Output the main file. */ - if (spec_outfile) - obstack_save (&table_obstack, spec_outfile); - else - obstack_save (&table_obstack, stringappend (base_name, src_extension)); - obstack_free (&table_obstack, NULL); - - /* Output the header file if wanted. */ - if (defines_flag) - defines_obstack_save (spec_defines_file); - obstack_free (&defines_obstack, NULL); - #if 0 /* Seems to be invalid now --akim. */ @@ -521,12 +461,13 @@ output_files (void) char *temp_name; obstack_save (&attrs_obstack, attrsfile); - obstack_free (&attrs_obstack, NULL); temp_name = stringappend (short_base_name, EXT_GUARD_C); #ifndef MSDOS temp_name = stringappend (temp_name, src_extension); #endif /* MSDOS */ obstack_save (&guard_obstack, temp_name); - obstack_free (&guard_obstack, NULL); } + + obstack_free (&guard_obstack, NULL); + obstack_free (&attrs_obstack, NULL); }