]> git.saurik.com Git - bison.git/commitdiff
Destroy the lhs symbols after reduction.
authorAkim Demaille <demaille@gostai.com>
Mon, 21 Jul 2008 09:39:55 +0000 (11:39 +0200)
committerAkim Demaille <demaille@gostai.com>
Mon, 3 Nov 2008 21:01:22 +0000 (22:01 +0100)
* data/lalr1-fusion.cc (parse): After the user action, when in
variant mode, destroy the lhs symbols.

ChangeLog
data/lalr1-fusion.cc

index 28c3ce808e2cfca932f093c2fdbefb3b2e0e85f9..25d5f6fc1cff8a5fcd4c55f9c8306c4938604489 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        Simplify yysyntax_error_ use.
index 743a05ac5a36b880135e97b603c5a0817e537134..6299d760d0f46f07fdc3d3c5729c21655cbf0bd7 100644 (file)
@@ -859,10 +859,13 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
     else
       yyval = yystack_@{0@}.value;])[
 
+    // Compute the default @@$.
     {
       slice<data_type, stack_type> slice (yystack_, yylen);
       YYLLOC_DEFAULT (yyloc, slice, yylen);
     }
+
+    // Perform the reduction.
     YY_REDUCE_PRINT (yyn);
     switch (yyn)
       {
@@ -872,6 +875,15 @@ m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
       }
     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);
     yylen = 0;
     YY_STACK_PRINT ();