[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 7/8] glr.cc: do not override C++ definitions by C macros.
From: |
Akim Demaille |
Subject: |
[PATCH 7/8] glr.cc: do not override C++ definitions by C macros. |
Date: |
Wed, 4 Jul 2012 16:53:03 +0200 |
* data/glr.c: here.
* data/glr.cc: Fix overquotation.
* tests/headers.at: Comment changes.
---
data/glr.c | 6 ++++--
data/glr.cc | 17 +++++++++--------
tests/headers.at | 5 +++--
3 files changed, 16 insertions(+), 12 deletions(-)
diff --git a/data/glr.c b/data/glr.c
index c4b394a..ebef969 100644
--- a/data/glr.c
+++ b/data/glr.c
@@ -18,7 +18,10 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-m4_include(b4_pkgdatadir/[c.m4])
+# If we are loaded by glr.cc, do not override c++.m4 definitions by
+# those of c.m4.
+m4_if(b4_skeleton, ["glr.c"],
+ [m4_include(b4_pkgdatadir/[c.m4])])
## ---------------- ##
## Default values. ##
@@ -494,7 +497,6 @@ static const ]b4_int_type_for([b4_stos])[ yystos[] =
# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
#endif
-
/* YYLEX -- calling `yylex' with the right arguments. */
#define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
diff --git a/data/glr.cc b/data/glr.cc
index 2579091..ba6ceac 100644
--- a/data/glr.cc
+++ b/data/glr.cc
@@ -78,9 +78,9 @@ m4_define([b4_yy_symbol_print_generate],
[static void],
[[FILE *], []],
[[int yytype], [yytype]],
- [[const b4_namespace_ref::b4_parser_class_name::semantic_type *yyvaluep],
+ [[const ]b4_namespace_ref::b4_parser_class_name[::semantic_type *yyvaluep],
[yyvaluep]],
- [[const b4_namespace_ref::b4_parser_class_name::location_type
*yylocationp],
+ [[const ]b4_namespace_ref::b4_parser_class_name[::location_type
*yylocationp],
[yylocationp]],
b4_parse_param)[
{
@@ -98,13 +98,14 @@ m4_append([b4_post_prologue],
#define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
]b4_c_ansi_function_decl([yyerror],
[static void],
- [[const b4_namespace_ref::b4_parser_class_name::location_type
*yylocationp],
+ [[const ]b4_namespace_ref::b4_parser_class_name[::location_type
*yylocationp],
[yylocationp]],
b4_parse_param,
[[const char* msg], [msg]])])
-# Define yyerror.
+# Hijack the epilogue to define implementations (yyerror, parser member
+# functions etc.).
m4_append([b4_epilogue],
[b4_syncline(address@hidden@], address@hidden@])[
/*------------------.
@@ -113,7 +114,7 @@ m4_append([b4_epilogue],
]b4_c_ansi_function_def([yyerror],
[static void],
- [[const b4_namespace_ref::b4_parser_class_name::location_type
*yylocationp],
+ [[const ]b4_namespace_ref::b4_parser_class_name[::location_type
*yylocationp],
[yylocationp]],
b4_parse_param,
[[const char* msg], [msg]])[
@@ -217,10 +218,10 @@ b4_namespace_close[
# Let glr.c believe that the user arguments include the parser itself.
m4_ifset([b4_parse_param],
[m4_pushdef([b4_parse_param],
- m4_dquote([[[b4_namespace_ref::b4_parser_class_name& yyparser],
[[yyparser]]],]
-m4_defn([b4_parse_param])))],
+ [[b4_namespace_ref::b4_parser_class_name[& yyparser],
[[yyparser]]],]
+m4_defn([b4_parse_param]))],
[m4_pushdef([b4_parse_param],
- [[[[b4_namespace_ref::b4_parser_class_name& yyparser],
[[yyparser]]]]])
+ [[b4_namespace_ref::b4_parser_class_name[& yyparser],
[[yyparser]]]])
])
m4_include(b4_pkgdatadir/[glr.c])
m4_popdef([b4_parse_param])
diff --git a/tests/headers.at b/tests/headers.at
index 2eba776..e1e74f5 100644
--- a/tests/headers.at
+++ b/tests/headers.at
@@ -188,7 +188,8 @@ main (void)
ECHO(x4_parse());
x5_::parser p5;
ECHO(p5.parse());
-// ECHO(x6_parse());
+// x6_::parser p6;
+// ECHO(p6.parse());
return 0;
}
]])
@@ -198,7 +199,7 @@ AT_DATA_GRAMMAR_SEVERAL([x2], [%locations %debug])
AT_DATA_GRAMMAR_SEVERAL([x3], [%glr-parser])
AT_DATA_GRAMMAR_SEVERAL([x4], [%locations %debug %glr-parser])
AT_DATA_GRAMMAR_SEVERAL([x5], [%locations %debug %language "c++"])
-#AT_DATA_GRAMMAR_SEVERAL([x6], [%locations %language "c++"])
+#AT_DATA_GRAMMAR_SEVERAL([x5], [%locations %language "c++" %glr-parser])
AT_COMPILE_CXX([parser], [x1.o x2.o x3.o x4.o x5.o main.cc])
AT_CHECK([./parser], [0],
--
1.7.11.1
- [PATCH 0/8] Various improvements prompted by api.prefix, Akim Demaille, 2012/07/04
- [PATCH 3/8] c++: fewer #includes in the headers., Akim Demaille, 2012/07/04
- [PATCH 5/8] api.prefix: do not use #define to handle YYSTYPE_IS_TRIVIAL etc., Akim Demaille, 2012/07/04
- [PATCH 7/8] glr.cc: do not override C++ definitions by C macros.,
Akim Demaille <=
- [PATCH 1/8] tests: more logs., Akim Demaille, 2012/07/04
- [PATCH 6/8] YYLLOC_DEFAULT: factor, and don't export it in headers., Akim Demaille, 2012/07/04
- [PATCH 2/8] glr.cc: formatting changes., Akim Demaille, 2012/07/04
- [PATCH 4/8] tests: portability fixes., Akim Demaille, 2012/07/04
- [PATCH 8/8] tests: headers.at: strengthen., Akim Demaille, 2012/07/04