]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Further improvements to parser speed by enlarging lookup tables to eliminate
authordrh <drh@noemail.net>
Wed, 28 Aug 2019 11:31:11 +0000 (11:31 +0000)
committerdrh <drh@noemail.net>
Wed, 28 Aug 2019 11:31:11 +0000 (11:31 +0000)
the need to do range checking on the index prior to lookup.

FossilOrigin-Name: 47d3e091ae49eb7947af5abef9b5b96b16b86d349e51fe0677795649be6db473

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

index 2e8403bc0f426d83fe5e2d44f1af4d5106bb763b..167921e6c37c93cfcde7e28891819d2cc6f5999b 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-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
+C Further\simprovements\sto\sparser\sspeed\sby\senlarging\slookup\stables\sto\seliminate\nthe\sneed\sto\sdo\srange\schecking\son\sthe\sindex\sprior\sto\slookup.
+D 2019-08-28T11:31:11.959
 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 3b40d248784ada53b1210fb389ebfc149f3043eebcfbe477646430137071798b
-F tool/lempar.c be669a41410f127485e7d52b0c50f5b449c745aa23e06940b9d1a9c9eda58633
+F tool/lemon.c c9848ef9694689d244a5097238ca1f83df85cc52c80ad149a4cf49595a0ee9c2
+F tool/lempar.c 5d1b20f2e9d7d6e3e1f5e1c11dba455c798bf0097634f5aef7c68a1ae7bc7d86
 F tool/libvers.c caafc3b689638a1d88d44bc5f526c2278760d9b9
 F tool/loadfts.c c3c64e4d5e90e8ba41159232c2189dba4be7b862
 F tool/logest.c 11346aa019e2e77a00902aa7d0cabd27bd2e8cca
@@ -1837,10 +1837,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 94085fb3e756bc984237b74b6e29c68462ad860870c64dcb5124feaeec387660
-R 622629c7f73f36222c78d3454b5494fa
-T *branch * lemon-optimization
-T *sym-lemon-optimization *
-T -sym-trunk *
+P bafd872398e58766e996963372c7acc03a1e20a6d39a3867ca45d3ea0ed2ac1d
+R 958bf9b2f74079dc6a59cf74943d64b1
 U drh
-Z 2510adf038772aa7dc037a8992922686
+Z 3fa2b314bcffff2187af5dcc971ba8ee
index 24efefb261656ac57ad67a68947534d56f58bb7d..2c14daf263ef77a8cca5e3aea88a24021848983f 100644 (file)
@@ -1 +1 @@
-bafd872398e58766e996963372c7acc03a1e20a6d39a3867ca45d3ea0ed2ac1d
\ No newline at end of file
+47d3e091ae49eb7947af5abef9b5b96b16b86d349e51fe0677795649be6db473
\ No newline at end of file
index 3daa6d38cf894215f61e61b3632b684f8400ad70..893e1d18b9dcafb851effd335a36ec8240e6861a 100644 (file)
@@ -4506,7 +4506,9 @@ void ReportTable(
   */
   if( lemp->has_fallback ){
     int mx = lemp->nterminal - 1;
-    while( mx>0 && lemp->symbols[mx]->fallback==0 ){ mx--; }
+    /* 2019-08-28:  Generate fallback entries for every token to avoid
+    ** having to do a range check on the index */
+    /* while( mx>0 && lemp->symbols[mx]->fallback==0 ){ mx--; } */
     lemp->tablesize += (mx+1)*szCodeType;
     for(i=0; i<=mx; i++){
       struct symbol *p = lemp->symbols[i];
index baf6a217df89bf74cf525e4a53776b839f2a68cd..9d5b19f465b76d6d1226eb36be1ff43005a4e99f 100644 (file)
@@ -530,8 +530,9 @@ static YYACTIONTYPE yy_find_shift_action(
     if( yy_lookahead[i]!=iLookAhead ){
 #ifdef YYFALLBACK
       YYCODETYPE iFallback;            /* Fallback token */
-      if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
-             && (iFallback = yyFallback[iLookAhead])!=0 ){
+      assert( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0]) );
+      iFallback = yyFallback[iLookAhead];
+      if( iFallback!=0 ){
 #ifndef NDEBUG
         if( yyTraceFILE ){
           fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
@@ -546,16 +547,8 @@ static YYACTIONTYPE yy_find_shift_action(
 #ifdef YYWILDCARD
       {
         int j = i - iLookAhead + YYWILDCARD;
-        if( 
-#if YY_SHIFT_MIN+YYWILDCARD<0
-          j>=0 &&
-#endif
-#if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT
-          j<YY_ACTTAB_COUNT &&
-#endif
-          j<(int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])) &&
-          yy_lookahead[j]==YYWILDCARD && iLookAhead>0
-        ){
+        assert( j<(int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])) );
+        if( yy_lookahead[j]==YYWILDCARD && iLookAhead>0 ){
 #ifndef NDEBUG
           if( yyTraceFILE ){
             fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",