Except when memory reallocation is required, this change
eliminates the need to invoke yysyntax_error twice and thus to
repeat the collection of lookaheads. It also prepares for
future extensions that will make those repetitions more
expensive and that will require additional memory management in
yysyntax_error. Finally, it fixes an obscure bug already
exercised in the test suite.
* data/yacc.c (yysyntax_error): Add arguments for message
buffer variables stored in the parser. Instead of size, return
status similar to yyparse status but indicating success of
message creation. Other than the actual reallocation of the
message buffer, import and clean up memory management code
from...
(yyparse, yypush_parse): ... here.
* tests/regression.at (%error-verbose overflow): No longer an
expected failure.
(cherry picked from commit
45319f1365eb8d125424f31401d9d33cc02ff4ad)
Conflicts:
src/parse-gram.c
src/parse-gram.h
+2009-09-23 Joel E. Denny <jdenny@clemson.edu>
+
+ yysyntax_error: avoid duplicate lookahead collection.
+ Except when memory reallocation is required, this change
+ eliminates the need to invoke yysyntax_error twice and thus to
+ repeat the collection of lookaheads. It also prepares for
+ future extensions that will make those repetitions more
+ expensive and that will require additional memory management in
+ yysyntax_error. Finally, it fixes an obscure bug already
+ exercised in the test suite.
+ * data/yacc.c (yysyntax_error): Add arguments for message
+ buffer variables stored in the parser. Instead of size, return
+ status similar to yyparse status but indicating success of
+ message creation. Other than the actual reallocation of the
+ message buffer, import and clean up memory management code
+ from...
+ (yyparse, yypush_parse): ... here.
+ * tests/regression.at (%error-verbose overflow): No longer an
+ expected failure.
+
2009-09-23 Joel E. Denny <jdenny@clemson.edu>
yysyntax_error: test memory management more.
2009-09-23 Joel E. Denny <jdenny@clemson.edu>
yysyntax_error: test memory management more.
-/* Copy into YYRESULT an error message about the unexpected token
- YYTOKEN while in state YYSTATE. Return the number of bytes copied,
- including the terminating null byte. If YYRESULT is null, do not
- copy anything; just return the number of bytes that would be
- copied. As a special case, return 0 if an ordinary "syntax error"
- message will do. Return YYSIZE_MAXIMUM if overflow occurs during
- size calculation. */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yytoken)
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN while in state YYSTATE.
+
+ Return 0 if *YYMSG was successfully written. Return 1 if an ordinary
+ "syntax error" message will suffice instead. Return 2 if *YYMSG is
+ not large enough to hold the message. In the last case, also set
+ *YYMSG_ALLOC to either (a) the required number of bytes or (b) zero
+ if the required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ int yystate, int yytoken)
{
int yyn = yypact[yystate];
if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
{
int yyn = yypact[yystate];
if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
else
{
YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
YYSIZE_T yysize = yysize0;
YYSIZE_T yysize1;
else
{
YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
YYSIZE_T yysize = yysize0;
YYSIZE_T yysize1;
- int yysize_overflow = 0;
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
/* Internationalized format string. */
const char *yyformat = 0;
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
/* Internationalized format string. */
const char *yyformat = 0;
}
yyarg[yycount++] = yytname[yyx];
yysize1 = yysize + yytnamerr (0, yytname[yyx]);
}
yyarg[yycount++] = yytname[yyx];
yysize1 = yysize + yytnamerr (0, yytname[yyx]);
- yysize_overflow |= (yysize1 < yysize);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ {
+ /* Overflow. */
+ *yymsg_alloc = 0;
+ return 2;
+ }
{
#define YYCASE_(N, S) \
case N: \
{
#define YYCASE_(N, S) \
case N: \
}
yysize1 = yysize + yystrlen (yyformat);
}
yysize1 = yysize + yystrlen (yyformat);
- yysize_overflow |= (yysize1 < yysize);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ {
+ /* Overflow. */
+ *yymsg_alloc = 0;
+ return 2;
+ }
- if (yysize_overflow)
- return YYSIZE_MAXIMUM;
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 2;
+ }
- if (yyresult)
- {
- /* Avoid sprintf, as that infringes on the user's name space.
- Don't have undefined behavior even if the translation
- produced a string with the wrong number of "%s"s. */
- char *yyp = yyresult;
- int yyi = 0;
- while ((*yyp = *yyformat) != '\0')
- if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
- {
- yyp += yytnamerr (yyp, yyarg[yyi++]);
- yyformat += 2;
- }
- else
- {
- yyp++;
- yyformat++;
- }
- }
- return yysize;
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ {
+ char *yyp = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
+ }
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
}
}
#endif /* YYERROR_VERBOSE */
}
}
#endif /* YYERROR_VERBOSE */
#if ! YYERROR_VERBOSE
yyerror (]b4_yyerror_args[YY_("syntax error"));
#else
#if ! YYERROR_VERBOSE
yyerror (]b4_yyerror_args[YY_("syntax error"));
#else
- {
- YYSIZE_T yysize = yysyntax_error (0, yystate, yytoken);
- if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
- {
- YYSIZE_T yyalloc = 2 * yysize;
- if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
- yyalloc = YYSTACK_ALLOC_MAXIMUM;
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
- yymsg = (char *) YYSTACK_ALLOC (yyalloc);
- if (yymsg)
- yymsg_alloc = yyalloc;
- else
- {
- yymsg = yymsgbuf;
- yymsg_alloc = sizeof yymsgbuf;
- }
- }
-
- if (0 < yysize && yysize <= yymsg_alloc)
- {
- (void) yysyntax_error (yymsg, yystate, yytoken);
- yyerror (]b4_yyerror_args[yymsg);
- }
- else
- {
- yyerror (]b4_yyerror_args[YY_("syntax error"));
- if (yysize != 0)
- goto yyexhaustedlab;
- }
- }
+ while (1)
+ {
+ int yysyntax_error_status =
+ yysyntax_error (&yymsg_alloc, &yymsg, yystate, yytoken);
+ if (yysyntax_error_status == 2 && 0 < yymsg_alloc)
+ {
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (yymsg)
+ continue;
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ }
+ if (yysyntax_error_status == 0)
+ yyerror (]b4_yyerror_args[yymsg);
+ else
+ yyerror (]b4_yyerror_args[YY_("syntax error"));
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
+ break;
+ }
-/* A Bison parser, made by GNU Bison 2.4.1.137-628b-dirty. */
+/* A Bison parser, made by GNU Bison 2.4.1.144-419e. */
/* Skeleton implementation for Bison's Yacc-like parsers in C
/* Skeleton implementation for Bison's Yacc-like parsers in C
#define YYBISON 1
/* Bison version. */
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "2.4.1.137-628b-dirty"
+#define YYBISON_VERSION "2.4.1.144-419e"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
-/* Copy into YYRESULT an error message about the unexpected token
- YYCHAR while in state YYSTATE. Return the number of bytes copied,
- including the terminating null byte. If YYRESULT is null, do not
- copy anything; just return the number of bytes that would be
- copied. As a special case, return 0 if an ordinary "syntax error"
- message will do. Return YYSIZE_MAXIMUM if overflow occurs during
- size calculation. */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN while in state YYSTATE.
+
+ Return 0 if *YYMSG was successfully written. Return 1 if an ordinary
+ "syntax error" message will suffice instead. Return 2 if *YYMSG is
+ not large enough to hold the message. In the last case, also set
+ *YYMSG_ALLOC to either (a) the required number of bytes or (b) zero
+ if the required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ int yystate, int yytoken)
{
int yyn = yypact[yystate];
if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
{
int yyn = yypact[yystate];
if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
- int yytype = YYTRANSLATE (yychar);
- YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
YYSIZE_T yysize = yysize0;
YYSIZE_T yysize1;
YYSIZE_T yysize = yysize0;
YYSIZE_T yysize1;
- int yysize_overflow = 0;
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = 0;
+ /* Arguments of yyformat. */
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
- int yyx;
-
-# if 0
- /* This is so xgettext sees the translatable formats that are
- constructed on the fly. */
- YY_("syntax error, unexpected %s");
- YY_("syntax error, unexpected %s, expecting %s");
- YY_("syntax error, unexpected %s, expecting %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
- char *yyfmt;
- char const *yyf;
- static char const yyunexpected[] = "syntax error, unexpected %s";
- static char const yyexpecting[] = ", expecting %s";
- static char const yyor[] = " or %s";
- char yyformat[sizeof yyunexpected
- + sizeof yyexpecting - 1
- + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
- * (sizeof yyor - 1))];
- char const *yyprefix = yyexpecting;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. In other words, skip the first -YYN actions for this
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. In other words, skip the first -YYN actions for this
/* Stay within bounds of both yycheck and yytname. */
int yychecklim = YYLAST - yyn + 1;
int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
/* Stay within bounds of both yycheck and yytname. */
int yychecklim = YYLAST - yyn + 1;
int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
+ int yyx;
- yyarg[0] = yytname[yytype];
- yyfmt = yystpcpy (yyformat, yyunexpected);
+ yyarg[yycount++] = yytname[yytoken];
for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
{
yycount = 1;
yysize = yysize0;
{
yycount = 1;
yysize = yysize0;
- yyformat[sizeof yyunexpected - 1] = '\0';
break;
}
yyarg[yycount++] = yytname[yyx];
yysize1 = yysize + yytnamerr (0, yytname[yyx]);
break;
}
yyarg[yycount++] = yytname[yyx];
yysize1 = yysize + yytnamerr (0, yytname[yyx]);
- yysize_overflow |= (yysize1 < yysize);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ {
+ /* Overflow. */
+ *yymsg_alloc = 0;
+ return 2;
+ }
- yyfmt = yystpcpy (yyfmt, yyprefix);
- yyprefix = yyor;
- yyf = YY_(yyformat);
- yysize1 = yysize + yystrlen (yyf);
- yysize_overflow |= (yysize1 < yysize);
+ switch (yycount)
+ {
+#define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+#undef YYCASE_
+ }
+
+ yysize1 = yysize + yystrlen (yyformat);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ {
+ /* Overflow. */
+ *yymsg_alloc = 0;
+ return 2;
+ }
- if (yysize_overflow)
- return YYSIZE_MAXIMUM;
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 2;
+ }
- if (yyresult)
- {
- /* Avoid sprintf, as that infringes on the user's name space.
- Don't have undefined behavior even if the translation
- produced a string with the wrong number of "%s"s. */
- char *yyp = yyresult;
- int yyi = 0;
- while ((*yyp = *yyf) != '\0')
- {
- if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
- {
- yyp += yytnamerr (yyp, yyarg[yyi++]);
- yyf += 2;
- }
- else
- {
- yyp++;
- yyf++;
- }
- }
- }
- return yysize;
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ {
+ char *yyp = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
+ }
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
}
}
#endif /* YYERROR_VERBOSE */
}
}
#endif /* YYERROR_VERBOSE */
/* User initialization code. */
/* User initialization code. */
-/* Line 1258 of yacc.c */
+/* Line 1266 of yacc.c */
#line 86 "parse-gram.y"
{
/* Bison's grammar can initial empty locations, hence a default
#line 86 "parse-gram.y"
{
/* Bison's grammar can initial empty locations, hence a default
boundary_set (&yylloc.end, current_file, 1, 1);
}
boundary_set (&yylloc.end, current_file, 1, 1);
}
-/* Line 1258 of yacc.c */
-#line 1714 "parse-gram.c"
+/* Line 1266 of yacc.c */
+#line 1722 "parse-gram.c"
yylsp[0] = yylloc;
goto yysetstate;
yylsp[0] = yylloc;
goto yysetstate;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 223 "parse-gram.y"
{
code_props plain_code;
#line 223 "parse-gram.y"
{
code_props plain_code;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 232 "parse-gram.y"
{ debug_flag = true; }
break;
case 8:
#line 232 "parse-gram.y"
{ debug_flag = true; }
break;
case 8:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 234 "parse-gram.y"
{
muscle_percent_define_insert ((yyvsp[(2) - (3)].uniqstr), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].chars),
#line 234 "parse-gram.y"
{
muscle_percent_define_insert ((yyvsp[(2) - (3)].uniqstr), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].chars),
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 238 "parse-gram.y"
{ defines_flag = true; }
break;
case 10:
#line 238 "parse-gram.y"
{ defines_flag = true; }
break;
case 10:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 240 "parse-gram.y"
{
defines_flag = true;
#line 240 "parse-gram.y"
{
defines_flag = true;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 244 "parse-gram.y"
{ error_verbose = true; }
break;
case 12:
#line 244 "parse-gram.y"
{ error_verbose = true; }
break;
case 12:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 245 "parse-gram.y"
{ expected_sr_conflicts = (yyvsp[(2) - (2)].integer); }
break;
case 13:
#line 245 "parse-gram.y"
{ expected_sr_conflicts = (yyvsp[(2) - (2)].integer); }
break;
case 13:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 246 "parse-gram.y"
{ expected_rr_conflicts = (yyvsp[(2) - (2)].integer); }
break;
case 14:
#line 246 "parse-gram.y"
{ expected_rr_conflicts = (yyvsp[(2) - (2)].integer); }
break;
case 14:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 247 "parse-gram.y"
{ spec_file_prefix = (yyvsp[(2) - (2)].chars); }
break;
case 15:
#line 247 "parse-gram.y"
{ spec_file_prefix = (yyvsp[(2) - (2)].chars); }
break;
case 15:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 248 "parse-gram.y"
{ spec_file_prefix = (yyvsp[(3) - (3)].chars); }
break;
case 16:
#line 248 "parse-gram.y"
{ spec_file_prefix = (yyvsp[(3) - (3)].chars); }
break;
case 16:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 250 "parse-gram.y"
{
nondeterministic_parser = true;
#line 250 "parse-gram.y"
{
nondeterministic_parser = true;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 255 "parse-gram.y"
{
code_props action;
#line 255 "parse-gram.y"
{
code_props action;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 263 "parse-gram.y"
{ language_argmatch ((yyvsp[(2) - (2)].chars), grammar_prio, (yylsp[(1) - (2)])); }
break;
case 19:
#line 263 "parse-gram.y"
{ language_argmatch ((yyvsp[(2) - (2)].chars), grammar_prio, (yylsp[(1) - (2)])); }
break;
case 19:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 264 "parse-gram.y"
{ add_param ("lex_param", (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); }
break;
case 20:
#line 264 "parse-gram.y"
{ add_param ("lex_param", (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); }
break;
case 20:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 265 "parse-gram.y"
{ locations_flag = true; }
break;
case 21:
#line 265 "parse-gram.y"
{ locations_flag = true; }
break;
case 21:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 266 "parse-gram.y"
{ spec_name_prefix = (yyvsp[(2) - (2)].chars); }
break;
case 22:
#line 266 "parse-gram.y"
{ spec_name_prefix = (yyvsp[(2) - (2)].chars); }
break;
case 22:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 267 "parse-gram.y"
{ spec_name_prefix = (yyvsp[(3) - (3)].chars); }
break;
case 23:
#line 267 "parse-gram.y"
{ spec_name_prefix = (yyvsp[(3) - (3)].chars); }
break;
case 23:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 268 "parse-gram.y"
{ no_lines_flag = true; }
break;
case 24:
#line 268 "parse-gram.y"
{ no_lines_flag = true; }
break;
case 24:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 269 "parse-gram.y"
{ nondeterministic_parser = true; }
break;
case 25:
#line 269 "parse-gram.y"
{ nondeterministic_parser = true; }
break;
case 25:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 270 "parse-gram.y"
{ spec_outfile = (yyvsp[(2) - (2)].chars); }
break;
case 26:
#line 270 "parse-gram.y"
{ spec_outfile = (yyvsp[(2) - (2)].chars); }
break;
case 26:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 271 "parse-gram.y"
{ spec_outfile = (yyvsp[(3) - (3)].chars); }
break;
case 27:
#line 271 "parse-gram.y"
{ spec_outfile = (yyvsp[(3) - (3)].chars); }
break;
case 27:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 272 "parse-gram.y"
{ add_param ("parse_param", (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); }
break;
case 28:
#line 272 "parse-gram.y"
{ add_param ("parse_param", (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); }
break;
case 28:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 274 "parse-gram.y"
{
/* %pure-parser is deprecated in favor of `%define api.pure', so use
#line 274 "parse-gram.y"
{
/* %pure-parser is deprecated in favor of `%define api.pure', so use
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 288 "parse-gram.y"
{ version_check (&(yylsp[(2) - (2)]), (yyvsp[(2) - (2)].chars)); }
break;
case 30:
#line 288 "parse-gram.y"
{ version_check (&(yylsp[(2) - (2)]), (yyvsp[(2) - (2)].chars)); }
break;
case 30:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 290 "parse-gram.y"
{
char const *skeleton_user = (yyvsp[(2) - (2)].chars);
#line 290 "parse-gram.y"
{
char const *skeleton_user = (yyvsp[(2) - (2)].chars);
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 313 "parse-gram.y"
{ token_table_flag = true; }
break;
case 32:
#line 313 "parse-gram.y"
{ token_table_flag = true; }
break;
case 32:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 314 "parse-gram.y"
{ report_flag |= report_states; }
break;
case 33:
#line 314 "parse-gram.y"
{ report_flag |= report_states; }
break;
case 33:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 315 "parse-gram.y"
{ yacc_flag = true; }
break;
case 37:
#line 315 "parse-gram.y"
{ yacc_flag = true; }
break;
case 37:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 323 "parse-gram.y"
{
grammar_start_symbol_set ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]));
#line 323 "parse-gram.y"
{
grammar_start_symbol_set ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]));
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 327 "parse-gram.y"
{
symbol_list *list;
#line 327 "parse-gram.y"
{
symbol_list *list;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 334 "parse-gram.y"
{
symbol_list *list;
#line 334 "parse-gram.y"
{
symbol_list *list;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 341 "parse-gram.y"
{
default_prec = true;
#line 341 "parse-gram.y"
{
default_prec = true;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 345 "parse-gram.y"
{
default_prec = false;
#line 345 "parse-gram.y"
{
default_prec = false;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 349 "parse-gram.y"
{
/* Do not invoke muscle_percent_code_grow here since it invokes
#line 349 "parse-gram.y"
{
/* Do not invoke muscle_percent_code_grow here since it invokes
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 356 "parse-gram.y"
{
muscle_percent_code_grow ((yyvsp[(2) - (3)].uniqstr), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].chars), (yylsp[(3) - (3)]));
#line 356 "parse-gram.y"
{
muscle_percent_code_grow ((yyvsp[(2) - (3)].uniqstr), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].chars), (yylsp[(3) - (3)]));
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 370 "parse-gram.y"
{}
break;
case 45:
#line 370 "parse-gram.y"
{}
break;
case 45:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 371 "parse-gram.y"
{ muscle_code_grow ("union_name", (yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 46:
#line 371 "parse-gram.y"
{ muscle_code_grow ("union_name", (yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 46:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 376 "parse-gram.y"
{
union_seen = true;
#line 376 "parse-gram.y"
{
union_seen = true;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 387 "parse-gram.y"
{ current_class = nterm_sym; }
break;
case 48:
#line 387 "parse-gram.y"
{ current_class = nterm_sym; }
break;
case 48:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 388 "parse-gram.y"
{
current_class = unknown_sym;
#line 388 "parse-gram.y"
{
current_class = unknown_sym;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 392 "parse-gram.y"
{ current_class = token_sym; }
break;
case 50:
#line 392 "parse-gram.y"
{ current_class = token_sym; }
break;
case 50:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 393 "parse-gram.y"
{
current_class = unknown_sym;
#line 393 "parse-gram.y"
{
current_class = unknown_sym;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 398 "parse-gram.y"
{
symbol_list *list;
#line 398 "parse-gram.y"
{
symbol_list *list;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 409 "parse-gram.y"
{
symbol_list *list;
#line 409 "parse-gram.y"
{
symbol_list *list;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 423 "parse-gram.y"
{ (yyval.assoc) = left_assoc; }
break;
case 54:
#line 423 "parse-gram.y"
{ (yyval.assoc) = left_assoc; }
break;
case 54:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 424 "parse-gram.y"
{ (yyval.assoc) = right_assoc; }
break;
case 55:
#line 424 "parse-gram.y"
{ (yyval.assoc) = right_assoc; }
break;
case 55:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 425 "parse-gram.y"
{ (yyval.assoc) = non_assoc; }
break;
case 56:
#line 425 "parse-gram.y"
{ (yyval.assoc) = non_assoc; }
break;
case 56:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 429 "parse-gram.y"
{ current_type = NULL; }
break;
case 57:
#line 429 "parse-gram.y"
{ current_type = NULL; }
break;
case 57:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 430 "parse-gram.y"
{ current_type = (yyvsp[(1) - (1)].uniqstr); tag_seen = true; }
break;
case 58:
#line 430 "parse-gram.y"
{ current_type = (yyvsp[(1) - (1)].uniqstr); tag_seen = true; }
break;
case 58:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 436 "parse-gram.y"
{ (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); }
break;
case 59:
#line 436 "parse-gram.y"
{ (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); }
break;
case 59:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 438 "parse-gram.y"
{ (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), symbol_list_sym_new ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]))); }
break;
case 60:
#line 438 "parse-gram.y"
{ (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), symbol_list_sym_new ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]))); }
break;
case 60:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 442 "parse-gram.y"
{ (yyval.symbol) = (yyvsp[(1) - (1)].symbol); }
break;
case 61:
#line 442 "parse-gram.y"
{ (yyval.symbol) = (yyvsp[(1) - (1)].symbol); }
break;
case 61:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 443 "parse-gram.y"
{ (yyval.symbol) = (yyvsp[(1) - (2)].symbol); symbol_user_token_number_set ((yyvsp[(1) - (2)].symbol), (yyvsp[(2) - (2)].integer), (yylsp[(2) - (2)])); }
break;
case 62:
#line 443 "parse-gram.y"
{ (yyval.symbol) = (yyvsp[(1) - (2)].symbol); symbol_user_token_number_set ((yyvsp[(1) - (2)].symbol), (yyvsp[(2) - (2)].integer), (yylsp[(2) - (2)])); }
break;
case 62:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 449 "parse-gram.y"
{ (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); }
break;
case 63:
#line 449 "parse-gram.y"
{ (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); }
break;
case 63:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 451 "parse-gram.y"
{ (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), symbol_list_sym_new ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]))); }
break;
case 64:
#line 451 "parse-gram.y"
{ (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), symbol_list_sym_new ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]))); }
break;
case 64:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 455 "parse-gram.y"
{ (yyval.list) = (yyvsp[(1) - (1)].list); }
break;
case 65:
#line 455 "parse-gram.y"
{ (yyval.list) = (yyvsp[(1) - (1)].list); }
break;
case 65:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 456 "parse-gram.y"
{ (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); }
break;
case 66:
#line 456 "parse-gram.y"
{ (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); }
break;
case 66:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 460 "parse-gram.y"
{ (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); }
break;
case 67:
#line 460 "parse-gram.y"
{ (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); }
break;
case 67:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 461 "parse-gram.y"
{ (yyval.list) = symbol_list_type_new ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 68:
#line 461 "parse-gram.y"
{ (yyval.list) = symbol_list_type_new ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 68:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 462 "parse-gram.y"
{ (yyval.list) = symbol_list_default_tagged_new ((yylsp[(1) - (1)])); }
break;
case 69:
#line 462 "parse-gram.y"
{ (yyval.list) = symbol_list_default_tagged_new ((yylsp[(1) - (1)])); }
break;
case 69:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 463 "parse-gram.y"
{ (yyval.list) = symbol_list_default_tagless_new ((yylsp[(1) - (1)])); }
break;
case 70:
#line 463 "parse-gram.y"
{ (yyval.list) = symbol_list_default_tagless_new ((yylsp[(1) - (1)])); }
break;
case 70:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 469 "parse-gram.y"
{
current_type = (yyvsp[(1) - (1)].uniqstr);
#line 469 "parse-gram.y"
{
current_type = (yyvsp[(1) - (1)].uniqstr);
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 474 "parse-gram.y"
{
symbol_class_set ((yyvsp[(1) - (1)].symbol), current_class, (yylsp[(1) - (1)]), true);
#line 474 "parse-gram.y"
{
symbol_class_set ((yyvsp[(1) - (1)].symbol), current_class, (yylsp[(1) - (1)]), true);
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 479 "parse-gram.y"
{
symbol_class_set ((yyvsp[(1) - (2)].symbol), current_class, (yylsp[(1) - (2)]), true);
#line 479 "parse-gram.y"
{
symbol_class_set ((yyvsp[(1) - (2)].symbol), current_class, (yylsp[(1) - (2)]), true);
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 485 "parse-gram.y"
{
symbol_class_set ((yyvsp[(1) - (2)].symbol), current_class, (yylsp[(1) - (2)]), true);
#line 485 "parse-gram.y"
{
symbol_class_set ((yyvsp[(1) - (2)].symbol), current_class, (yylsp[(1) - (2)]), true);
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 491 "parse-gram.y"
{
symbol_class_set ((yyvsp[(1) - (3)].symbol), current_class, (yylsp[(1) - (3)]), true);
#line 491 "parse-gram.y"
{
symbol_class_set ((yyvsp[(1) - (3)].symbol), current_class, (yylsp[(1) - (3)]), true);
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 521 "parse-gram.y"
{
yyerrok;
#line 521 "parse-gram.y"
{
yyerrok;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 527 "parse-gram.y"
{ current_lhs = (yyvsp[(1) - (2)].symbol); current_lhs_location = (yylsp[(1) - (2)]);
current_lhs_named_ref = (yyvsp[(2) - (2)].named_ref); }
#line 527 "parse-gram.y"
{ current_lhs = (yyvsp[(1) - (2)].symbol); current_lhs_location = (yylsp[(1) - (2)]);
current_lhs_named_ref = (yyvsp[(2) - (2)].named_ref); }
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 532 "parse-gram.y"
{ grammar_current_rule_end ((yylsp[(1) - (1)])); }
break;
case 85:
#line 532 "parse-gram.y"
{ grammar_current_rule_end ((yylsp[(1) - (1)])); }
break;
case 85:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 533 "parse-gram.y"
{ grammar_current_rule_end ((yylsp[(3) - (3)])); }
break;
case 87:
#line 533 "parse-gram.y"
{ grammar_current_rule_end ((yylsp[(3) - (3)])); }
break;
case 87:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 539 "parse-gram.y"
{ grammar_current_rule_begin (current_lhs, current_lhs_location,
current_lhs_named_ref); }
#line 539 "parse-gram.y"
{ grammar_current_rule_begin (current_lhs, current_lhs_location,
current_lhs_named_ref); }
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 542 "parse-gram.y"
{ grammar_current_rule_symbol_append ((yyvsp[(2) - (3)].symbol), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].named_ref)); }
break;
case 89:
#line 542 "parse-gram.y"
{ grammar_current_rule_symbol_append ((yyvsp[(2) - (3)].symbol), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].named_ref)); }
break;
case 89:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 544 "parse-gram.y"
{ grammar_current_rule_action_append ((yyvsp[(2) - (3)].code), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].named_ref)); }
break;
case 90:
#line 544 "parse-gram.y"
{ grammar_current_rule_action_append ((yyvsp[(2) - (3)].code), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].named_ref)); }
break;
case 90:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 546 "parse-gram.y"
{ grammar_current_rule_prec_set ((yyvsp[(3) - (3)].symbol), (yylsp[(3) - (3)])); }
break;
case 91:
#line 546 "parse-gram.y"
{ grammar_current_rule_prec_set ((yyvsp[(3) - (3)].symbol), (yylsp[(3) - (3)])); }
break;
case 91:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 548 "parse-gram.y"
{ grammar_current_rule_dprec_set ((yyvsp[(3) - (3)].integer), (yylsp[(3) - (3)])); }
break;
case 92:
#line 548 "parse-gram.y"
{ grammar_current_rule_dprec_set ((yyvsp[(3) - (3)].integer), (yylsp[(3) - (3)])); }
break;
case 92:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 550 "parse-gram.y"
{ grammar_current_rule_merge_set ((yyvsp[(3) - (3)].uniqstr), (yylsp[(3) - (3)])); }
break;
case 93:
#line 550 "parse-gram.y"
{ grammar_current_rule_merge_set ((yyvsp[(3) - (3)].uniqstr), (yylsp[(3) - (3)])); }
break;
case 93:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 554 "parse-gram.y"
{ (yyval.named_ref) = 0; }
break;
case 94:
#line 554 "parse-gram.y"
{ (yyval.named_ref) = 0; }
break;
case 94:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 556 "parse-gram.y"
{ (yyval.named_ref) = named_ref_new((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 96:
#line 556 "parse-gram.y"
{ (yyval.named_ref) = named_ref_new((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 96:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 568 "parse-gram.y"
{ (yyval.uniqstr) = uniqstr_new ((yyvsp[(1) - (1)].chars)); }
break;
case 97:
#line 568 "parse-gram.y"
{ (yyval.uniqstr) = uniqstr_new ((yyvsp[(1) - (1)].chars)); }
break;
case 97:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 573 "parse-gram.y"
{ (yyval.chars) = ""; }
break;
case 98:
#line 573 "parse-gram.y"
{ (yyval.chars) = ""; }
break;
case 98:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 574 "parse-gram.y"
{ (yyval.chars) = (yyvsp[(1) - (1)].uniqstr); }
break;
case 100:
#line 574 "parse-gram.y"
{ (yyval.chars) = (yyvsp[(1) - (1)].uniqstr); }
break;
case 100:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 585 "parse-gram.y"
{
code_props plain_code;
#line 585 "parse-gram.y"
{
code_props plain_code;
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 605 "parse-gram.y"
{ (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 102:
#line 605 "parse-gram.y"
{ (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 102:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 607 "parse-gram.y"
{
(yyval.symbol) = symbol_get (char_name ((yyvsp[(1) - (1)].character)), (yylsp[(1) - (1)]));
#line 607 "parse-gram.y"
{
(yyval.symbol) = symbol_get (char_name ((yyvsp[(1) - (1)].character)), (yylsp[(1) - (1)]));
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 615 "parse-gram.y"
{ (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 106:
#line 615 "parse-gram.y"
{ (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 106:
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 627 "parse-gram.y"
{
(yyval.symbol) = symbol_get (quotearg_style (c_quoting_style, (yyvsp[(1) - (1)].chars)), (yylsp[(1) - (1)]));
#line 627 "parse-gram.y"
{
(yyval.symbol) = symbol_get (quotearg_style (c_quoting_style, (yyvsp[(1) - (1)].chars)), (yylsp[(1) - (1)]));
-/* Line 1471 of yacc.c */
+/* Line 1479 of yacc.c */
#line 636 "parse-gram.y"
{
code_props plain_code;
#line 636 "parse-gram.y"
{
code_props plain_code;
-/* Line 1471 of yacc.c */
-#line 2664 "parse-gram.c"
+/* Line 1479 of yacc.c */
+#line 2672 "parse-gram.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
#if ! YYERROR_VERBOSE
yyerror (YY_("syntax error"));
#else
#if ! YYERROR_VERBOSE
yyerror (YY_("syntax error"));
#else
- {
- YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
- if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
- {
- YYSIZE_T yyalloc = 2 * yysize;
- if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
- yyalloc = YYSTACK_ALLOC_MAXIMUM;
- if (yymsg != yymsgbuf)
- YYSTACK_FREE (yymsg);
- yymsg = (char *) YYSTACK_ALLOC (yyalloc);
- if (yymsg)
- yymsg_alloc = yyalloc;
- else
- {
- yymsg = yymsgbuf;
- yymsg_alloc = sizeof yymsgbuf;
- }
- }
-
- if (0 < yysize && yysize <= yymsg_alloc)
- {
- (void) yysyntax_error (yymsg, yystate, yychar);
- yyerror (yymsg);
- }
- else
- {
- yyerror (YY_("syntax error"));
- if (yysize != 0)
- goto yyexhaustedlab;
- }
- }
+ while (1)
+ {
+ int yysyntax_error_status =
+ yysyntax_error (&yymsg_alloc, &yymsg, yystate, yytoken);
+ if (yysyntax_error_status == 2 && 0 < yymsg_alloc)
+ {
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (yymsg)
+ continue;
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ }
+ if (yysyntax_error_status == 0)
+ yyerror (yymsg);
+ else
+ yyerror (YY_("syntax error"));
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
+ break;
+ }
-/* Line 1691 of yacc.c */
+/* Line 1690 of yacc.c */
-/* A Bison parser, made by GNU Bison 2.4.1.137-628b-dirty. */
+/* A Bison parser, made by GNU Bison 2.4.1.144-419e. */
/* Skeleton interface for Bison's Yacc-like parsers in C
/* Skeleton interface for Bison's Yacc-like parsers in C
-/* Line 1692 of yacc.c */
+/* Line 1691 of yacc.c */
#line 94 "parse-gram.y"
symbol *symbol;
#line 94 "parse-gram.y"
symbol *symbol;
-/* Line 1692 of yacc.c */
+/* Line 1691 of yacc.c */
#line 181 "parse-gram.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
#line 181 "parse-gram.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# Imagine the case where YYSTACK_ALLOC_MAXIMUM = YYSIZE_MAXIMUM and an
# invocation of yysyntax_error has caused yymsg_alloc to grow to exactly
# YYSTACK_ALLOC_MAXIMUM (perhaps because the normal doubling of size had
# Imagine the case where YYSTACK_ALLOC_MAXIMUM = YYSIZE_MAXIMUM and an
# invocation of yysyntax_error has caused yymsg_alloc to grow to exactly
# YYSTACK_ALLOC_MAXIMUM (perhaps because the normal doubling of size had
-# to be clipped to YYSTACK_ALLOC_MAXIMUM). Now imagine a subsequent
-# invocation of yysyntax_error that overflows during its size
-# calculation and thus returns YYSIZE_MAXIMUM to yyparse. Then, yyparse
-# will invoke yyerror using the old contents of yymsg. This bug needs
-# to be fixed.
+# to be clipped to YYSTACK_ALLOC_MAXIMUM). In an old version of yacc.c,
+# a subsequent invocation of yysyntax_error that overflows during its
+# size calculation would return YYSIZE_MAXIMUM to yyparse. Then,
+# yyparse would invoke yyerror using the old contents of yymsg.
AT_SETUP([[%error-verbose overflow]])
AT_SETUP([[%error-verbose overflow]])
AT_DATA_GRAMMAR([input.y],
[[%code {
#include <stdio.h>
AT_DATA_GRAMMAR([input.y],
[[%code {
#include <stdio.h>