X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/fb9c0b3360928887038a296c338025ced68e2d8c..4517da37570b39a3d4b3f523dd373abe7c622bb0:/data/c.m4 diff --git a/data/c.m4 b/data/c.m4 index 56b749e6..d8465107 100644 --- a/data/c.m4 +++ b/data/c.m4 @@ -95,7 +95,26 @@ m4_define_default([b4_parse_param]) m4_define([b4_parse_param], b4_parse_param)) +# b4_parse_param_for(DECL, FORMAL, BODY) +# --------------------------------------- +# Iterate over the user parameters, binding the declaration to DECL, +# the formal name to FORMAL, and evaluating the BODY. +m4_define([b4_parse_param_for], +[m4_foreach([$1_$2], m4_defn([b4_parse_param]), +[m4_pushdef([$1], m4_fst($1_$2))dnl +m4_pushdef([$2], m4_shift($1_$2))dnl +$3[]dnl +m4_popdef([$2])dnl +m4_popdef([$1])dnl +])]) +# b4_parse_param_use +# ------------------ +# `YYUSE' all the parse-params. +m4_define([b4_parse_param_use], +[b4_parse_param_for([Decl], [Formal], [ YYUSE (Formal); +])dnl +]) ## ------------ ## ## Data Types. ## @@ -232,7 +251,7 @@ m4_define([b4_token_enums_defines], # ---------------------------------------------------------- # Declare the function NAME. m4_define([b4_c_function_def], -[#if defined (__STDC__) || defined (__cplusplus) +[#if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus) b4_c_ansi_function_def($@) #else $2 @@ -342,7 +361,6 @@ m4_define([b4_c_arg], ## Synclines. ## ## ----------- ## - # b4_syncline(LINE, FILE) # ----------------------- m4_define([b4_syncline], @@ -350,6 +368,11 @@ m4_define([b4_syncline], [[#]line $1 $2])]) + +## -------------- ## +## User actions. ## +## -------------- ## + # b4_symbol_actions(FILENAME, LINENO, # SYMBOL-TAG, SYMBOL-NUM, # SYMBOL-ACTION, SYMBOL-TYPENAME) @@ -378,17 +401,20 @@ m4_define_default([b4_yydestruct_generate], | Release the memory associated to this symbol. | `-----------------------------------------------*/ +/*ARGSUSED*/ ]$1([yydestruct], [static void], [[const char *yymsg], [yymsg]], [[int yytype], [yytype]], - [[YYSTYPE *yyvaluep], [yyvaluep]]b4_location_if([, - [[YYLTYPE *yylocationp], [yylocationp]]]))[ + [[YYSTYPE *yyvaluep], [yyvaluep]][]dnl +b4_location_if( [, [[YYLTYPE *yylocationp], [yylocationp]]])[]dnl +m4_ifset([b4_parse_param], [, b4_parse_param]))[ { - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; -]b4_location_if([ (void) yylocationp; -])[ + YYUSE (yyvaluep); +]b4_location_if([ YYUSE (yylocationp); +])dnl +b4_parse_param_use[]dnl +[ if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); @@ -403,38 +429,31 @@ m4_define_default([b4_yydestruct_generate], ]) -# b4_yysymprint_generate(FUNCTION-DECLARATOR) -# ------------------------------------------- -# Generate the "yysymprint" function, which declaration is issued using +# b4_yy_symbol_print_generate(FUNCTION-DECLARATOR) +# ------------------------------------------------ +# Generate the "yy_symbol_print" function, which declaration is issued using # FUNCTION-DECLARATOR, which may be "b4_c_ansi_function_def" for ISO C # or "b4_c_function_def" for K&R. -m4_define_default([b4_yysymprint_generate], -[[/*--------------------------------. +m4_define_default([b4_yy_symbol_print_generate], +[[ +/*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ -]$1([yysymprint], +/*ARGSUSED*/ +]$1([yy_symbol_value_print], [static void], - [[FILE *yyoutput], [yyoutput]], - [[int yytype], [yytype]], - [[YYSTYPE *yyvaluep], [yyvaluep]]b4_location_if([, - [[YYLTYPE *yylocationp], [yylocationp]]])) + [[FILE *yyoutput], [yyoutput]], + [[int yytype], [yytype]], + [[const YYSTYPE * const yyvaluep], [yyvaluep]][]dnl +b4_location_if([, [[const YYLTYPE * const yylocationp], [yylocationp]]])[]dnl +m4_ifset([b4_parse_param], [, b4_parse_param]))[ { - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; -b4_location_if([ (void) yylocationp; + YYUSE (yyvaluep); +]b4_location_if([ YYUSE (yylocationp); ])dnl -[ - if (yytype < YYNTOKENS) - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - -]b4_location_if([ YY_LOCATION_PRINT (yyoutput, *yylocationp); - YYFPUTS (": ", yyoutput); -])dnl -[ -# ifdef YYPRINT +b4_parse_param_use[]dnl +[# ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif @@ -444,6 +463,31 @@ b4_location_if([ (void) yylocationp; [ default: break; } - YYFPUTC (')', yyoutput); } -]]) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +]$1([yy_symbol_print], + [static void], + [[FILE *yyoutput], [yyoutput]], + [[int yytype], [yytype]], + [[const YYSTYPE * const yyvaluep], [yyvaluep]][]dnl +b4_location_if([, [[const YYLTYPE * const yylocationp], [yylocationp]]])[]dnl +m4_ifset([b4_parse_param], [, b4_parse_param]))[ +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + +]b4_location_if([ YY_LOCATION_PRINT (yyoutput, *yylocationp); + YYFPRINTF (yyoutput, ": "); +])dnl +[ yy_symbol_value_print (yyoutput, yytype, yyvaluep]dnl +b4_location_if([, yylocationp])[]b4_user_args[); + YYFPRINTF (yyoutput, ")"); +}]dnl +])