X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/62b08cfcd72cfd74c22080733d0156122ab27a15..4517da37570b39a3d4b3f523dd373abe7c622bb0:/data/c.m4?ds=inline diff --git a/data/c.m4 b/data/c.m4 index b0221e8e..d8465107 100644 --- a/data/c.m4 +++ b/data/c.m4 @@ -95,6 +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. ## @@ -348,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) @@ -376,6 +401,7 @@ m4_define_default([b4_yydestruct_generate], | Release the memory associated to this symbol. | `-----------------------------------------------*/ +/*ARGSUSED*/ ]$1([yydestruct], [static void], [[const char *yymsg], [yymsg]], @@ -386,7 +412,9 @@ 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); @@ -401,17 +429,19 @@ m4_ifset([b4_parse_param], [, b4_parse_param]))[ ]) -# 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]], @@ -422,17 +452,8 @@ 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, ": "); -])dnl -[ -# ifdef YYPRINT +b4_parse_param_use[]dnl +[# ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif @@ -442,6 +463,31 @@ m4_ifset([b4_parse_param], [, b4_parse_param]))[ [ default: break; } +} + + +/*--------------------------------. +| 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 ])