bug-bison
[Top][All Lists]
Advanced

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

[PATCH] - UPDATED fix for variadic declaration of yyerror() and yylex()


From: Jeannot Langlois
Subject: [PATCH] - UPDATED fix for variadic declaration of yyerror() and yylex() function prototypes
Date: Thu, 23 Jun 2005 21:00:38 -0400
User-agent: Mozilla Thunderbird 0.8 (X11/20040913)

Hi Paul,
Hi Akim,


Since I didn't get any feedback yet from the posting I have made to the mailing list about the problems I have encountered with older version of my development tools corrupting the testsuite (and the fact that I'll be away for a few days), here's my newest patch anyways. Please disregard (or revert from the bison-2.0a tree, if necessary) the previous patch I had posted (yylex_yyerror_autogeneration.diff) and use this new one: yylex_yyerror_autogeneration_20050619.diff.
This latest patch:
1) takes care of generating the proper function prototypes declarations for yyerror() and yylex(). 2) modifies the proper .at files so the generated testsuite passes all testcases properly.

The attached patch should be applied within Bison-2.0a's base directory using "patch -p0 < yylex_yyerror_autogeneration_20050619.diff".


Regards,

--
*Jeannot Langlois*
B. Sc.  Computer Science / B. Sc.  Informatique
Software Developer / Programmeur-Analyste
System/Network Administrator / Administrateur Système/Réseau
**
LINUX_LOGO



diff -u -r data/c.m4 data/c.m4
--- data/c.m4   2005-05-14 02:52:28.000000000 -0400
+++ data/c.m4   2005-06-19 13:39:44.000000000 -0400
@@ -322,6 +322,14 @@
        [[#]line $1 $2])])
 
 
+# b4_yacc_flag
+# Expand IF-TRUE, if yacc_flag, IF-FALSE otherwise
+# ------------------------------------------------
+m4_define([b4_yyyacc_mode_if], 
+[m4_if(b4_yacc_flag, [1], [$1], [$2])]
+)
+
+
 # b4_symbol_actions(FILENAME, LINENO,
 #                   SYMBOL-TAG, SYMBOL-NUM,
 #                   SYMBOL-ACTION, SYMBOL-TYPENAME)
diff -u -r data/glr.c data/glr.c
--- data/glr.c  2005-05-22 01:25:16.000000000 -0400
+++ data/glr.c  2005-06-19 13:39:44.000000000 -0400
@@ -49,6 +49,17 @@
 m4_define([b4_user_formals],
 [m4_ifset([b4_parse_param], [, b4_c_ansi_formals(b4_parse_param)])])
 
+# b4_alt_user_formals
+# -------------------------
+m4_define([b4_alt_user_formals],
+[m4_ifset([b4_parse_param], [b4_c_ansi_formals(b4_parse_param), ])])
+
+# b4_yyerror_params
+# -----------------
+m4_define([b4_yyerror_params],
+[b4_pure_if([b4_location_if([YYLTYPE *yylocationp, 
])[]b4_alt_user_formals[]])]dnl
+[const char* yymsg]dnl
+)
 
 # b4_yyerror_args
 # ---------------
@@ -412,10 +423,19 @@
   ]b4_stos[
 };
 
-
+
 /* Prevent warning if -Wmissing-prototypes.  */
 ]b4_c_ansi_function_decl([yyparse], [int], b4_parse_param)[
 
+/* Prevent warning if -Wmissing-prototypes.  */
+]b4_c_ansi_function_decl([yylex], [int], b4_lex_param)[
+
+/* Prevent warning if -Wmissing-prototypes.  */
+]b4_yyyacc_mode_if(
+[]b4_c_function_decl([yyerror], [int], b4_yyerror_params)[],
+[]b4_c_function_decl([yyerror], [void], b4_yyerror_params)[]
+)[
+
 /* Error token number */
 #define YYTERROR 1
 
diff -u -r data/yacc.c data/yacc.c
--- data/yacc.c 2005-05-21 13:12:32.000000000 -0400
+++ data/yacc.c 2005-06-19 13:39:44.000000000 -0400
@@ -63,6 +63,15 @@
 m4_ifdef([b4_lex_param], b4_lex_param)))
 
 
+# b4_yyerror_params
+# ----------------
+m4_define([b4_yyecho_pp], $1)
+
+m4_define([b4_yyerror_params],
+[b4_Pure_if([b4_location_if([YYLTYPE *yylocationp, ])]dnl
+m4_ifset([b4_parse_param], [[m4_map_sep([b4_yyecho_pp], [, ], 
m4_dquote(m4_map_sep([b4_yyecho_pp], [, ], m4_dquote(b4_parse_param))))]][[, 
]]))]dnl
+[const char* yymsg]dnl
+)
 
 ## ------------ ##
 ## Data Types.  ##
@@ -742,6 +751,24 @@
 #endif /* ! YYPARSE_PARAM */
 
 
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYLEX_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+int yylex (void *YYLEX_PARAM);
+# else
+int yylex ();
+# endif
+#else
+b4_c_function_decl([yylex], [int], b4_lex_param)
+#endif /* ! YYLEX_PARAM */
+
+/* Prevent warnings from -Wmissing-prototypes. */
+b4_yyyacc_mode_if(
+b4_c_function_decl([yyerror], [int], b4_yyerror_params),
+b4_c_function_decl([yyerror], [void], b4_yyerror_params)
+)
+
 m4_divert_push([KILL])# ======================== M4 code.
 # b4_declare_parser_variables
 # ---------------------------
