Destroy the lhs symbols after reduction.

* data/lalr1-fusion.cc (parse): After the user action, when in
	variant mode, destroy the lhs symbols.
This commit is contained in:
Akim Demaille
2008-07-21 11:39:55 +02:00
parent d7f4d82382
commit f8a95c9c12
2 changed files with 18 additions and 0 deletions

View File

@@ -1,3 +1,9 @@
2008-11-03 Akim Demaille <demaille@gostai.com>
Destroy the lhs symbols after reduction.
* data/lalr1-fusion.cc (parse): After the user action, when in
variant mode, destroy the lhs symbols.
2008-11-03 Akim Demaille <demaille@gostai.com> 2008-11-03 Akim Demaille <demaille@gostai.com>
Simplify yysyntax_error_ use. Simplify yysyntax_error_ use.

View File

@@ -859,10 +859,13 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
else else
yyval = yystack_@{0@}.value;])[ yyval = yystack_@{0@}.value;])[
// Compute the default @@$.
{ {
slice<data_type, stack_type> slice (yystack_, yylen); slice<data_type, stack_type> slice (yystack_, yylen);
YYLLOC_DEFAULT (yyloc, slice, yylen); YYLLOC_DEFAULT (yyloc, slice, yylen);
} }
// Perform the reduction.
YY_REDUCE_PRINT (yyn); YY_REDUCE_PRINT (yyn);
switch (yyn) switch (yyn)
{ {
@@ -872,6 +875,15 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
} }
YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], yyval, yyloc); YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], yyval, yyloc);
]b4_variant_if([
// Destroy the lhs symbols.
for (unsigned i = 0; i < yylen; ++i)
{
b4_symbol_variant([[yystos_[yystack_@{i@}.state]]],
[[yystack_@{i@}.value]],
[[destroy]])
}])dnl
[
yypop_ (yylen); yypop_ (yylen);
yylen = 0; yylen = 0;
YY_STACK_PRINT (); YY_STACK_PRINT ();