When is %destructor invoked in BISON? I have the following bison code:
%union{
char * sval;
Variable * vval;
}
%token VARIABLE
%token L
From the Bison Manual:
Discarded symbols are the following:
- stacked symbols popped during the first phase of error recovery,
- incoming terminals during the second phase of error recovery,
- the current lookahead and the entire stack (except the current right-hand side symbols) when the parser returns immediately, and
- the start symbol, when the parser succeeds.
So if you don't hit an error, the %destructor
will be called on the stack if you return immediately (call YYABORT or YYACCEPT), or it will call it on start symbol if parsing succeeds.
I figured out, that I should free() it after I perform the action, so for example
...
| String CONCAT String { $$ = concat($1,$3); free($1); free($3); }
...
That did the trick for me.