X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/f499b06243dfe7d6387c9413411601cd5c20dd2c..e9f87b5b7df2e328d2e4196d276c0d96594c906b:/src/files.c diff --git a/src/files.c b/src/files.c index 5e01b9f8..2e817b1e 100644 --- a/src/files.c +++ b/src/files.c @@ -30,12 +30,18 @@ FILE *finput = NULL; struct obstack action_obstack; struct obstack attrs_obstack; -struct obstack guard_obstack; struct obstack output_obstack; +/* Initializing some values below (such SPEC_NAME_PREFIX to `yy') is + tempting, but don't do that: for the time being our handling of the + %directive vs --option leaves precedence to the options by deciding + that if a %directive sets a variable which is really set (i.e., not + NULL), then the %directive is ignored. As a result, %name-prefix, + for instance, will not be honored. */ + char *spec_outfile = NULL; /* for -o. */ char *spec_file_prefix = NULL; /* for -b. */ -const char *spec_name_prefix = "yy"; /* for -p. */ +const char *spec_name_prefix = NULL; /* for -p. */ char *spec_verbose_file = NULL; /* for --verbose. */ char *spec_graph_file = NULL; /* for -g. */ char *spec_defines_file = NULL; /* for --defines. */ @@ -45,19 +51,22 @@ char *infile = NULL; char *attrsfile = NULL; static char *base_name = NULL; -static char *short_base_name = NULL; +char *short_base_name = NULL; /* C source file extension (the parser source). */ const char *src_extension = NULL; /* Header file extension (if option ``-d'' is specified). */ const char *header_extension = NULL; + +/* Should we insert '.tab' in yacc-compatible parsers? */ +int tab_extension = 0; /*--------------------------. | Is SUFFIX ending STRING? | `--------------------------*/ -static int +int strsuffix (const char *string, const char *suffix) { size_t string_len = strlen (string); @@ -74,7 +83,7 @@ strsuffix (const char *string, const char *suffix) | STRING1, and STRING2. | `-----------------------------------------------------------------*/ -static char * +char* stringappend (const char *string1, const char *string2) { size_t len = strlen (string1) + strlen (string2); @@ -328,6 +337,11 @@ compute_base_names (void) short_base_length -= 4; short_base_name = strndup (spec_outfile, short_base_length); + /* FIXME: This is a quick and dirty way for me to find out if we + should .tab or not, using the computations above. */ + if (strcmp (base_name, short_base_name)) + tab_extension = 1; + return; } @@ -354,6 +368,10 @@ compute_base_names (void) if (ext_index) compute_exts_from_gf (infile + ext_index); + /* It seems that when only a prefix is given, '.tab' should always be + used. */ + tab_extension = 1; + return; } @@ -387,6 +405,9 @@ compute_base_names (void) strlen (short_base_name) + strlen (EXT_TAB) + 1); stpcpy (stpcpy (base_name, short_base_name), EXT_TAB); + /* By default, Bison should insert '.tab' were needed. */ + tab_extension = 1; + return; } }