X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/beadb220d541df706f9e27997c3942433550620c..93c150b666c3345bdd1527a5495a4787d8c3b5bf:/data/c.m4 diff --git a/data/c.m4 b/data/c.m4 index 0649e62f..14db807b 100644 --- a/data/c.m4 +++ b/data/c.m4 @@ -124,10 +124,8 @@ m4_popdef([$1])dnl # -------------------------------- # `YYUSE' VAL, LOC if locations are enabled, and all the parse-params. m4_define([b4_parse_param_use], -[m4_ifval([$1], [ YYUSE([$1]); -])dnl -m4_ifval([$2], [b4_locations_if([ YYUSE ([$2]); -])])dnl +[m4_ifvaln([$1], [ YYUSE([$1]);])dnl +b4_locations_if([m4_ifvaln([$2], [ YYUSE ([$2]);])])dnl b4_parse_param_for([Decl], [Formal], [ YYUSE (Formal); ])dnl ]) @@ -173,23 +171,37 @@ m4_define([b4_table_value_equals], [[YYID (0)]], [[((]$2[) == (]$3[))]])]) + ## ---------## ## Values. ## ## ---------## -# b4_null ---------- -# Return a null pointer constant. NULL infringes on the user name -# space in C, so use 0 rather than NULL. -m4_define([b4_null], [0]) +# b4_null_define +# -------------- +# Portability issues: define a YY_NULL appropriate for the current +# language (C, C++98, or C++11). +m4_define([b4_null_define], +[# ifndef YY_NULL +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULL nullptr +# else +# define YY_NULL 0 +# endif +# endif[]dnl +]) + + +# b4_null +# ------- +# Return a null pointer constant. +m4_define([b4_null], [YY_NULL]) # b4_integral_parser_table_define(TABLE-NAME, CONTENT, COMMENT) # ------------------------------------------------------------- # Define "yy" which contents is CONTENT. m4_define([b4_integral_parser_table_define], -[m4_ifval([$3], [b4_c_comment([$3], [ ]) -])dnl +[m4_ifvaln([$3], [b4_c_comment([$3], [ ])])dnl static const b4_int_type_for([$2]) yy$1[[]] = { $2 @@ -448,8 +460,8 @@ m4_define_default([b4_yydestruct_generate], b4_locations_if( [, [[YYLTYPE *yylocationp], [yylocationp]]])[]dnl m4_ifset([b4_parse_param], [, b4_parse_param]))[ { -]b4_parse_param_use([yyvaluep], [yylocationp])[ - if (!yymsg) +]b4_parse_param_use([yyvaluep], [yylocationp])dnl +[ if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); @@ -483,14 +495,17 @@ m4_define_default([b4_yy_symbol_print_generate], b4_locations_if([, [[YYLTYPE const * const yylocationp], [yylocationp]]])[]dnl m4_ifset([b4_parse_param], [, b4_parse_param]))[ { - if (!yyvaluep) - return; -]b4_parse_param_use([yyoutput], [yylocationp])[ -# ifdef YYPRINT +]b4_parse_param_use([yyoutput], [yylocationp])dnl +[ if (!yyvaluep) + return;] +dnl glr.c does not feature yytoknum. +m4_if(b4_skeleton, ["yacc.c"], +[[# ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif - switch (yytype) +]])dnl +[ switch (yytype) { ]b4_symbol_foreach([b4_symbol_printer])dnl [ default: