]> git.saurik.com Git - bison.git/commitdiff
* data/c.m4 (b4_c_function, b4_c_ansi_args, b4_c_ansi_arg)
authorAkim Demaille <akim@epita.fr>
Thu, 25 Jul 2002 19:34:54 +0000 (19:34 +0000)
committerAkim Demaille <akim@epita.fr>
Thu, 25 Jul 2002 19:34:54 +0000 (19:34 +0000)
(b4_c_knr_arg_names, b4_c_knr_arg_name, b4_c_knr_arg_decls)
(b4_c_knr_arg_decl): New.
* data/yacc.c: Use it to define yysymprint, yydestruct, and
yyreport_parse_error.

ChangeLog
data/c.m4
data/yacc.c

index fdb562c6244da4b7dd1ba5cc5cafaab870bf2e2b..2313d099231483e2728ba7cc61a0876ea6d62845 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2002-07-25  Akim Demaille  <akim@epita.fr>
+
+       * data/c.m4 (b4_c_function, b4_c_ansi_args, b4_c_ansi_arg)
+       (b4_c_knr_arg_names, b4_c_knr_arg_name, b4_c_knr_arg_decls)
+       (b4_c_knr_arg_decl): New.
+       * data/yacc.c: Use it to define yysymprint, yydestruct, and
+       yyreport_parse_error.
+
 2002-07-25  Akim Demaille  <akim@epita.fr>
 
        * data/yacc.c (yyreport_parse_error): New, extracted from...
 2002-07-25  Akim Demaille  <akim@epita.fr>
 
        * data/yacc.c (yyreport_parse_error): New, extracted from...
index 7a516e1cef8612b1bb43539ceb8c9a65af945db4..e265623420d8dc5473c746d7c935cc1958cf132e 100644 (file)
--- a/data/c.m4
+++ b/data/c.m4
@@ -128,3 +128,55 @@ m4_map_sep([     b4_token_enum], [,
 m4_map([b4_token_define], [$@])
 ])
 ])
 m4_map([b4_token_define], [$@])
 ])
 ])
+
+
+## ---------------------------------------------- ##
+## Declaring C functions in both K&R and ANSI-C.  ##
+## ---------------------------------------------- ##
+
+
+# b4_c_function(NAME, RETURN-VALUE, [TYPE1, NAME1], ...)
+# ------------------------------------------------
+# Declare the function NAME.
+m4_define([b4_c_function],
+[$2
+#if defined (__STDC__) || defined (__cplusplus)
+$1 (b4_c_ansi_args(m4_shiftn(2, $@)))
+#else
+$1 (b4_c_knr_arg_names(m4_shiftn(2, $@)))
+b4_c_knr_arg_decls(m4_shiftn(2, $@))
+#endif[]dnl
+])
+
+
+# b4_c_ansi_args([TYPE1, NAME1], ...)
+# -----------------------------------
+# Output the arguments ANSI-C definition.
+m4_define([b4_c_ansi_args],
+[m4_map_sep([b4_c_ansi_arg], [, ], [$@])])
+
+m4_define([b4_c_ansi_arg],
+[$1 $2])
+
+
+# b4_c_knr_args([TYPE1, NAME1], ...)
+# ----------------------------------
+# Output the argument names.
+m4_define([b4_c_knr_arg_names],
+[m4_map_sep([b4_c_knr_arg_name], [, ], [$@])])
+
+m4_define([b4_c_knr_arg_name],
+[$2])
+
+
+# b4_c_knr_args([TYPE1, NAME1], ...)
+# ----------------------------------
+# Output the K&R argument declarations.
+m4_define([b4_c_knr_arg_decls],
+[m4_map_sep([b4_c_knr_arg_decl],
+            [
+],
+            [$@])])
+
+m4_define([b4_c_knr_arg_decl],
+[    $1 $2;])
index a4483609dd48c3c5c3598e1ee1a75e891c747704..eed1a8a1649249da6635d3c639899957517c9eda 100644 (file)
@@ -603,52 +603,17 @@ yystpcpy (yydest, yysrc)
 
 \f
 
 
 \f
 
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
-   into yyparse.  The argument should have type void *.
-   It should actually point to an object.
-   Grammar actions can access the variable by casting it
-   to the proper pointer type.  */
-
-#ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
-#  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
-#  define YYPARSE_PARAM_DECL
-# else
-#  define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-# endif
-#else /* !YYPARSE_PARAM */
-# define YYPARSE_PARAM_ARG
-# define YYPARSE_PARAM_DECL
-#endif /* !YYPARSE_PARAM */
-
-/* Prevent warning if -Wstrict-prototypes.  */
-#ifdef __GNUC__
-# ifdef YYPARSE_PARAM
-int yyparse (void *);
-# else
-int yyparse (void);
-# endif
-#endif
-
-
 #if YYDEBUG
 /*-----------------------------.
 | Print this symbol on YYOUT.  |
 `-----------------------------*/
 
 #if YYDEBUG
 /*-----------------------------.
 | Print this symbol on YYOUT.  |
 `-----------------------------*/
 
