From 270a173cf307c5032f3644593eef0d66ed68676f Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Thu, 1 Nov 2001 18:28:38 +0000 Subject: [PATCH] * 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. --- ChangeLog | 8 ++++++++ src/files.c | 26 ++++++++++++++++++-------- tests/regression.at | 27 +++++++++++++++++++-------- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index b6d0ec68..fac18ea4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2001-11-01 Akim Demaille + + * 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 * tests/regression.at (Invalid input: 2): New. diff --git a/src/files.c b/src/files.c index 7e29c4c6..0dbcac37 100644 --- a/src/files.c +++ b/src/files.c @@ -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) diff --git a/tests/regression.at b/tests/regression.at index 89818745..f37f2c08 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -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]) -- 2.47.2