bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: Both: CPP Guards


From: Akim Demaille
Subject: FYI: Both: CPP Guards
Date: 01 Nov 2001 19:27:13 +0100
User-agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.4 (Artificial Intelligence)

Index: ChangeLog
from  Akim Demaille  <address@hidden>

        * 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.

Index: src/files.c
===================================================================
RCS file: /cvsroot/bison/bison/src/files.c,v
retrieving revision 1.51.2.10
diff -u -u -r1.51.2.10 files.c
--- src/files.c 2001/10/02 16:17:41 1.51.2.10
+++ src/files.c 2001/11/01 18:26:10
@@ -86,26 +86,36 @@
 }
 
 
-/*---------------------------------------------------------------.
-|  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: tests/regression.at
===================================================================
RCS file: /cvsroot/bison/bison/tests/regression.at,v
retrieving revision 1.1.2.5
diff -u -u -r1.1.2.5 regression.at
--- tests/regression.at 2001/11/01 18:03:46 1.1.2.5
+++ tests/regression.at 2001/11/01 18:26:11
@@ -148,23 +148,34 @@
 AT_CLEANUP
 
 
+
 ## --------------------- ##
 ## Invalid CPP headers.  ##
 ## --------------------- ##
-
-AT_SETUP([Invalid CPP headers])
 
-mkdir input
+# AT_TEST_CPP_GUARD_H([INPUT-FILE-BASE)
+# -------------------------------------
+m4_define([AT_TEST_CPP_GUARD_H],
+[AT_SETUP([Invalid CPP guards: $1])
+
+# 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])



reply via email to

[Prev in Thread] Current Thread [Next in Thread]