diff options
author | Luis Ontanon <luis.ontanon@gmail.com> | 2007-01-15 19:48:06 +0000 |
---|---|---|
committer | Luis Ontanon <luis.ontanon@gmail.com> | 2007-01-15 19:48:06 +0000 |
commit | 47730bc1e84da9176c372291f82c3d70f3b57d66 (patch) | |
tree | 4f23f7cec3fed9f7138c3146391da905d34d36df | |
parent | 4ea1d12df809d70e1dba202508d1e71a60ca02d6 (diff) |
Fix a major leakage of token minors in lemon generated parsers due to the fact that lemon was not genmerating destructor code for elements in the RHS of rules without C-code.
svn path=/trunk/; revision=20442
-rw-r--r-- | tools/lemon/lemon.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/tools/lemon/lemon.c b/tools/lemon/lemon.c index 1ba274151e..d8e0903161 100644 --- a/tools/lemon/lemon.c +++ b/tools/lemon/lemon.c @@ -3245,6 +3245,8 @@ PRIVATE void translate_code(struct lemon *lemp, struct rule *rp){ for(i=0; i<rp->nrhs; i++) used[i] = 0; lhsused = 0; + if (! rp->code) rp->code = "\n"; + append_str(0,0,0,0); for(cp=rp->code; *cp; cp++){ if( safe_isalpha(*cp) && (cp==rp->code || (!safe_isalnum(cp[-1]) && cp[-1]!='_')) ){ @@ -3875,7 +3877,7 @@ void ReportTable( /* Generate code which execution during each REDUCE action */ for(rp=lemp->rule; rp; rp=rp->next){ - if( rp->code ) translate_code(lemp, rp); + translate_code(lemp, rp); } for(rp=lemp->rule; rp; rp=rp->next){ struct rule *rp2; |