bug-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: inconsistant %destructor usage between union- and variant-based pars


From: Frank Heckenbach
Subject: Re: inconsistant %destructor usage between union- and variant-based parsers
Date: Wed, 23 Mar 2022 03:59:10 +0100

Alexandre Duret-Lutz wrote:

> The manual states that user-defined %destructors are called only on a
> specific list of discarded symbols:
> 
> [...]

Akim can hopefully better answer your questions about "%destructor"
implementation, but concerning your concrete issues:

I'd recommend when using variants, to avoid using "%destructor" at
all and instead use proper RAII types (i.e. with their own C++
destructors and copy and/or move constructors/assignments as
appropriate). In your application, std::unique_ptr or
std::shared_ptr, both possibly with a custom deleter, may do the
trick; otherwise you can implement a custom class with those
semantics.

In my experience, that's enough to make sure values are destructed
exactly when they should. (If not, I'd consider this a bug to be
reported.)

In particular, if you move the semantic values in your actions, it's
true $1 etc. will be destructed afterwards, but they'll typically
contain empty (moved-from) states then. (If you need pre-C++11
support, it's more work; basically you'll have to implement
move-semantics of your own and make sure to call them correctly.)

To this end, you might find automove interesting (see
http://www.gnu.org/software/bison/manual/html_node/_0025define-Summary.html).

Regards,
Frank



reply via email to

[Prev in Thread] Current Thread [Next in Thread]