X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/d6a44ffd0021ab0ca23e5e6243ecacb4e4b17ef1..96029914a688997caef26edb87aa4c2131299fed:/data/c.m4 diff --git a/data/c.m4 b/data/c.m4 index 12794e06..8bd96b85 100644 --- a/data/c.m4 +++ b/data/c.m4 @@ -17,6 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +m4_include(b4_pkgdatadir/[c-like.m4]) # b4_tocpp(STRING) # ---------------- @@ -29,19 +30,21 @@ m4_define([b4_tocpp], # ------------------ # A valid C macro name to use as a CPP header guard for FILE. m4_define([b4_cpp_guard], -[b4_tocpp(m4_defn([b4_prefix])/[$1])]) +[[YY_]b4_tocpp(m4_defn([b4_prefix])/[$1])[_INCLUDED]]) # b4_cpp_guard_open(FILE) # b4_cpp_guard_close(FILE) # ------------------------ -# Open/close CPP inclusion guards for FILE. +# If FILE does not expand to nothing, open/close CPP inclusion guards for FILE. m4_define([b4_cpp_guard_open], +[m4_ifval(m4_quote($1), [#ifndef b4_cpp_guard([$1]) -# define b4_cpp_guard([$1])]) +# define b4_cpp_guard([$1])])]) m4_define([b4_cpp_guard_close], -[#endif b4_comment([!b4_cpp_guard([$1])])]) +[m4_ifval(m4_quote($1), +[#endif b4_comment([!b4_cpp_guard([$1])])])]) ## ---------------- ## @@ -181,7 +184,7 @@ m4_define([b4_table_value_equals], [m4_if(m4_eval($3 < m4_indir([b4_]$1[_min]) || m4_indir([b4_]$1[_max]) < $3), [1], [[YYID (0)]], - [[((]$2[) == (]$3[))]])]) + [(!!(($2) == ($3)))])]) ## ---------## @@ -417,32 +420,6 @@ m4_define([b4_case], $2 break;]) -# b4_dollar_dollar_(NAME, FIELD, DEFAULT-FIELD) -# --------------------------------------------- -# If FIELD (or DEFAULT-FIELD) is non-null, read it in pointer NAME, -# otherwise just dereference. -m4_define([b4_dollar_dollar_], -[m4_if([$2], [[]], - [m4_ifval([$3], [($1->$3)], - [(*$1)])], - [($1->$2)])]) - -# b4_dollar_pushdef(VALUE, DEFAULT-FIELD, LOCATION) -# b4_dollar_popdef -# ------------------------------------------------- -# Define b4_dollar_dollar for VALUE and DEFAULT-FIELD, -# and b4_at_dollar for LOCATION. -m4_define([b4_dollar_pushdef], -[m4_pushdef([b4_dollar_dollar], - [b4_dollar_dollar_([$1], m4_dquote($][1), [$2])])dnl -m4_pushdef([b4_at_dollar], [(*yylocationp)])dnl -]) -m4_define([b4_dollar_popdef], -[m4_popdef([b4_at_dollar])dnl -m4_popdef([b4_dollar_dollar])dnl -]) - - # b4_symbol_actions(FILENAME, LINENO, # SYMBOL-TAG, SYMBOL-NUM, # SYMBOL-ACTION, SYMBOL-TYPENAME) @@ -452,7 +429,7 @@ m4_popdef([b4_dollar_dollar])dnl # Define b4_dollar_dollar([TYPE-NAME]), and b4_at_dollar, which are # invoked where $$ and @$ were specified by the user. m4_define([b4_symbol_actions], -[b4_dollar_pushdef([yyvaluep], [$6], [(*yylocationp)])dnl +[b4_dollar_pushdef([(*yyvaluep)], [$6], [(*yylocationp)])dnl case $4: /* $3 */ b4_syncline([$2], [$1]) $5; @@ -625,7 +602,7 @@ m4_define([b4_YYDEBUG_define], # endif # else /* ! defined YYDEBUG */ # define ]b4_api_PREFIX[DEBUG ]b4_debug_flag[ -# endif /* ! defined ]b4_api_PREFIX[DEBUG */ +# endif /* ! defined YYDEBUG */ #endif /* ! defined ]b4_api_PREFIX[DEBUG */]])[]dnl ]) @@ -666,3 +643,46 @@ m4_define([b4_yylloc_default_define], while (YYID (0)) #endif ]]) + +# b4_yy_location_print_define +# --------------------------- +# Define YY_LOCATION_PRINT. +m4_define([b4_yy_location_print_define], +[b4_locations_if([[ +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + do { \ + fprintf (File, "%d.%d", (Loc).first_line, (Loc).first_column); \ + if ((Loc).first_line < (Loc).last_line) \ + fprintf (File, "-%d.%d", (Loc).last_line, (Loc).last_column - 1); \ + else if ((Loc).first_column < (Loc).last_column - 1) \ + fprintf (File, "-%d", (Loc).last_column - 1); \ + } while (0) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif]], +[[/* This macro is provided for backward compatibility. */ +#ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +#endif]]) +]) + +# b4_yyloc_default +# ---------------- +# Expand to a possible default value for yylloc. +m4_define([b4_yyloc_default], +[[ +# if defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL + = { ]m4_join([, ], + m4_defn([b4_location_initial_line]), + m4_defn([b4_location_initial_column]), + m4_defn([b4_location_initial_line]), + m4_defn([b4_location_initial_column]))[ } +# endif +]])