* data/skeletons/glr2.cc (glr_stack_item::setState): Free the previous
state before installing the new one.
---
 data/skeletons/glr2.cc | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/data/skeletons/glr2.cc b/data/skeletons/glr2.cc
index 77c64641..19773cd2 100644
--- a/data/skeletons/glr2.cc
+++ b/data/skeletons/glr2.cc
@@ -1374,10 +1374,10 @@ public:
   ~glr_stack_item ()
   {]b4_parse_assert_if([[
     check_ ();]])[
-    if (is_state())
-      getState().~glr_state();
+    if (is_state ())
+      getState ().~glr_state ();
     else
-      getOption().~semantic_option();
+      getOption ().~semantic_option ();
   }
 
   void setState (const glr_state &state)
@@ -1386,12 +1386,12 @@ public:
     state.check_ ();]])[
     if (this != state.asItem ())
       {
-        is_state_ = true;
-        // FIXME: What about the previous content?  Shouldn't it be
-        // freed?  It might be useful to have an explicit "void" state
-        // when this item is in unused state (in the list of free
-        // items), when parse.assert is set.
+        if (is_state_)
+          getState ().~glr_state ();
+        else
+          getOption ().~semantic_option ();
         new (&raw_) glr_state (state);
+        is_state_ = true;
       }
   }
 
-- 
2.30.0


Reply via email to