aboutsummaryrefslogtreecommitdiff
path: root/intl/plural.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2020-04-16 10:12:30 +0200
committerNick Alcock <nick.alcock@oracle.com>2021-02-10 15:26:56 +0000
commit830c5a1ffb0ee5f064b0ba0b07cb111aa7f85141 (patch)
treef81621bb4c7ef99b3c7477966c6f01638d39dc89 /intl/plural.c
parenta52d653e9170d361e354ddaf2876aaa09aece207 (diff)
downloadgdb-830c5a1ffb0ee5f064b0ba0b07cb111aa7f85141.zip
gdb-830c5a1ffb0ee5f064b0ba0b07cb111aa7f85141.tar.gz
gdb-830c5a1ffb0ee5f064b0ba0b07cb111aa7f85141.tar.bz2
intl: Allow building both with old bison and bison >= 3 [PR92008]
bison 3 apparently made a backwards incompatible change, dropped YYLEX_PARAM/YYPARSE_PARAM support and instead needs %param or %lex-param and %parse-param. Furthermore, there is no easy way to conditionalize on bison version in the *.y files. While e.g. glibc bumped bison requirement and just has the bison 3 compatible version, Richi said there are still systems with older bison where we want to build gcc. So, this patch instead determines during configure bison version, and depending on that when building plural.c (if building it at all) tweaks what is passed over to bison if needed. Tested with both bison 3 and bison 1.35, in each case with reconfiguring intl and building with make all-yes (as in my setup intl isn't normally used). intl/ChangeLog 2020-04-16 Jakub Jelinek <jakub@redhat.com> PR bootstrap/92008 * configure.ac: Add check for bison >= 3, AC_DEFINE HAVE_BISON3 and AC_SUBST BISON3_YES and BISON3_NO. * Makefile.in (.y.c): Prefix $(YACC) invocation with @BISON3_NO@, add @BISON3_YES@ prefixed rule to adjust the *.y source using sed and adjust output afterwards. * plural-exp.h (PLURAL_PARSE): If HAVE_BISON3 is defined, use struct parse_args * type for arg instead of void *. * plural.y: Add magic /* BISON3 ... */ comments with bison >= 3 directives. (YYLEX_PARAM, YYPARSE_PARAM): Don't define if HAVE_BISON3 is defined. (yylex, yyerror): Adjust prototypes and definitions if HAVE_BISON3 is defined. * plural.c: Regenerated. * config.h.in: Regenerated. * configure: Regenerated.
Diffstat (limited to 'intl/plural.c')
-rw-r--r--intl/plural.c62
1 files changed, 42 insertions, 20 deletions
diff --git a/intl/plural.c b/intl/plural.c
index 951303a..ad86faa 100644
--- a/intl/plural.c
+++ b/intl/plural.c
@@ -19,7 +19,7 @@
#line 1 "plural.y"
/* Expression parsing for plural form selection.
- Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 2000-2020 Free Software Foundation, Inc.
Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
This program is free software; you can redistribute it and/or modify it
@@ -59,10 +59,12 @@
# define __gettextparse PLURAL_PARSE
#endif
+#ifndef HAVE_BISON3
#define YYLEX_PARAM &((struct parse_args *) arg)->cp
#define YYPARSE_PARAM arg
+#endif
-#line 49 "plural.y"
+#line 54 "plural.y"
#ifndef YYSTYPE
typedef union {
unsigned long int num;
@@ -72,7 +74,7 @@ typedef union {
# define YYSTYPE yystype
# define YYSTYPE_IS_TRIVIAL 1
#endif
-#line 55 "plural.y"
+#line 60 "plural.y"
/* Prototypes for local functions. */
static struct expression *new_exp PARAMS ((int nargs, enum operator op,
@@ -87,8 +89,13 @@ static inline struct expression *new_exp_3 PARAMS ((enum operator op,
struct expression *bexp,
struct expression *tbranch,
struct expression *fbranch));
+#ifdef HAVE_BISON3
+static int yylex PARAMS ((YYSTYPE *lval, struct parse_args *arg));
+static void yyerror PARAMS ((struct parse_args *arg, const char *str));
+#else
static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
static void yyerror PARAMS ((const char *str));
+#endif
/* Allocation of expressions. */
@@ -236,8 +243,8 @@ static const short yyrhs[] =
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const short yyrline[] =
{
- 0, 174, 182, 186, 190, 194, 198, 202, 206, 210,
- 214, 218, 223
+ 0, 184, 192, 196, 200, 204, 208, 212, 216, 220,
+ 224, 228, 233
};
#endif
@@ -339,8 +346,8 @@ static const short yycheck[] =
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
/* As a special exception, when this file is copied by Bison into a
Bison output file, you may use that output file without restriction.
@@ -1027,7 +1034,7 @@ yyreduce:
switch (yyn) {
case 1:
-#line 175 "plural.y"
+#line 185 "plural.y"
{
if (yyvsp[0].exp == NULL)
YYABORT;
@@ -1035,68 +1042,68 @@ case 1:
}
break;
case 2:
-#line 183 "plural.y"
+#line 193 "plural.y"
{
yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
}
break;
case 3:
-#line 187 "plural.y"
+#line 197 "plural.y"
{
yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
}
break;
case 4:
-#line 191 "plural.y"
+#line 201 "plural.y"
{
yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
}
break;
case 5:
-#line 195 "plural.y"
+#line 205 "plural.y"
{
yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
}
break;
case 6:
-#line 199 "plural.y"
+#line 209 "plural.y"
{
yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
}
break;
case 7:
-#line 203 "plural.y"
+#line 213 "plural.y"
{
yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
}
break;
case 8:
-#line 207 "plural.y"
+#line 217 "plural.y"
{
yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
}
break;
case 9:
-#line 211 "plural.y"
+#line 221 "plural.y"
{
yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
}
break;
case 10:
-#line 215 "plural.y"
+#line 225 "plural.y"
{
yyval.exp = new_exp_0 (var);
}
break;
case 11:
-#line 219 "plural.y"
+#line 229 "plural.y"
{
if ((yyval.exp = new_exp_0 (num)) != NULL)
yyval.exp->val.num = yyvsp[0].num;
}
break;
case 12:
-#line 224 "plural.y"
+#line 234 "plural.y"
{
yyval.exp = yyvsp[-1].exp;
}
@@ -1334,7 +1341,7 @@ yyreturn:
#endif
return yyresult;
}
-#line 229 "plural.y"
+#line 239 "plural.y"
void
@@ -1365,11 +1372,20 @@ FREE_EXPRESSION (exp)
}
+#ifdef HAVE_BISON3
+static int
+yylex (lval, arg)
+ YYSTYPE *lval;
+ struct parse_args *arg;
+{
+ const char **pexp = &arg->cp;
+#else
static int
yylex (lval, pexp)
YYSTYPE *lval;
const char **pexp;
{
+#endif
const char *exp = *pexp;
int result;
@@ -1510,8 +1526,14 @@ yylex (lval, pexp)
}
+#ifdef HAVE_BISON3
+static void
+yyerror (arg, str)
+ struct parse_args *arg;
+#else
static void
yyerror (str)
+#endif
const char *str;
{
/* Do nothing. We don't print error messages here. */