bison-patches
[Top][All Lists]
Advanced

[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




reply via email to

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