X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/2a4647a32f3de7eda80133370b05cea9f72e5761..4517da37570b39a3d4b3f523dd373abe7c622bb0:/data/c.m4 diff --git a/data/c.m4 b/data/c.m4 index 604ad138..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,16 +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]))[ { YYUSE (yyvaluep); ]b4_location_if([ YYUSE (yylocationp); -])[ +])dnl +b4_parse_param_use[]dnl +[ if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); @@ -402,37 +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]))[ { 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); - YYFPRINTF (yyoutput, ": "); +]b4_location_if([ YYUSE (yylocationp); ])dnl -[ -# ifdef YYPRINT +b4_parse_param_use[]dnl +[# ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif @@ -442,6 +463,31 @@ b4_location_if([ YYUSE (yylocationp); [ default: break; } - YYFPRINTF (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 +])