aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorLuis Ontanon <luis.ontanon@gmail.com>2007-01-15 19:48:06 +0000
committerLuis Ontanon <luis.ontanon@gmail.com>2007-01-15 19:48:06 +0000
commit47730bc1e84da9176c372291f82c3d70f3b57d66 (patch)
tree4f23f7cec3fed9f7138c3146391da905d34d36df /tools
parent4ea1d12df809d70e1dba202508d1e71a60ca02d6 (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
Diffstat (limited to 'tools')
-rw-r--r--tools/lemon/lemon.c4
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;