help-bison
[Top][All Lists]
Advanced

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

Re: Exception safety of generated C++ parser


From: Hans Aberg
Subject: Re: Exception safety of generated C++ parser
Date: Thu, 13 Sep 2012 23:43:09 +0200

On 13 Sep 2012, at 22:52, Oleksii Taran wrote:

> 13.09.12 19:32, Hans Aberg wrote:
>> On 13 Sep 2012, at 17:54, Oleksii Taran wrote:
>> 
>>> Does Bison guarantees exception safety in C++ parser, i.e. will it make
>>> any clean-up and free memory if an exception is thrown on rule action?
>> Yes, the default stack is std::deque.
>> 
>>> I
>>> know about %destructor directive, but it seems irrelevant, since
>>> destructor code is called only if parser recovers from _syntax_ error.
>> This is for the C parser, since C does not provide automatic cleanup. I 
>> might be possible to compile this parser as C++ (supported at least in the 
>> past), in which case %destructor would be needed.
>> 
> 
> But what if deque holds not objects, but pointers to them? e.g. code
> like this:
> 
> %union {
>  ::std::string *token;
> }
> 
> How Bison knows that it should call something like `delete token;` ?

Then you would have to use %destructor, too, to delete the stuff during error 
recovery that isn't deleted in the actions. This approach would be currently be 
necessary if you want to use Bison's grammar typing system. Akim is working on 
a C++ proper approach. Also, though C++11 supports types in unions, one would 
need to know how to explicitly appropriate invoke destructors, so currently, 
that does not help.

Hans





reply via email to

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