]> git.saurik.com Git - bison.git/blobdiff - data/lalr1-fusion.cc
Destroy the lhs symbols after reduction.
[bison.git] / data / lalr1-fusion.cc
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 ();