diff -u -r src/output.c src/output.c
--- src/output.c        2005-05-14 02:52:29.000000000 -0400
+++ src/output.c        2005-06-19 13:39:44.000000000 -0400
@@ -599,6 +599,7 @@
   MUSCLE_INSERT_BOOL ("locations_flag", locations_flag);
   MUSCLE_INSERT_BOOL ("pure", pure_parser);
   MUSCLE_INSERT_BOOL ("synclines_flag", !no_lines_flag);
+  MUSCLE_INSERT_BOOL ("yacc_flag", yacc_flag);
 
   /* File names.  */
   MUSCLE_INSERT_STRING ("prefix", spec_name_prefix ? spec_name_prefix : "yy");
diff -u -r tests/calc.at tests/calc.at
--- tests/calc.at       2005-05-22 01:06:07.000000000 -0400
+++ tests/calc.at       2005-06-19 15:16:30.000000000 -0400
@@ -72,7 +72,8 @@
 [/* yyerror receives the location if:
    - %location & %pure & %glr
    - %location & %pure & %yacc & %parse-param. */
-static void yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ])
+static AT_YACCMODE_IF([int], [void])
+yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ])
                      AT_PARAM_IF([semantic_value *result, int *count, ])
                      const char *s
                      );])[
@@ -144,7 +145,7 @@
   return parser.parse ();
 }
 ],
-[static void
+[static AT_YACCMODE_IF([int], [void])
 yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ])
          AT_PARAM_IF([semantic_value *result, int *count, ])
          const char *s)
@@ -161,6 +162,7 @@
             AT_LOC.last_column - 1);
   fprintf (stderr, ": ");])
   fprintf (stderr, "%s\n", s);
+  AT_YACCMODE_IF([return 0;], [])
 }])[
 
 
diff -u -r tests/cxx-type.at tests/cxx-type.at
--- tests/cxx-type.at   2005-05-14 02:52:29.000000000 -0400
+++ tests/cxx-type.at   2005-06-19 15:18:06.000000000 -0400
@@ -55,7 +55,7 @@
 # define ERROR_PARAMETERS char const *s
 #endif
   int yylex (LEX_PARAMETERS);
-  int yyerror (ERROR_PARAMETERS);
+  ]AT_YACCMODE_IF([int], [void])[ yyerror (ERROR_PARAMETERS);
 %}
 
 %token TYPENAME ID
@@ -188,7 +188,7 @@
     }
 }
 
-int
+]AT_YACCMODE_IF([int], [void])[
 yyerror (ERROR_PARAMETERS)
 {
 #if YYPURE && YYLSP_NEEDED
@@ -197,7 +197,7 @@
     abort ();
 #endif
   fprintf (stderr, "%s\n", s);
-  return 0;
+  ]AT_YACCMODE_IF([return 0;], [])[
 }
 
 
diff -u -r tests/glr-regression.at tests/glr-regression.at
--- tests/glr-regression.at     2005-05-22 01:12:23.000000000 -0400
+++ tests/glr-regression.at     2005-06-19 15:18:31.000000000 -0400
@@ -34,7 +34,7 @@
 #define YYSTYPE int
 static YYSTYPE exprMerge (YYSTYPE x0, YYSTYPE x1);
 int yylex (void);
-int yyerror (char const *msg);
+]AT_YACCMODE_IF([int], [void])[ yyerror (char const *msg);
 %}
 
 
@@ -70,11 +70,11 @@
   return yyparse ();
 }
 
-int
+]AT_YACCMODE_IF([int], [void])[
 yyerror (char const *msg)
 {
   fprintf (stderr, "%s\n", msg);
-  exit (4);
+  ]AT_YACCMODE_IF([exit(4);], [])[
 }
 
 
diff -u -r tests/local.at tests/local.at
--- tests/local.at      2005-05-14 02:52:29.000000000 -0400
+++ tests/local.at      2005-06-19 14:44:40.000000000 -0400
@@ -45,6 +45,9 @@
 [m4_bmatch([$3], ["lalr1.cc"], [$1], [$2])])
 m4_pushdef([AT_GLR_IF],
 [m4_bmatch([$3], [%glr-parser], [$1], [$2])])
+# Using %yacc?
+m4_pushdef([AT_YACCMODE_IF],
+[m4_bmatch([$3], [%yacc], [$1], [$2])])
 # Using yacc.c?
 m4_pushdef([AT_YACC_IF],
 [m4_bmatch([$3], [%glr-parser\|%skeleton], [$2], [$1])])
@@ -121,6 +124,7 @@
 m4_popdef([AT_LOCATION_IF])
 m4_popdef([AT_PARAM_IF])
 m4_popdef([AT_YACC_IF])
+m4_popdef([AT_YACCMODE_IF])
 m4_popdef([AT_GLR_IF])
 m4_popdef([AT_LALR1_CC_IF])
 ])# AT_BISON_OPTION_POPDEFS

reply via email to

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