]> git.saurik.com Git - bison.git/blobdiff - src/files.c
Regen.
[bison.git] / src / files.c
index 5e01b9f80bfb64565c522258de48da7a19e7447f..2e817b1ed18e247d5834989c6185e079b275403c 100644 (file)
@@ -30,12 +30,18 @@ FILE *finput = NULL;
 
 struct obstack action_obstack;
 struct obstack attrs_obstack;
 
 struct obstack action_obstack;
 struct obstack attrs_obstack;
-struct obstack guard_obstack;
 struct obstack output_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. */
 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. */
 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;
 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;
 
 /* 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;
 \f
 
 /*--------------------------.
 | Is SUFFIX ending STRING?  |
 `--------------------------*/
 
 \f
 
 /*--------------------------.
 | Is SUFFIX ending STRING?  |
 `--------------------------*/
 
-static int
+int
 strsuffix (const char *string, const char *suffix)
 {
   size_t string_len = strlen (string);
 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.                                            |
 `-----------------------------------------------------------------*/
 
 | STRING1, and STRING2.                                            |
 `-----------------------------------------------------------------*/
 
-static char *
+char*
 stringappend (const char *string1, const char *string2)
 {
   size_t len = strlen (string1) + strlen (string2);
 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);
 
        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;
     }
 
       return;
     }
 
@@ -354,6 +368,10 @@ compute_base_names (void)
       if (ext_index)
        compute_exts_from_gf (infile + ext_index);
 
       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;
     }
 
       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);
 
                         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;
   }
 }
     return;
   }
 }