mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 20:33:03 +00:00
* data/yacc.c (YY_LOCATION_PRINT): Use YYLTYPE_IS_TRIVIAL as a
clearer criterion to define it. (parse): Initialize the initial location when YYLTYPE_IS_TRIVIAL. When reducing on an empty RHS, use the latest stacked location as location. yylloc is not always available. * data/glr.c: Likewise. Also, honor initial-actions.
This commit is contained in:
11
ChangeLog
11
ChangeLog
@@ -1,3 +1,14 @@
|
||||
2004-09-20 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* data/yacc.c (YY_LOCATION_PRINT): Use YYLTYPE_IS_TRIVIAL as a
|
||||
clearer criterion to define it.
|
||||
(parse): Initialize the initial location when YYLTYPE_IS_TRIVIAL.
|
||||
When reducing on an empty RHS, use the latest stacked location as
|
||||
location.
|
||||
yylloc is not always available.
|
||||
* data/glr.c: Likewise.
|
||||
Also, honor initial-actions.
|
||||
|
||||
2004-09-20 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* data/yacc.c (YY_LOCATION_PRINT): New.
|
||||
|
||||
25
data/glr.c
25
data/glr.c
@@ -427,9 +427,9 @@ static const ]b4_int_type_for([b4_stos])[ yystos[] =
|
||||
|
||||
#ifndef YYLLOC_DEFAULT
|
||||
# define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) \
|
||||
((yyCurrent).first_line = YYRHSLOC(yyRhs, 1).first_line, \
|
||||
((yyCurrent).first_line = YYRHSLOC(yyRhs, 1).first_line, \
|
||||
(yyCurrent).first_column = YYRHSLOC(yyRhs, 1).first_column, \
|
||||
(yyCurrent).last_line = YYRHSLOC(yyRhs, YYN).last_line, \
|
||||
(yyCurrent).last_line = YYRHSLOC(yyRhs, YYN).last_line, \
|
||||
(yyCurrent).last_column = YYRHSLOC(yyRhs, YYN).last_column)
|
||||
|
||||
/* YY_LOCATION_PRINT -- Print the location on the stream.
|
||||
@@ -720,7 +720,7 @@ yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp,
|
||||
if (yyrhslen == 0)
|
||||
{
|
||||
*yyvalp = yyval_default;
|
||||
*yylocp = yyloc_default;
|
||||
*yylocp = yyvsp[0].yystate.yyloc;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1825,7 +1825,24 @@ yyrecoverSyntaxError (yyGLRStack* yystack,
|
||||
if (setjmp (yystack.yyexception_buffer) != 0)
|
||||
goto yyDone;
|
||||
|
||||
yyglrShift (&yystack, 0, 0, 0, yyval_default, &yyloc_default]b4_user_args[);
|
||||
yylval = yyval_default;
|
||||
]b4_location_if([
|
||||
#if YYLTYPE_IS_TRIVIAL
|
||||
yylloc.first_line = yylloc.last_line = 1;
|
||||
yylloc.first_column = yylloc.last_column = 0;
|
||||
#endif
|
||||
])
|
||||
m4_ifdef([b4_initial_action], [
|
||||
m4_pushdef([b4_at_dollar], [(yylval)])dnl
|
||||
m4_pushdef([b4_dollar_dollar], [(yylloc)])dnl
|
||||
/* User initialization code. */
|
||||
b4_initial_action
|
||||
m4_popdef([b4_dollar_dollar])dnl
|
||||
m4_popdef([b4_at_dollar])dnl
|
||||
/* Line __line__ of glr.c. */
|
||||
b4_syncline([@oline@], [@ofile@])])dnl
|
||||
[
|
||||
yyglrShift (&yystack, 0, 0, 0, yylval, &yylloc]b4_user_args[);
|
||||
yytoken = YYEMPTY;
|
||||
yyposn = 0;
|
||||
|
||||
|
||||
32
data/yacc.c
32
data/yacc.c
@@ -514,18 +514,21 @@ while (0)
|
||||
(Current).first_column = (Rhs)[1].first_column, \
|
||||
(Current).last_line = (Rhs)[N].last_line, \
|
||||
(Current).last_column = (Rhs)[N].last_column)
|
||||
#endif
|
||||
|
||||
|
||||
/* YY_LOCATION_PRINT -- Print the location on the stream.
|
||||
This macro was not mandated originally: define only if we know
|
||||
we won't break user code: when these are the locations we know. */
|
||||
|
||||
# define YY_LOCATION_PRINT(File, Loc) \
|
||||
fprintf (File, "%d.%d-%d.%d", \
|
||||
(Loc).first_line, (Loc).first_column, \
|
||||
(Loc).last_line, (Loc).last_column)
|
||||
#endif
|
||||
|
||||
#ifndef YY_LOCATION_PRINT
|
||||
# if YYLTYPE_IS_TRIVIAL
|
||||
# define YY_LOCATION_PRINT(File, Loc) \
|
||||
fprintf (File, "%d.%d-%d.%d", \
|
||||
(Loc).first_line, (Loc).first_column, \
|
||||
(Loc).last_line, (Loc).last_column)
|
||||
# endif
|
||||
#else
|
||||
# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
|
||||
#endif
|
||||
|
||||
@@ -815,8 +818,14 @@ b4_c_function_def([yyparse], [int], b4_parse_param)
|
||||
|
||||
yyssp = yyss;
|
||||
yyvsp = yyvs;
|
||||
]b4_location_if([ yylsp = yyls;])[
|
||||
]m4_ifdef([b4_initial_action], [
|
||||
]b4_location_if([[ yylsp = yyls;
|
||||
#if YYLTYPE_IS_TRIVIAL
|
||||
/* Initialize the default location before parsing starts. */
|
||||
yyls[0].first_line = yyls[0].last_line = 1;
|
||||
yyls[0].first_column = yyls[0].last_column = 0;
|
||||
#endif
|
||||
]])
|
||||
m4_ifdef([b4_initial_action], [
|
||||
m4_pushdef([b4_at_dollar], [(*yylsp)])dnl
|
||||
m4_pushdef([b4_dollar_dollar], [(*yyvsp)])dnl
|
||||
/* User initialization code. */
|
||||
@@ -1008,8 +1017,11 @@ yyreduce:
|
||||
yyval = yyvsp[1-yylen];
|
||||
|
||||
]b4_location_if(
|
||||
[ /* Default location. */
|
||||
YYLLOC_DEFAULT (yyloc, yylsp - yylen, yylen);])[
|
||||
[[ /* Default location. */
|
||||
if (yylen)
|
||||
YYLLOC_DEFAULT (yyloc, yylsp - yylen, yylen);
|
||||
else
|
||||
yyloc = yylsp[0];]])[
|
||||
YY_REDUCE_PRINT (yyn);
|
||||
switch (yyn)
|
||||
]{
|
||||
|
||||
Reference in New Issue
Block a user