[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: user destructor for unresolved GLR semantic value
From: |
Paul Eggert |
Subject: |
Re: user destructor for unresolved GLR semantic value |
Date: |
Thu, 25 Aug 2005 11:02:51 -0700 |
User-agent: |
Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux) |
"Joel E. Denny" <address@hidden> writes:
> This approach is much easier, but it drops some diagnostic messages. I
> thought trying to invoke YY_SYMBOL_PRINT() would be worthwhile.
Thanks for mentioning this. However, I'd rather not complicate
all the skeletons for the sake of this GLR-specific problem.
I installed the following patch instead. It outputs a bit more
information than the patch you proposed, since it mentions which
popped items were unresolved. Please let me know how it works for you.
2005-08-25 Paul Eggert <address@hidden>
* data/glr.c (yydestroyStackItem): New function.
(yyrecoverSyntaxError, yyreturn): Use it to improve quality of
debugging information. Problem reported by Joel E. Denny.
--- data/glr.c 25 Aug 2005 06:11:34 -0000 1.115
+++ data/glr.c 25 Aug 2005 17:57:23 -0000 1.116
@@ -886,6 +886,26 @@ yyuserMerge (int yyn, YYSTYPE* yy0, YYST
]b4_yydestruct_generate([b4_c_ansi_function_def])[
+static void
+yydestroyStackItem (char const *yymsg, yyGLRState *yys)
+{
+ if (yys->yyresolved)
+ yydestruct (yymsg, yystos[yys->yylrState],
+ &yys->yysemantics.yysval]b4_location_if([, &yys->yyloc])[);
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ {
+ YYFPRINTF (stderr, "%s unresolved ", yymsg);
+ yysymprint (stderr, yystos[yys->yylrState],
+ &yys->yysemantics.yysval]b4_location_if([,
&yys->yyloc])[);
+ YYFPRINTF (stderr, "\n");
+ }
+#endif
+ }
+}
+
/** Number of symbols composing the right hand side of rule #RULE. */
static inline int
yyrhsLength (yyRuleNum yyrule)
@@ -1981,10 +2001,7 @@ yyrecoverSyntaxError (yyGLRStack* yystac
}
}
]b4_location_if([[ yystack->yyerror_range[1].yystate.yyloc =
yys->yyloc;]])[
- if (yys->yyresolved)
- yydestruct ("Error: popping",
- yystos[yys->yylrState],
- &yys->yysemantics.yysval]b4_location_if([, &yys->yyloc])[);
+ yydestroyStackItem ("Error: popping", yys);
yystack->yytops.yystates[0] = yys->yypred;
yystack->yynextFree -= 1;
yystack->yyspaceLeft += 1;
@@ -2184,10 +2201,7 @@ b4_syncline(address@hidden@], address@hidden@])])dnl
{
yyGLRState *yys = yystates[0];
]b4_location_if([[ yystack.yyerror_range[1].yystate.yyloc = yys->yyloc;]]
-)[ if (yys->yyresolved)
- yydestruct ("Cleanup: popping",
- yystos[yys->yylrState],
- &yys->yysemantics.yysval]b4_location_if([,
&yys->yyloc])[);
+)[ yydestroyStackItem ("Cleanup: popping", yys);
yystates[0] = yys->yypred;
yystack.yynextFree -= 1;
yystack.yyspaceLeft += 1;
- user destructor for unresolved GLR semantic value, Joel E. Denny, 2005/08/24
- Re: user destructor for unresolved GLR semantic value, Joel E. Denny, 2005/08/24
- Re: user destructor for unresolved GLR semantic value, Joel E. Denny, 2005/08/24
- Re: user destructor for unresolved GLR semantic value, Joel E. Denny, 2005/08/25
- Re: user destructor for unresolved GLR semantic value, Paul Eggert, 2005/08/25
- Re: user destructor for unresolved GLR semantic value, Joel E. Denny, 2005/08/25
- Re: user destructor for unresolved GLR semantic value,
Paul Eggert <=
- Re: user destructor for unresolved GLR semantic value, Joel E. Denny, 2005/08/25
- Re: user destructor for unresolved GLR semantic value, Joel E. Denny, 2005/08/25
Re: user destructor for unresolved GLR semantic value, Joel E. Denny, 2005/08/25