summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorAkim Demaille <akim@lrde.epita.fr>2012-05-21 14:21:51 +0200
committerAkim Demaille <akim@lrde.epita.fr>2012-05-21 18:15:41 +0200
commit22172d473180c53755290f13ebd2d53e12e74fe0 (patch)
tree804555fc790cf45753ad437509d12f0177ed68cf /data
parenta19728cbb5efdac48c97ef6e6c997f2534c03391 (diff)
downloadbison-22172d473180c53755290f13ebd2d53e12e74fe0.tar.gz
c++: compute the header guards.
This is a frequent request. Recently pointed out by Wei Song, <http://lists.gnu.org/archive/html/help-bison/2012-05/msg00002.html>. * data/c.m4 (b4_tocpp, b4_cpp_guard, b4_cpp_guard_open) (b4_cpp_guard_close): New. * data/lalr1.cc, data/location.cc, data/stack.hh: Use them. * TODO (Header Guards): Move to... * NEWS: here. Formatting changes.
Diffstat (limited to 'data')
-rw-r--r--data/c.m427
-rw-r--r--data/lalr1.cc11
-rw-r--r--data/location.cc10
-rw-r--r--data/stack.hh6
4 files changed, 37 insertions, 17 deletions
diff --git a/data/c.m4 b/data/c.m4
index fee006a3..b49d6dc9 100644
--- a/data/c.m4
+++ b/data/c.m4
@@ -17,6 +17,33 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# b4_tocpp(STRING)
+# ----------------
+# Convert STRING into a valid C macro name.
+m4_define([b4_tocpp],
+[m4_toupper(m4_bpatsubst(m4_quote($1), [[^a-zA-Z0-9]+], [_]))])
+
+
+# b4_cpp_guard(FILE)
+# ------------------
+# A valid C macro name to use as a CPP header guard for FILE.
+m4_define([b4_cpp_guard],
+[b4_tocpp(m4_defn([b4_prefix])/[$1])])
+
+
+# b4_cpp_guard_open(FILE)
+# b4_cpp_guard_close(FILE)
+# ------------------------
+# Open/close CPP inclusion guards for FILE.
+m4_define([b4_cpp_guard_open],
+[#ifndef b4_cpp_guard([$1])
+# define b4_cpp_guard([$1])])
+
+m4_define([b4_cpp_guard_close],
+[#endif b4_comment([!b4_cpp_guard([$1])])])
+
+
## ---------------- ##
## Identification. ##
## ---------------- ##
diff --git a/data/lalr1.cc b/data/lalr1.cc
index 0fe3aeed..4f0b2688 100644
--- a/data/lalr1.cc
+++ b/data/lalr1.cc
@@ -37,7 +37,6 @@ b4_defines_if(
[@output(b4_spec_defines_file@)@
b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++],
[2002-2012])
-dnl FIXME: This is wrong, we want computed header guards.
[
/**
** \file ]b4_spec_defines_file[
@@ -46,8 +45,7 @@ dnl FIXME: This is wrong, we want computed header guards.
/* C++ LALR(1) parser skeleton written by Akim Demaille. */
-#ifndef PARSER_HEADER_H
-# define PARSER_HEADER_H
+]b4_cpp_guard_open([b4_spec_defines_file])[
]b4_percent_code_get([[requires]])[
@@ -283,10 +281,9 @@ b4_user_stype
/* Redirection for backward compatibility. */
# define YYSTYPE b4_namespace_ref::b4_parser_class_name::semantic_type
#endif
-])
-b4_percent_code_get([[provides]])[]dnl
-
-[#endif /* ! defined PARSER_HEADER_H */]
+])[
+]b4_percent_code_get([[provides]])[
+]b4_cpp_guard_close([b4_spec_defines_file])
])dnl
@output(b4_parser_file_name@)@
b4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++],
diff --git a/data/location.cc b/data/location.cc
index 0ee02c28..f45f634e 100644
--- a/data/location.cc
+++ b/data/location.cc
@@ -27,8 +27,7 @@ b4_copyright([Positions for Bison parsers in C++],
** Define the ]b4_namespace_ref[::position class.
*/
-#ifndef BISON_POSITION_HH
-# define BISON_POSITION_HH
+]b4_cpp_guard_open([b4_dir_prefix[]position.hh])[
# include <iostream>
# include <string>
@@ -148,7 +147,7 @@ b4_copyright([Positions for Bison parsers in C++],
}
]b4_namespace_close[
-#endif // not BISON_POSITION_HH]
+]b4_cpp_guard_close([b4_dir_prefix[]position.hh])
@output(b4_dir_prefix[]location.hh@)@
b4_copyright([Locations for Bison parsers in C++],
[2002-2007, 2009-2012])[
@@ -158,8 +157,7 @@ b4_copyright([Locations for Bison parsers in C++],
** Define the ]b4_namespace_ref[::location class.
*/
-#ifndef BISON_LOCATION_HH
-# define BISON_LOCATION_HH
+]b4_cpp_guard_open([b4_dir_prefix[]location.hh])[
# include <iostream>
# include <string>
@@ -295,6 +293,6 @@ b4_copyright([Locations for Bison parsers in C++],
]b4_namespace_close[
-#endif // not BISON_LOCATION_HH]
+]b4_cpp_guard_close([b4_dir_prefix[]location.hh])
m4_divert_pop(0)
m4_changecom([#])
diff --git a/data/stack.hh b/data/stack.hh
index 52933774..ddedc79b 100644
--- a/data/stack.hh
+++ b/data/stack.hh
@@ -30,8 +30,7 @@ b4_copyright([Stack handling for Bison parsers in C++],
** Define the ]b4_namespace_ref[::stack class.
*/
-#ifndef BISON_STACK_HH
-# define BISON_STACK_HH
+]b4_cpp_guard_open([b4_dir_prefix[]stack.hh])[
# include <deque>
@@ -119,8 +118,7 @@ b4_copyright([Stack handling for Bison parsers in C++],
};
]b4_namespace_close[
-#endif // not BISON_STACK_HH[]dnl
-]
+]b4_cpp_guard_close([b4_dir_prefix[]stack.hh])
m4_divert_pop(0)
m4_popdef([b4_copyright_years])dnl
m4_changecom([#])