]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Increase the size of the yy_lookahead table so that it is never necessary to
authordrh <drh@noemail.net>
Wed, 28 Aug 2019 02:09:47 +0000 (02:09 +0000)
committerdrh <drh@noemail.net>
Wed, 28 Aug 2019 02:09:47 +0000 (02:09 +0000)
down bounds checking on the index.

FossilOrigin-Name: bafd872398e58766e996963372c7acc03a1e20a6d39a3867ca45d3ea0ed2ac1d

manifest
manifest.uuid
tool/lemon.c
tool/lempar.c

index e3c0e4ca6c528893fa2f3042a9cd802bee809445..2e8403bc0f426d83fe5e2d44f1af4d5106bb763b 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\ssupport\sfor\s"ORDER\sBY\s...\sNULLS\sFIRST"\sand\s"ORDER\sBY\s...\sNULLS\sLAST".\sUse\sthis\sto\sfix\sticket\s[f8a7060e].
-D 2019-08-27T19:59:21.714
+C Increase\sthe\ssize\sof\sthe\syy_lookahead\stable\sso\sthat\sit\sis\snever\snecessary\sto\ndown\sbounds\schecking\son\sthe\sindex.
+D 2019-08-28T02:09:47.441
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -1756,8 +1756,8 @@ F tool/genfkey.test b6afd7b825d797a1e1274f519ab5695373552ecad5cd373530c63533638a
 F tool/getlock.c f4c39b651370156cae979501a7b156bdba50e7ce
 F tool/index_usage.c 9ec344d29cbeb03fdc0fce668eedfb7495792170de933adf95cf8d6904a166ad
 F tool/kvtest-speed.sh 4761a9c4b3530907562314d7757995787f7aef8f
-F tool/lemon.c cc43148d2793ab93668e74a6a6319bb71c2e65c1ffcd6deeaa59e12be9362a43
-F tool/lempar.c 4b868d0a5eb9a67cd1b546274227c0d449dad073c663b331b686fa2253e1c86f
+F tool/lemon.c 3b40d248784ada53b1210fb389ebfc149f3043eebcfbe477646430137071798b
+F tool/lempar.c be669a41410f127485e7d52b0c50f5b449c745aa23e06940b9d1a9c9eda58633
 F tool/libvers.c caafc3b689638a1d88d44bc5f526c2278760d9b9
 F tool/loadfts.c c3c64e4d5e90e8ba41159232c2189dba4be7b862
 F tool/logest.c 11346aa019e2e77a00902aa7d0cabd27bd2e8cca
@@ -1837,8 +1837,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 336235db2b1167cdb2feb64b47eb6368c97c43ee9641b7bfccc5775a41dd0d0e ad816d01d4bd3908ff2c574d79d1a29b6d732df308f2f1b1cdf7c0bc7c1bd7cf
-R 5139358becb963924affc3638fcd0d5e
-T +closed ad816d01d4bd3908ff2c574d79d1a29b6d732df308f2f1b1cdf7c0bc7c1bd7cf
-U dan
-Z 534b1b1d3945585b80108a8c2d91a394
+P 94085fb3e756bc984237b74b6e29c68462ad860870c64dcb5124feaeec387660
+R 622629c7f73f36222c78d3454b5494fa
+T *branch * lemon-optimization
+T *sym-lemon-optimization *
+T -sym-trunk *
+U drh
+Z 2510adf038772aa7dc037a8992922686
index 12718058d18858927499e8aa76cc0fd32a725d9f..24efefb261656ac57ad67a68947534d56f58bb7d 100644 (file)
@@ -1 +1 @@
-94085fb3e756bc984237b74b6e29c68462ad860870c64dcb5124feaeec387660
\ No newline at end of file
+bafd872398e58766e996963372c7acc03a1e20a6d39a3867ca45d3ea0ed2ac1d
\ No newline at end of file
index 4416f67bb2ee2e097100b6eb05d1860f42484096..3daa6d38cf894215f61e61b3632b684f8400ad70 100644 (file)
@@ -4153,6 +4153,7 @@ void ReportTable(
   struct rule *rp;
   struct acttab *pActtab;
   int i, j, n, sz;
+  int nLookAhead;
   int szActionType;     /* sizeof(YYACTIONTYPE) */
   int szCodeType;       /* sizeof(YYCODETYPE)   */
   const char *name;
@@ -4403,13 +4404,29 @@ void ReportTable(
     if( la<0 ) la = lemp->nsymbol;
     if( j==0 ) fprintf(out," /* %5d */ ", i);
     fprintf(out, " %4d,", la);
-    if( j==9 || i==n-1 ){
+    if( j==9 ){
+      fprintf(out, "\n"); lineno++;
+      j = 0;
+    }else{
+      j++;
+    }
+  }
+  /* Add extra entries to the end of the yy_lookahead[] table so that
+  ** yy_shift_ofst[]+iToken will always be a valid index into the array,
+  ** even for the largest possible value of yy_shift_ofst[] and iToken. */
+  nLookAhead = lemp->nterminal + lemp->nactiontab;
+  while( i<nLookAhead ){
+    if( j==0 ) fprintf(out," /* %5d */ ", i);
+    fprintf(out, " %4d,", lemp->nterminal);
+    if( j==9 ){
       fprintf(out, "\n"); lineno++;
       j = 0;
     }else{
       j++;
     }
+    i++;
   }
+  if( j>0 ) fprintf(out, "\n"); lineno++;
   fprintf(out, "};\n"); lineno++;
 
   /* Output the yy_shift_ofst[] table */
index 1c088080d430e382ef6301ad039365cdf5cac071..baf6a217df89bf74cf525e4a53776b839f2a68cd 100644 (file)
@@ -521,11 +521,13 @@ static YYACTIONTYPE yy_find_shift_action(
   do{
     i = yy_shift_ofst[stateno];
     assert( i>=0 );
-    /* assert( i+YYNTOKEN<=(int)YY_NLOOKAHEAD ); */
+    assert( i<=YY_ACTTAB_COUNT );
+    assert( i+YYNTOKEN<=(int)YY_NLOOKAHEAD );
     assert( iLookAhead!=YYNOCODE );
     assert( iLookAhead < YYNTOKEN );
     i += iLookAhead;
-    if( i>=YY_NLOOKAHEAD || yy_lookahead[i]!=iLookAhead ){
+    assert( i<(int)YY_NLOOKAHEAD );
+    if( yy_lookahead[i]!=iLookAhead ){
 #ifdef YYFALLBACK
       YYCODETYPE iFallback;            /* Fallback token */
       if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])