diff options
Diffstat (limited to 'intl/plural.c')
-rw-r--r-- | intl/plural.c | 190 |
1 files changed, 84 insertions, 106 deletions
diff --git a/intl/plural.c b/intl/plural.c index 1bac3c0666..31b0570a6c 100644 --- a/intl/plural.c +++ b/intl/plural.c @@ -50,7 +50,7 @@ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ -#define YYPURE 1 +#define YYPURE 2 /* Push parsers. */ #define YYPUSH 0 @@ -74,30 +74,30 @@ /* Expression parsing for plural form selection. Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. Written by Ulrich Drepper <drepper@cygnus.com>, 2000. - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. - The GNU C Library is distributed in the hope that it will be useful, + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* The bison generated parser uses alloca. AIX 3 forces us to put this - declaration at the beginning of the file. The declaration in bison's - skeleton file comes too late. This must come before <config.h> - because <config.h> may include arbitrary system headers. */ +/* For bison < 2.0, the bison generated parser uses alloca. AIX 3 forces us + to put this declaration at the beginning of the file. The declaration in + bison's skeleton file comes too late. This must come before <config.h> + because <config.h> may include arbitrary system headers. + This can go away once the AM_INTL_SUBDIR macro requires bison >= 2.0. */ #if defined _AIX && !defined __GNUC__ #pragma alloca #endif + #ifdef HAVE_CONFIG_H # include <config.h> #endif @@ -113,11 +113,9 @@ # define __gettextparse PLURAL_PARSE #endif -#define YYLEX_PARAM &((struct parse_args *) arg)->cp -#define YYPARSE_PARAM arg /* Line 371 of yacc.c */ -#line 121 "plural.c" +#line 119 "plural.c" # ifndef YY_NULL # if defined __cplusplus && 201103L <= __cplusplus @@ -173,12 +171,12 @@ typedef union YYSTYPE #line 49 "plural.y" unsigned long int num; - enum operator op; + enum expression_operator op; struct expression *exp; /* Line 387 of yacc.c */ -#line 182 "plural.c" +#line 180 "plural.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -194,7 +192,7 @@ int __gettextparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus -int __gettextparse (void); +int __gettextparse (struct parse_args *arg); #else int __gettextparse (); #endif @@ -207,28 +205,14 @@ int __gettextparse (); #line 55 "plural.y" /* Prototypes for local functions. */ -static struct expression *new_exp PARAMS ((int nargs, enum operator op, - struct expression * const *args)); -static inline struct expression *new_exp_0 PARAMS ((enum operator op)); -static inline struct expression *new_exp_1 PARAMS ((enum operator op, - struct expression *right)); -static struct expression *new_exp_2 PARAMS ((enum operator op, - struct expression *left, - struct expression *right)); -static inline struct expression *new_exp_3 PARAMS ((enum operator op, - struct expression *bexp, - struct expression *tbranch, - struct expression *fbranch)); -static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); -static void yyerror PARAMS ((const char *str)); +static int yylex (YYSTYPE *lval, struct parse_args *arg); +static void yyerror (struct parse_args *arg, const char *str); /* Allocation of expressions. */ static struct expression * -new_exp (nargs, op, args) - int nargs; - enum operator op; - struct expression * const *args; +new_exp (int nargs, enum expression_operator op, + struct expression * const *args) { int i; struct expression *newp; @@ -257,16 +241,13 @@ new_exp (nargs, op, args) } static inline struct expression * -new_exp_0 (op) - enum operator op; +new_exp_0 (enum expression_operator op) { return new_exp (0, op, NULL); } static inline struct expression * -new_exp_1 (op, right) - enum operator op; - struct expression *right; +new_exp_1 (enum expression_operator op, struct expression *right) { struct expression *args[1]; @@ -275,10 +256,8 @@ new_exp_1 (op, right) } static struct expression * -new_exp_2 (op, left, right) - enum operator op; - struct expression *left; - struct expression *right; +new_exp_2 (enum expression_operator op, struct expression *left, + struct expression *right) { struct expression *args[2]; @@ -288,11 +267,8 @@ new_exp_2 (op, left, right) } static inline struct expression * -new_exp_3 (op, bexp, tbranch, fbranch) - enum operator op; - struct expression *bexp; - struct expression *tbranch; - struct expression *fbranch; +new_exp_3 (enum expression_operator op, struct expression *bexp, + struct expression *tbranch, struct expression *fbranch) { struct expression *args[3]; @@ -304,7 +280,7 @@ new_exp_3 (op, bexp, tbranch, fbranch) /* Line 390 of yacc.c */ -#line 308 "plural.c" +#line 284 "plural.c" #ifdef short # undef short @@ -596,8 +572,8 @@ static const yytype_int8 yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 174, 174, 182, 186, 190, 194, 198, 202, 206, - 210, 214, 218, 223 + 0, 152, 152, 160, 164, 168, 172, 176, 180, 184, + 188, 192, 196, 201 }; #endif @@ -746,7 +722,7 @@ do \ } \ else \ { \ - yyerror (YY_("syntax error: cannot back up")); \ + yyerror (arg, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) @@ -766,7 +742,7 @@ while (YYID (0)) #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else -# define YYLEX yylex (&yylval) +# define YYLEX yylex (&yylval, arg) #endif /* Enable debugging if requested. */ @@ -789,7 +765,7 @@ do { \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ - Type, Value); \ + Type, Value, arg); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) @@ -803,19 +779,21 @@ do { \ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parse_args *arg) #else static void -yy_symbol_value_print (yyoutput, yytype, yyvaluep) +yy_symbol_value_print (yyoutput, yytype, yyvaluep, arg) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; + struct parse_args *arg; #endif { FILE *yyo = yyoutput; YYUSE (yyo); if (!yyvaluep) return; + YYUSE (arg); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); @@ -837,13 +815,14 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parse_args *arg) #else static void -yy_symbol_print (yyoutput, yytype, yyvaluep) +yy_symbol_print (yyoutput, yytype, yyvaluep, arg) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; + struct parse_args *arg; #endif { if (yytype < YYNTOKENS) @@ -851,7 +830,7 @@ yy_symbol_print (yyoutput, yytype, yyvaluep) else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep); + yy_symbol_value_print (yyoutput, yytype, yyvaluep, arg); YYFPRINTF (yyoutput, ")"); } @@ -894,12 +873,13 @@ do { \ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parse_args *arg) #else static void -yy_reduce_print (yyvsp, yyrule) +yy_reduce_print (yyvsp, yyrule, arg) YYSTYPE *yyvsp; int yyrule; + struct parse_args *arg; #endif { int yynrhs = yyr2[yyrule]; @@ -913,7 +893,7 @@ yy_reduce_print (yyvsp, yyrule) YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) - ); + , arg); YYFPRINTF (stderr, "\n"); } } @@ -921,7 +901,7 @@ yy_reduce_print (yyvsp, yyrule) # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ - yy_reduce_print (yyvsp, Rule); \ + yy_reduce_print (yyvsp, Rule, arg); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that @@ -1201,16 +1181,18 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parse_args *arg) #else static void -yydestruct (yymsg, yytype, yyvaluep) +yydestruct (yymsg, yytype, yyvaluep, arg) const char *yymsg; int yytype; YYSTYPE *yyvaluep; + struct parse_args *arg; #endif { YYUSE (yyvaluep); + YYUSE (arg); if (!yymsg) yymsg = "Deleting"; @@ -1245,11 +1227,11 @@ yyparse (YYPARSE_PARAM) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int -yyparse (void) +yyparse (struct parse_args *arg) #else int -yyparse () - +yyparse (arg) + struct parse_args *arg; #endif #endif { @@ -1519,17 +1501,17 @@ yyreduce: { case 2: /* Line 1792 of yacc.c */ -#line 175 "plural.y" +#line 153 "plural.y" { if ((yyvsp[(1) - (1)].exp) == NULL) YYABORT; - ((struct parse_args *) arg)->res = (yyvsp[(1) - (1)].exp); + arg->res = (yyvsp[(1) - (1)].exp); } break; case 3: /* Line 1792 of yacc.c */ -#line 183 "plural.y" +#line 161 "plural.y" { (yyval.exp) = new_exp_3 (qmop, (yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].exp), (yyvsp[(5) - (5)].exp)); } @@ -1537,7 +1519,7 @@ yyreduce: case 4: /* Line 1792 of yacc.c */ -#line 187 "plural.y" +#line 165 "plural.y" { (yyval.exp) = new_exp_2 (lor, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } @@ -1545,7 +1527,7 @@ yyreduce: case 5: /* Line 1792 of yacc.c */ -#line 191 "plural.y" +#line 169 "plural.y" { (yyval.exp) = new_exp_2 (land, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } @@ -1553,7 +1535,7 @@ yyreduce: case 6: /* Line 1792 of yacc.c */ -#line 195 "plural.y" +#line 173 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } @@ -1561,7 +1543,7 @@ yyreduce: case 7: /* Line 1792 of yacc.c */ -#line 199 "plural.y" +#line 177 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } @@ -1569,7 +1551,7 @@ yyreduce: case 8: /* Line 1792 of yacc.c */ -#line 203 "plural.y" +#line 181 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } @@ -1577,7 +1559,7 @@ yyreduce: case 9: /* Line 1792 of yacc.c */ -#line 207 "plural.y" +#line 185 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } @@ -1585,7 +1567,7 @@ yyreduce: case 10: /* Line 1792 of yacc.c */ -#line 211 "plural.y" +#line 189 "plural.y" { (yyval.exp) = new_exp_1 (lnot, (yyvsp[(2) - (2)].exp)); } @@ -1593,7 +1575,7 @@ yyreduce: case 11: /* Line 1792 of yacc.c */ -#line 215 "plural.y" +#line 193 "plural.y" { (yyval.exp) = new_exp_0 (var); } @@ -1601,7 +1583,7 @@ yyreduce: case 12: /* Line 1792 of yacc.c */ -#line 219 "plural.y" +#line 197 "plural.y" { if (((yyval.exp) = new_exp_0 (num)) != NULL) (yyval.exp)->val.num = (yyvsp[(1) - (1)].num); @@ -1610,7 +1592,7 @@ yyreduce: case 13: /* Line 1792 of yacc.c */ -#line 224 "plural.y" +#line 202 "plural.y" { (yyval.exp) = (yyvsp[(2) - (3)].exp); } @@ -1618,7 +1600,7 @@ yyreduce: /* Line 1792 of yacc.c */ -#line 1622 "plural.c" +#line 1604 "plural.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -1668,7 +1650,7 @@ yyerrlab: { ++yynerrs; #if ! YYERROR_VERBOSE - yyerror (YY_("syntax error")); + yyerror (arg, YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) @@ -1695,7 +1677,7 @@ yyerrlab: yymsgp = yymsg; } } - yyerror (yymsgp); + yyerror (arg, yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } @@ -1719,7 +1701,7 @@ yyerrlab: else { yydestruct ("Error: discarding", - yytoken, &yylval); + yytoken, &yylval, arg); yychar = YYEMPTY; } } @@ -1775,7 +1757,7 @@ yyerrlab1: yydestruct ("Error: popping", - yystos[yystate], yyvsp); + yystos[yystate], yyvsp, arg); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); @@ -1812,7 +1794,7 @@ yyabortlab: | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: - yyerror (YY_("memory exhausted")); + yyerror (arg, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif @@ -1824,7 +1806,7 @@ yyreturn: user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval); + yytoken, &yylval, arg); } /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ @@ -1833,7 +1815,7 @@ yyreturn: while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + yystos[*yyssp], yyvsp, arg); YYPOPSTACK (1); } #ifndef yyoverflow @@ -1850,13 +1832,12 @@ yyreturn: /* Line 2055 of yacc.c */ -#line 229 "plural.y" +#line 207 "plural.y" void internal_function -FREE_EXPRESSION (exp) - struct expression *exp; +FREE_EXPRESSION (struct expression *exp) { if (exp == NULL) return; @@ -1882,18 +1863,16 @@ FREE_EXPRESSION (exp) static int -yylex (lval, pexp) - YYSTYPE *lval; - const char **pexp; +yylex (YYSTYPE *lval, struct parse_args *arg) { - const char *exp = *pexp; + const char *exp = arg->cp; int result; while (1) { if (exp[0] == '\0') { - *pexp = exp; + arg->cp = exp; return YYEOF; } @@ -2020,15 +1999,14 @@ yylex (lval, pexp) break; } - *pexp = exp; + arg->cp = exp; return result; } static void -yyerror (str) - const char *str; +yyerror (struct parse_args *arg, const char *str) { /* Do nothing. We don't print error messages here. */ } |