X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/fa3f2a885acd75107d62ff6491b7b346495aba27..e9665d1605afc5ab96aad29c2e622924911008f4:/data/c.m4 diff --git a/data/c.m4 b/data/c.m4 index aad71bac..209bb1a7 100644 --- a/data/c.m4 +++ b/data/c.m4 @@ -65,6 +65,14 @@ m4_define([b4_identification], +## ---------------- ## +## Default values. ## +## ---------------- ## + +m4_define_default([b4_epilogue], []) + + + ## ------------------------ ## ## Pure/impure interfaces. ## ## ------------------------ ## @@ -312,3 +320,93 @@ m4_define([b4_c_arg], m4_define([b4_syncline], [m4_if(b4_synclines_flag, 1, [[#]line $1 $2])]) + + +# b4_symbol_actions(FILENAME, LINENO, +# SYMBOL-TAG, SYMBOL-NUM, +# SYMBOL-ACTION, SYMBOL-TYPENAME) +# ------------------------------------------------- +m4_define([b4_symbol_actions], +[m4_pushdef([b4_dollar_dollar], [yyvaluep->$6])dnl +m4_pushdef([b4_at_dollar], [(*yylocationp)])dnl + case $4: /* $3 */ +b4_syncline([$2], [$1]) + $5; +b4_syncline([@oline@], [@ofile@]) + break; +m4_popdef([b4_at_dollar])dnl +m4_popdef([b4_dollar_dollar])dnl +]) + + +# b4_yydestruct_generate(FUNCTION-DECLARATOR) +# ------------------------------------------- +# Generate the "yydestruct" 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_yydestruct_generate], +[[/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +]$1([yydestruct], + [static void], + [[int yytype], [yytype]], + [[YYSTYPE *yyvaluep], [yyvaluep]]b4_location_if([, + [[YYLTYPE *yylocationp], [yylocationp]]]))[ +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; +]b4_location_if([ (void) yylocationp; +])[ + switch (yytype) + { +]m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))[ + default: + break; + } +}]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, ")"); +} +])