bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/4] yacc.c: no longer support YYERROR_VERBOSE


From: Akim Demaille
Subject: [PATCH 2/4] yacc.c: no longer support YYERROR_VERBOSE
Date: Sat, 4 Jan 2020 11:07:38 +0100

Supporting YYERROR_VERBOSE via cpp is a nuisance: m4 is in charge of
handling alternatives.  When adding more options for %define
parse.error, supporting both CPP and M4 is too complex.  Anyway,
YYERROR_VERBOSE was deprecated long ago.

* data/skeletons/yacc.c: Use m4 only to handle verbose/simple error
messages.
---
 data/skeletons/yacc.c | 50 ++++++++++++++++---------------------------
 tests/conflicts.at    |  3 ++-
 2 files changed, 21 insertions(+), 32 deletions(-)

diff --git a/data/skeletons/yacc.c b/data/skeletons/yacc.c
index 242cca4a..a2f93f17 100644
--- a/data/skeletons/yacc.c
+++ b/data/skeletons/yacc.c
@@ -348,14 +348,6 @@ m4_if(b4_api_prefix, [yy], [],
 ]b4_cast_define[
 ]b4_null_define[
 
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE ]b4_error_verbose_if([1], [0])[
-#endif
-
 ]b4_header_include_if([[#include 
]b4_percent_define_get([[api.header.include]])],
                       [m4_ifval(m4_quote(b4_spec_header_file),
                                 [/* Use api.header.include to #include this 
header
@@ -437,7 +429,7 @@ typedef int yy_state_fast_t;
 ]],
 [[#define YY_ASSERT(E) ((void) (0 && (E)))]])[
 
-#if ]b4_lac_if([[1]], [[! defined yyoverflow || YYERROR_VERBOSE]])[
+#if ]b4_lac_if([[1]], [b4_error_verbose_if([[1]], [[!defined yyoverflow]])])[
 
 /* The parser invokes alloca or malloc; define the necessary symbols.  */]dnl
 b4_push_if([], [b4_lac_if([], [[
@@ -504,8 +496,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
 #  endif
 # endif]b4_lac_if([[
 # define YYCOPY_NEEDED 1]])[
-#endif]b4_lac_if([], [[ /* ! defined yyoverflow || YYERROR_VERBOSE */]])[
-
+#endif]b4_lac_if([], [b4_error_verbose_if([], [[/* !defined yyoverflow */]])])[
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
@@ -611,7 +602,7 @@ static const ]b4_int_type_for([b4_translate])[ 
yytranslate[] =
      [[YYRLINE[YYN] -- Source line where rule number YYN was defined.]])[
 #endif
 
-#if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[
+#if ]b4_error_verbose_if([[1]], [b4_api_PREFIX[DEBUG || ]b4_token_table_flag])[
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
@@ -1039,9 +1030,8 @@ yy_lac (yy_state_t *yyesa, yy_state_t **yyes,
 }]])[
 
 
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
+]m4_case(b4_percent_define_get([parse.error]), [verbose],
+[[# ifndef yystrlen
 #  if defined __GLIBC__ && defined _STRING_H
 #   define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
 #  else
@@ -1287,7 +1277,7 @@ yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
   }
   return 0;
 }
-#endif /* YYERROR_VERBOSE */
+]])[
 
 ]b4_yydestruct_define[
 
@@ -1428,12 +1418,11 @@ b4_function_define([[yyparse]], [[int]], 
b4_parse_param)[
   YYSTYPE yyval;]b4_locations_if([[
   YYLTYPE yyloc;]])[
 
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
+]m4_case(b4_percent_define_get([parse.error]), [verbose],
+[[  /* Buffer for error messages, and its allocated size.  */
   char yymsgbuf[128];
   char *yymsg = yymsgbuf;
-  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
-#endif
+  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;]])[
 
 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N)]b4_locations_if([, yylsp 
-= (N)])[)
 
@@ -1750,10 +1739,11 @@ yyerrlab:
   if (!yyerrstatus)
     {
       ++yynerrs;
-#if ! YYERROR_VERBOSE
-      yyerror (]b4_yyerror_args[YY_("syntax error"));
-#else
-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \]b4_lac_if([[
+]m4_case(b4_percent_define_get([parse.error]),
+         [simple],
+[[      yyerror (]b4_yyerror_args[YY_("syntax error"));]],
+         [verbose],
+[[# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \]b4_lac_if([[
                                         yyesa, &yyes, &yyes_capacity, \]])[
                                         yyssp, yytoken)
       {
@@ -1785,8 +1775,7 @@ yyerrlab:
         if (yysyntax_error_status == 2)
           goto yyexhaustedlab;
       }
-# undef YYSYNTAX_ERROR
-#endif
+# undef YYSYNTAX_ERROR]])[
     }
 
 ]b4_locations_if([[  yyerror_range[1] = yylloc;]])[
@@ -1902,7 +1891,7 @@ yyabortlab:
   goto yyreturn;
 
 
-#if ]b4_lac_if([[1]], [[!defined yyoverflow || YYERROR_VERBOSE]])[
+#if ]b4_lac_if([[1]], [b4_error_verbose_if([[1]], [[!defined yyoverflow]])])[
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
 `-------------------------------------------------*/
@@ -1948,10 +1937,9 @@ yyreturn:
 | yypushreturn -- ask for the next token.  |
 `-----------------------------------------*/
 yypushreturn:]])[
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
+]m4_case(b4_percent_define_get([parse.error]), [verbose],
+[[  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);]])[
   return yyresult;
 }
 ]b4_epilogue[]dnl
diff --git a/tests/conflicts.at b/tests/conflicts.at
index 92050fbe..1f918fd6 100644
--- a/tests/conflicts.at
+++ b/tests/conflicts.at
@@ -309,7 +309,6 @@ AT_DATA_GRAMMAR([input.y],
 #include <string.h>
 #include <assert.h>
 
-#define YYERROR_VERBOSE 1
 ]AT_YYERROR_DEFINE[
 /* The current argument. */
 static const char *input;
@@ -324,6 +323,8 @@ yylex (void)
 
 %}
 
+%define parse.error verbose
+
 %nonassoc '<' '>'
 
 %%
-- 
2.24.1




reply via email to

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