summaryrefslogtreecommitdiff
path: root/intl/plural.c
diff options
context:
space:
mode:
Diffstat (limited to 'intl/plural.c')
-rw-r--r--intl/plural.c190
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. */
}