X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/b0400cc6ef2e204e20964f38fd745e6f65e5c1ed..650aa2cfbfa9f0f94fcc644bb1c306a5f15f5d4c:/data/c.m4 diff --git a/data/c.m4 b/data/c.m4 index d6de2a93..209bb1a7 100644 --- a/data/c.m4 +++ b/data/c.m4 @@ -327,8 +327,8 @@ m4_define([b4_syncline], # SYMBOL-ACTION, SYMBOL-TYPENAME) # ------------------------------------------------- m4_define([b4_symbol_actions], -[m4_pushdef([b4_dollar_dollar], [yyvalue.$6])dnl -m4_pushdef([b4_at_dollar], [yylocation])dnl +[m4_pushdef([b4_dollar_dollar], [yyvaluep->$6])dnl +m4_pushdef([b4_at_dollar], [(*yylocationp)])dnl case $4: /* $3 */ b4_syncline([$2], [$1]) $5; @@ -339,10 +339,10 @@ m4_popdef([b4_dollar_dollar])dnl ]) -# b4_yydestruct_generate(FUNTION-DECLARATOR) -# ------------------------------------------ +# b4_yydestruct_generate(FUNCTION-DECLARATOR) +# ------------------------------------------- # Generate the "yydestruct" function, which declaration is issued using -# FUNTION-DECLARATOR, which may be "b4_c_ansi_function_def" for ISO C +# FUNCTION-DECLARATOR, which may be "b4_c_ansi_function_def" for ISO C # or "b4_c_function_def" for K&R. m4_define([b4_yydestruct_generate], [[/*-----------------------------------------------. @@ -351,13 +351,13 @@ m4_define([b4_yydestruct_generate], ]$1([yydestruct], [static void], - [[int yytype], [yytype]], - [[YYSTYPE yyvalue], [yyvalue]]b4_location_if([, - [[YYLTYPE yylocation], [yylocation]]]))[ + [[int yytype], [yytype]], + [[YYSTYPE *yyvaluep], [yyvaluep]]b4_location_if([, + [[YYLTYPE *yylocationp], [yylocationp]]]))[ { /* Pacify ``unused variable'' warnings. */ - (void) yyvalue; -]b4_location_if([ (void) yylocation; + (void) yyvaluep; +]b4_location_if([ (void) yylocationp; ])[ switch (yytype) { @@ -367,3 +367,46 @@ m4_define([b4_yydestruct_generate], } }]dnl ]) + + +# b4_yysymprint_generate(FUNCTION-DECLARATOR) +# ------------------------------------------- +# Generate the "yysymprint" 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([b4_yysymprint_generate], +[[/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +]$1([yysymprint], + [static void], + [[FILE *yyoutput], [yyoutput]], + [[int yytype], [yytype]], + [[YYSTYPE *yyvaluep], [yyvaluep]]b4_location_if([, + [[YYLTYPE *yylocationp], [yylocationp]]])) +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; +b4_location_if([ (void) yylocationp; +])dnl + + if (yytype < YYNTOKENS) + { + YYFPRINTF (yyoutput, "token %s (", yytname[[yytype]]); +# ifdef YYPRINT + YYPRINT (yyoutput, yytoknum[[yytype]], *yyvaluep); +# endif + } + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[[yytype]]); + + switch (yytype) + { +m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl + default: + break; + } + YYFPRINTF (yyoutput, ")"); +} +])