X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/b0400cc6ef2e204e20964f38fd745e6f65e5c1ed..05ac60f348b722ec6157cf57c31d8165466ec3ec:/data/c.m4 diff --git a/data/c.m4 b/data/c.m4 index d6de2a93..79ce9767 100644 --- a/data/c.m4 +++ b/data/c.m4 @@ -1,7 +1,7 @@ m4_divert(-1) -*- Autoconf -*- # C M4 Macros for Bison. -# Copyright (C) 2002 Free Software Foundation, Inc. +# Copyright (C) 2002, 2004 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -114,8 +114,8 @@ m4_define([b4_int_type], [m4_if(b4_ints_in($@, [0], [255]), [1], [unsigned char], b4_ints_in($@, [-128], [127]), [1], [signed char], - b4_ints_in($@, [0], [65535]), [1], [unsigned short], - b4_ints_in($@, [-32768], [32767]), [1], [short], + b4_ints_in($@, [0], [65535]), [1], [unsigned short int], + b4_ints_in($@, [-32768], [32767]), [1], [short int], m4_eval([0 <= $1]), [1], [unsigned int], @@ -327,8 +327,9 @@ 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], + [m4_ifval([$6], [(yyvaluep->$6)], [(*yyvaluep)])])dnl +m4_pushdef([b4_at_dollar], [(*yylocationp)])dnl case $4: /* $3 */ b4_syncline([$2], [$1]) $5; @@ -339,10 +340,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,14 +352,19 @@ m4_define([b4_yydestruct_generate], ]$1([yydestruct], [static void], - [[int yytype], [yytype]], - [[YYSTYPE yyvalue], [yyvalue]]b4_location_if([, - [[YYLTYPE yylocation], [yylocation]]]))[ + [[const char *yymsg], [yymsg]], + [[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; ])[ + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + switch (yytype) { ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))[ @@ -367,3 +373,49 @@ 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]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + +]b4_location_if([ YY_LOCATION_PRINT (yyoutput, *yylocationp); + fprintf (yyoutput, ": "); +])dnl +[ +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + switch (yytype) + { +]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl +[ default: + break; + } + YYFPRINTF (yyoutput, ")"); +} +]])