]> git.saurik.com Git - bison.git/commitdiff
* tests/regression.at (AT_TEST_CPP_GUARD_H): New.
authorAkim Demaille <akim@epita.fr>
Thu, 1 Nov 2001 18:28:38 +0000 (18:28 +0000)
committerAkim Demaille <akim@epita.fr>
Thu, 1 Nov 2001 18:28:38 +0000 (18:28 +0000)
Check that `9foo.y' produces correct cpp guards.
* src/files.c (compute_header_macro): Prepend `BISON_' to CPP
guards.
Reported by Wwp.

ChangeLog
src/files.c
tests/regression.at

index b6d0ec68146c2281c6370c0bcb827ebbcf4e8534..fac18ea4a90cb2b77fb153d552a97c2711ea99cf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2001-11-01  Akim Demaille  <akim@epita.fr>
+
+       * tests/regression.at (AT_TEST_CPP_GUARD_H): New.
+       Check that `9foo.y' produces correct cpp guards.
+       * src/files.c (compute_header_macro): Prepend `BISON_' to CPP
+       guards.
+       Reported by Wwp.
+
 2001-11-01  Akim Demaille  <akim@epita.fr>
 
        * tests/regression.at (Invalid input: 2): New.
index 7e29c4c60fa8d1eafde88f1877c9e2de6ee0a6d6..0dbcac37428584bccb6486fc714a64de2adc6f74 100644 (file)
@@ -86,26 +86,36 @@ stringappend (const char *string1, const char *string2)
 }
 
 
-/*---------------------------------------------------------------.
-|  Computes the macro name used to avoid double inclusion in the |
-|  header of the parser and store it in header_macro_name.       |
-`---------------------------------------------------------------*/
+/*-----------------------------------------------------------------.
+| Computes the macro name used to avoid double inclusion in the    |
+| header of the parser and store it in header_macro_name.  Be sure |
+| to produce valid CPP names (don't start with digit, remain       |
+| alphanumerical + underscore).                                    |
+`-----------------------------------------------------------------*/
 
 static char *
 compute_header_macro (void)
 {
+  const char *prefix = "BISON_";
   char *macro_name, *cp;
 
   if (spec_defines_file)
-    macro_name = xstrdup (spec_defines_file);
+    {
+      macro_name = XMALLOC (char,
+                           strlen (prefix) +
+                           strlen (spec_defines_file) + 1);
+      cp = stpcpy (macro_name, prefix);
+      cp = stpcpy (cp, spec_defines_file);
+    }
   else
     {
       macro_name = XMALLOC (char,
+                           strlen (prefix) +
                            strlen (base_name) +
                            strlen (header_extension) + 1);
-
-      stpcpy (macro_name, base_name);
-      strcat (macro_name, header_extension);
+      cp = stpcpy (macro_name, prefix);
+      cp = stpcpy (cp, base_name);
+      cp = stpcpy (cp, header_extension);
     }
 
   for (cp = macro_name; *cp; ++cp)
index 8981874542b14b9f01e6083b22038d0a683d7f2e..f37f2c085bafb5a9187778aa200b0fd782021b1f 100644 (file)
@@ -148,23 +148,34 @@ AT_CHECK([bison input.y], [1], [],
 AT_CLEANUP
 
 
+
 ## --------------------- ##
 ## Invalid CPP headers.  ##
 ## --------------------- ##
 
-AT_SETUP([Invalid CPP headers])
+# AT_TEST_CPP_GUARD_H([INPUT-FILE-BASE)
+# -------------------------------------
+m4_define([AT_TEST_CPP_GUARD_H],
+[AT_SETUP([Invalid CPP guards: $1])
 
-mkdir input
+# possibly create and nuke inner directories.
+m4_bmatch([$1], [[/]],
+[dirname=`AS_DIRNAME([$1])`
+AS_MKDIR_P([$dirname])
+AT_CLEANUP_FILES([$dirname])])
 
-AT_DATA([input/input.y],
+AT_DATA([$1.y],
 [%%
 dummy:
 ])
 
-AT_CHECK([bison --defines input/input.y])
+AT_CHECK([bison --defines=$1.h $1.y])
 
-AT_CHECK([sed 1q input/input.tab.h], 0,
-[[#ifndef INPUT_INPUT_TAB_H
-]])
+# CPP should be happy with it.
+AT_CHECK([$CC -E $1.h], 0, [ignore])
+
+AT_CLEANUP($1.y)
+])
 
-AT_CLEANUP(input)
+AT_TEST_CPP_GUARD_H([input/input])
+AT_TEST_CPP_GUARD_H([9foo])