X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/39912f52635a7b7709b6a890a41e066340a89111..e63ee1f16c6b8633ed7385d1e7f2531b5dfda8f5:/data/yacc.c diff --git a/data/yacc.c b/data/yacc.c index b13702da..0bbd4827 100644 --- a/data/yacc.c +++ b/data/yacc.c @@ -40,6 +40,34 @@ m4_dquote(b4_pure_if([[[[YYSTYPE *]], [[&yylval]]][]dnl b4_location_if([, [[YYLTYPE *], [&yylloc]]])])dnl m4_ifdef([b4_lex_param], [, ]b4_lex_param))) +# Yes, this is quite ugly... +m4_define_default([b4_parse_param]) +m4_ifdef([b4_parse_param], +[m4_define([b4_parse_param], + b4_parse_param)]) + + + +## ------------ ## +## Data Types. ## +## ------------ ## + +# b4_int_type(MIN, MAX) +# --------------------- +# Return the smallest int type able to handle numbers ranging from +# MIN to MAX (included). We overwrite the version from c.m4 which relies +# on `signed char' which is not portable to old K&R compilers. +m4_define([b4_int_type], +[m4_if(b4_ints_in($@, [0], [255]), [1], [unsigned char], + b4_ints_in($@, [-128], [127]), [1], [yysigned_char], + + b4_ints_in($@, [0], [65535]), [1], [unsigned short], + b4_ints_in($@, [-32768], [32767]), [1], [short], + + m4_eval([0 <= $1]), [1], [unsigned int], + + [int])]) + ## ----------------- ## ## Semantic Values. ## @@ -128,7 +156,8 @@ m4_popdef([b4_dollar_dollar])dnl ]) - +# We do want M4 expansion after # for CPP macros. +m4_changecom() m4_divert(0)dnl #output "b4_output_parser_name" b4_copyright([Skeleton parser for Yacc-like parsing with Bison], @@ -625,12 +654,12 @@ yystpcpy (yydest, yysrc) | Print this symbol on YYOUT. | `-----------------------------*/ -b4_c_function([yysymprint], - [static void], - [[FILE*], [yyout]], - [[int], [yytype]], - [[YYSTYPE], [yyvalue]]b4_location_if([, - [[YYLTYPE], [yylocation]]])) +b4_c_function_def([yysymprint], + [static void], + [[FILE *yyout], [yyout]], + [[int yytype], [yytype]], + [[YYSTYPE yyvalue], [yyvalue]]b4_location_if([, + [[YYLTYPE yylocation], [yylocation]]])) { /* Pacify ``unused variable'' warnings. */ (void) yyvalue; @@ -662,11 +691,11 @@ m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl | Release the memory associated to this symbol. | `-----------------------------------------------*/ -b4_c_function([yydestruct], - [static void], - [[int], [yytype]], - [[YYSTYPE], [yyvalue]]b4_location_if([, - [[YYLTYPE], [yylocation]]])) +b4_c_function_def([yydestruct], + [static void], + [[int yytype], [yytype]], + [[YYSTYPE yyvalue], [yyvalue]]b4_location_if([, + [[YYLTYPE yylocation], [yylocation]]])) { /* Pacify ``unused variable'' warnings. */ (void) yyvalue; @@ -683,39 +712,24 @@ m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))dnl -/* The user can define YYPARSE_PARAM as the name of an argument to be passed - into yyparse. The argument should have type void *. - It should actually point to an object. - Grammar actions can access the variable by casting it - to the proper pointer type. */ +/* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM # if defined (__STDC__) || defined (__cplusplus) -# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM -# define YYPARSE_PARAM_DECL +int yyparse (void *YYPARSE_PARAM); # else -# define YYPARSE_PARAM_ARG YYPARSE_PARAM -# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; -# endif -#else /* !YYPARSE_PARAM */ -# define YYPARSE_PARAM_ARG -# define YYPARSE_PARAM_DECL -#endif /* !YYPARSE_PARAM */ - -/* Prevent warning if -Wstrict-prototypes. */ -#ifdef __GNUC__ -# ifdef YYPARSE_PARAM -int yyparse (void *); -# else -int yyparse (void); +int yyparse (); # endif +#else /* ! YYPARSE_PARAM */ +b4_c_function_decl([yyparse], [int], b4_parse_param) #endif + m4_divert_push([KILL])# ======================== M4 code. # b4_declare_parser_variables # --------------------------- # Declare the variables that are global, or local to YYPARSE if -# pure-parser +# pure-parser. m4_define([b4_declare_parser_variables], [/* The lookahead symbol. */ int yychar; @@ -733,9 +747,21 @@ m4_divert_pop([KILL])dnl# ====================== End of M4 code. b4_pure_if([], [b4_declare_parser_variables]) -int -yyparse (YYPARSE_PARAM_ARG) - YYPARSE_PARAM_DECL + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM) +# else +int yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +# endif +#else /* ! YYPARSE_PARAM */ +b4_c_function_def([yyparse], [int], b4_parse_param) +#endif {[ ]b4_pure_if([b4_declare_parser_variables])[ register int yystate;