-static void
-#if defined (__STDC__) || defined (__cplusplus)
-yysymprint (FILE* yyout, int yytype,
-           YYSTYPE yyvalue[]b4_location_if([, YYLTYPE yylocation]))
-#else
-yysymprint (yyout, yytype,
-           yyvalue[]b4_location_if([, yylocation]))
-  FILE* yyout;
-  int yytype;
-  YYSTYPE yyvalue;
-  b4_location_if([YYLTYPE yylocation;])
-#endif
+b4_c_function([yysymprint],
+             [static void],
+             [[FILE*],   [yyout]],
+             [[int],     [yytype]],
+             [[YYSTYPE], [yyvalue]]b4_location_if([,
+             [[YYLTYPE], [yylocation]]]))
 {
   /* Pacify ``unused variable'' warnings.  */
   (void) yyvalue;
 {
   /* Pacify ``unused variable'' warnings.  */
   (void) yyvalue;
@@ -680,18 +645,12 @@ m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
 | yyreport_parse_error -- report a parse error in YYSTATE.  |
 `----------------------------------------------------------*/
 
 | yyreport_parse_error -- report a parse error in YYSTATE.  |
 `----------------------------------------------------------*/
 
-static void
-#if defined (__STDC__) || defined (__cplusplus)
-yyreport_parse_error (int yystate, int yychar,
-                     YYSTYPE yyvalue[]b4_location_if([, YYLTYPE yylocation]))
-#else
-yyreport_parse_error (yystate, yychar,
-                     yyvalue[]b4_location_if([, yylocation]))
-  int yystate;
-  int yychar;
-  YYSTYPE yyvalue;
-  b4_location_if([YYLTYPE yylocation;])
-#endif
+b4_c_function([yyreport_parse_error],
+             [static void],
+             [[int],     [yystate]],
+             [[int],     [yychar]],
+             [[YYSTYPE], [yyvalue]]b4_location_if([,
+             [[YYLTYPE], [yylocation]]]))
 [{
 #if YYERROR_VERBOSE
   int yyn = yypact[yystate];
 [{
 #if YYERROR_VERBOSE
   int yyn = yypact[yystate];
@@ -754,17 +713,11 @@ yyreport_parse_error (yystate, yychar,
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
-static void
-#if defined (__STDC__) || defined (__cplusplus)
-yydestruct (int yytype,
-           YYSTYPE yyvalue[]b4_location_if([, YYLTYPE yylocation]))
-#else
-yydestruct (yytype,
-           yyvalue[]b4_location_if([, yylocation]))
-  int yytype;
-  YYSTYPE yyvalue;
-  b4_location_if([YYLTYPE yylocation;])
-#endif
+b4_c_function([yydestruct],
+             [static void],
+             [[int],     [yytype]],
+             [[YYSTYPE], [yyvalue]]b4_location_if([,
+             [[YYLTYPE], [yylocation]]]))
 {
   /* Pacify ``unused variable'' warnings.  */
   (void) yyvalue;
 {
   /* Pacify ``unused variable'' warnings.  */
   (void) yyvalue;
@@ -779,6 +732,35 @@ m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))dnl
     }
 }
 
     }
 }
 
+\f
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+   into yyparse.  The argument should have type void *.
+   It should actually point to an object.
+   Grammar actions can access the variable by casting it
+   to the proper pointer type.  */
+
+#ifdef YYPARSE_PARAM
+# if defined (__STDC__) || defined (__cplusplus)
+#  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+#  define YYPARSE_PARAM_DECL
+# else
+#  define YYPARSE_PARAM_ARG YYPARSE_PARAM
+#  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+# endif
+#else /* !YYPARSE_PARAM */
+# define YYPARSE_PARAM_ARG
+# define YYPARSE_PARAM_DECL
+#endif /* !YYPARSE_PARAM */
+
+/* Prevent warning if -Wstrict-prototypes.  */
+#ifdef __GNUC__
+# ifdef YYPARSE_PARAM
+int yyparse (void *);
+# else
+int yyparse (void);
+# endif
+#endif
 
 m4_divert_push([KILL])# ======================== M4 code.
 # b4_declare_parser_variables
 
 m4_divert_push([KILL])# ======================== M4 code.
 # b4_declare_parser_variables