From: Akim Demaille Date: Wed, 4 Jul 2012 10:00:24 +0000 (+0200) Subject: glr.cc: do not override C++ definitions by C macros. X-Git-Tag: v2.6~31 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/53ab797db7343b9e7033c6325b70a4a0df8c066b glr.cc: do not override C++ definitions by C macros. * data/glr.c: here. * data/glr.cc: Fix overquotation. * tests/headers.at: Comment changes. --- diff --git a/data/glr.c b/data/glr.c index c4b394a2..ebef9694 100644 --- a/data/glr.c +++ b/data/glr.c @@ -18,7 +18,10 @@ # along with this program. If not, see . -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 2579091f..ba6ceac0 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([@oline@], [@ofile@])[ /*------------------. @@ -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 2eba7769..e1e74f5e 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],