From 8d65973d93eb5515d1366bd1a2348fec98956557 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 13 Jan 2005 23:54:06 +0000 Subject: [PATCH] Fix a bug in lemon that does not effect SQLite. Ticket #1068. (CVS 2208) FossilOrigin-Name: 7113b5ed8d51718356ce1cc51896a3070875a7e2 --- manifest | 14 +++++++------- manifest.uuid | 2 +- tool/lemon.c | 28 ++++++++++++++-------------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/manifest b/manifest index b358c05bab..e89d69046f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Tidy\sup\smalloc.test\sa\sbit.\s(CVS\s2207) -D 2005-01-13T13:35:58 +C Fix\sa\sbug\sin\slemon\sthat\sdoes\snot\seffect\sSQLite.\s\sTicket\s#1068.\s(CVS\s2208) +D 2005-01-13T23:54:07 F Makefile.in 6ce51dde6a8fe82fc12f20dec750572f6a19f56a F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457 F README a01693e454a00cc117967e3f9fdab2d4d52e9bc1 @@ -209,7 +209,7 @@ F test/varint.test ab7b110089a08b9926ed7390e7e97bdefeb74102 F test/view.test 3f96df86f1c61ee850b945204683773bbbb8643e F test/where.test 0d7c9dad0aabb30aa8babdee659cc558db85a274 F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b -F tool/lemon.c 250b30bcf3f1f422a2cad24b1597314777058a4b +F tool/lemon.c eb3b2bbefc0d442fa459f4f1924e598e804eca9c F tool/lempar.c 1e61d2b6cb9d8affa264a13336bc0c088498caa4 F tool/memleak.awk 4e7690a51bf3ed757e611273d43fe3f65b510133 F tool/memleak2.awk 9cc20c8e8f3c675efac71ea0721ee6874a1566e8 @@ -268,7 +268,7 @@ F www/tclsqlite.tcl e73f8f8e5f20e8277619433f7970060ab01088fc F www/vdbe.tcl 095f106d93875c94b47367384ebc870517431618 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0 F www/whentouse.tcl c3b50d3ac31c54be2a1af9b488a89d22f1e6e746 -P 2c7a1a1698851914de705a0a942ebaaad5545fbc -R f1470a4facb1a63af2a4c86a82a6a799 -U danielk1977 -Z 17062bc61ce0613e5a4bff945da3ebb7 +P 94cf91cc5dc0d656636211d23350a1ec29aced8a +R 22751790adbb0fabba4752e324de35f9 +U drh +Z df8ba3dea9dafef9b539e800490a2365 diff --git a/manifest.uuid b/manifest.uuid index 7824c85ead..d0d735ad7b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -94cf91cc5dc0d656636211d23350a1ec29aced8a \ No newline at end of file +7113b5ed8d51718356ce1cc51896a3070875a7e2 \ No newline at end of file diff --git a/tool/lemon.c b/tool/lemon.c index 708b3538d7..7d72fd82b5 100644 --- a/tool/lemon.c +++ b/tool/lemon.c @@ -3664,6 +3664,20 @@ int mhflag; /* Output in makeheaders format if true */ fprintf(out," break;\n"); lineno++; } } + if( lemp->vardest ){ + struct symbol *dflt_sp = 0; + for(i=0; insymbol; i++){ + struct symbol *sp = lemp->symbols[i]; + if( sp==0 || sp->type==TERMINAL || + sp->index<=0 || sp->destructor!=0 ) continue; + fprintf(out," case %d:\n",sp->index); lineno++; + dflt_sp = sp; + } + if( dflt_sp!=0 ){ + emit_destructor_code(out,dflt_sp,lemp,&lineno); + fprintf(out," break;\n"); lineno++; + } + } for(i=0; insymbol; i++){ struct symbol *sp = lemp->symbols[i]; if( sp==0 || sp->type==TERMINAL || sp->destructor==0 ) continue; @@ -3683,20 +3697,6 @@ int mhflag; /* Output in makeheaders format if true */ emit_destructor_code(out,lemp->symbols[i],lemp,&lineno); fprintf(out," break;\n"); lineno++; } - if( lemp->vardest ){ - struct symbol *dflt_sp = 0; - for(i=0; insymbol; i++){ - struct symbol *sp = lemp->symbols[i]; - if( sp==0 || sp->type==TERMINAL || - sp->index<=0 || sp->destructor!=0 ) continue; - fprintf(out," case %d:\n",sp->index); lineno++; - dflt_sp = sp; - } - if( dflt_sp!=0 ){ - emit_destructor_code(out,dflt_sp,lemp,&lineno); - fprintf(out," break;\n"); lineno++; - } - } tplt_xfer(lemp->name,in,out,&lineno); /* Generate code which executes whenever the parser stack overflows */