From: drh Date: Tue, 16 Jan 2007 03:09:02 +0000 (+0000) Subject: Make sure the parser generated by lemon always calls destructors on X-Git-Tag: version-3.6.10~2577 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=61e339a60d4409bdccf5b8e8aca6256957ef861f;p=thirdparty%2Fsqlite.git Make sure the parser generated by lemon always calls destructors on unused symbols, even if there is no action following the rule. Ticket #2171. (CVS 3593) FossilOrigin-Name: 0c5c1b931dfdc163f300f458e4b305c9f50e17f8 --- diff --git a/manifest b/manifest index 39be5b72c6..6fdd12e115 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sbug\sin\ssqlite3_prepare_v2()\sintroduced\sby\scheckin\s(3578)\sand\sreported\non\sthe\smailing\slist.\s(CVS\s3592) -D 2007-01-12T23:43:43 +C Make\ssure\sthe\sparser\sgenerated\sby\slemon\salways\scalls\sdestructors\son\nunused\ssymbols,\seven\sif\sthere\sis\sno\saction\sfollowing\sthe\srule.\nTicket\s#2171.\s(CVS\s3593) +D 2007-01-16T03:09:03 F Makefile.in 7fa74bf4359aa899da5586e394d17735f221315f F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -353,7 +353,7 @@ F test/where.test 8dcc1b1a6f17b6bad2dc6a9917eafe62d4ea57eb F test/where2.test 61d5b20d9bedc8788a773bbdc5b2ef887725928e F test/where3.test 0a30fe9808b0fa01c46d0fcf4fac0bf6cf75bb30 F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b -F tool/lemon.c 29d1bd8db8d5fbb1c577358632a96d716a435324 +F tool/lemon.c 2938bec507110397c937bd8a03b0c9596a709a04 F tool/lempar.c 0a2a5cf96a98a64a5594625ad8fbdbe41dbaca50 F tool/memleak.awk 4e7690a51bf3ed757e611273d43fe3f65b510133 F tool/memleak2.awk 9cc20c8e8f3c675efac71ea0721ee6874a1566e8 @@ -424,7 +424,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 -P f4ee5d83e177e7ed9f180454c01d46a395a5715d -R 4b0815a55b922b31192db8cde97bb03b +P 87248470362f444f2339fee18d3624e8544f5256 +R 215b3e2a99296aa81351d696d69a7c89 U drh -Z 0214b95c1f9fb06ed7af23b4d12ac47e +Z 05ac11539ce5473e2ed5468a4de2ce22 diff --git a/manifest.uuid b/manifest.uuid index e893ed948e..875a8e59a2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -87248470362f444f2339fee18d3624e8544f5256 \ No newline at end of file +0c5c1b931dfdc163f300f458e4b305c9f50e17f8 \ No newline at end of file diff --git a/tool/lemon.c b/tool/lemon.c index 84d462a077..19c2e42a60 100644 --- a/tool/lemon.c +++ b/tool/lemon.c @@ -3198,7 +3198,7 @@ PRIVATE void translate_code(struct lemon *lemp, struct rule *rp){ lhsused = 0; append_str(0,0,0,0); - for(cp=rp->code; *cp; cp++){ + for(cp=(rp->code?rp->code:""); *cp; cp++){ if( isalpha(*cp) && (cp==rp->code || (!isalnum(cp[-1]) && cp[-1]!='_')) ){ char saved; for(xp= &cp[1]; isalnum(*xp) || *xp=='_'; xp++); @@ -3261,8 +3261,10 @@ PRIVATE void translate_code(struct lemon *lemp, struct rule *rp){ } } } - cp = append_str(0,0,0,0); - rp->code = Strsafe(cp); + if( rp->code ){ + cp = append_str(0,0,0,0); + rp->code = Strsafe(cp?cp:""); + } } /* @@ -3830,7 +3832,7 @@ int mhflag; /* Output in makeheaders format if true */ /* 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;