changeset 28057:bfa81ded42e2 v8.2.4553

patch 8.2.4553: linear tag search is a bit slow Commit: https://github.com/vim/vim/commit/8b530b3158cbd3aee2ad9cad8e7b7964faabb51e Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Sat Mar 12 17:38:29 2022 +0000 patch 8.2.4553: linear tag search is a bit slow Problem: Linear tag search is a bit slow. Solution: Remove a vim_ftell() call. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/9937)
author Bram Moolenaar <Bram@vim.org>
date Sat, 12 Mar 2022 18:45:03 +0100
parents fa0290f89c7b
children 9aee3c7d10c1
files src/tag.c src/testdir/test_taglist.vim src/version.c
diffstat 3 files changed, 10 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/tag.c
+++ b/src/tag.c
@@ -2092,10 +2092,7 @@ findtags_get_next_line(findtags_state_T 
 		eof = cs_fgets(st->lbuf, st->lbuf_size);
 	    else
 #endif
-	    {
-		sinfo_p->curr_offset = vim_ftell(st->fp);
 		eof = vim_fgets(st->lbuf, st->lbuf_size, st->fp);
-	    }
 	} while (!eof && vim_isblankline(st->lbuf));
 
 	if (eof)
@@ -2850,7 +2847,7 @@ line_read_in:
 		return;
 	    }
 
-	    if (st->state == TS_STEP_FORWARD)
+	    if (st->state == TS_STEP_FORWARD || st->state == TS_LINEAR)
 		// Seek to the same position to read the same line again
 		vim_ignored = vim_fseek(st->fp, search_info.curr_offset,
 								     SEEK_SET);
--- a/src/testdir/test_taglist.vim
+++ b/src/testdir/test_taglist.vim
@@ -259,8 +259,15 @@ func Test_tag_complete_with_overlong_lin
   call writefile(tagslines, 'Xtags')
   set tags=Xtags
 
+  " try with binary search
+  set tagbsearch
   call feedkeys(":tag inbou\<C-A>\<C-B>\"\<CR>", 'xt')
   call assert_equal('"tag inboundGSV inboundGovernor inboundGovernorCounters', @:)
+  " try with linear search
+  set notagbsearch
+  call feedkeys(":tag inbou\<C-A>\<C-B>\"\<CR>", 'xt')
+  call assert_equal('"tag inboundGSV inboundGovernor inboundGovernorCounters', @:)
+  set tagbsearch&
 
   call delete('Xtags')
   set tags&
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4553,
+/**/
     4552,
 /**/
     4551,