]> granicus.if.org Git - vim/commitdiff
patch 8.1.0901: index in getjumplist() may be wrong v8.1.0901
authorBram Moolenaar <Bram@vim.org>
Tue, 12 Feb 2019 21:15:06 +0000 (22:15 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 12 Feb 2019 21:15:06 +0000 (22:15 +0100)
Problem:    Index in getjumplist() may be wrong. (Epheien)
Solution:   Call cleanup_jumplist() earlier. (Yegappan Lakshmanan,
            closes #3941)

src/evalfunc.c
src/testdir/test_jumplist.vim
src/version.c

index 6982ddfe1a4d92ca15f46c5ea808564c95400361..6538b36d3c42151e0397cd08a6e4e0388b749e62 100644 (file)
@@ -5271,6 +5271,8 @@ f_getjumplist(typval_T *argvars, typval_T *rettv)
     if (wp == NULL)
        return;
 
+    cleanup_jumplist(wp, TRUE);
+
     l = list_alloc();
     if (l == NULL)
        return;
@@ -5279,8 +5281,6 @@ f_getjumplist(typval_T *argvars, typval_T *rettv)
        return;
     list_append_number(rettv->vval.v_list, (varnumber_T)wp->w_jumplistidx);
 
-    cleanup_jumplist(wp, TRUE);
-
     for (i = 0; i < wp->w_jumplistlen; ++i)
     {
        if (wp->w_jumplist[i].fmark.mark.lnum == 0)
index 02dbd76194c1743514c748df0a7f45a0e1ff8c51..be1af5e705f829592dde15abefde20ba642e33e8 100644 (file)
@@ -28,11 +28,13 @@ func Test_getjumplist()
   normal G
   normal gg
 
-  call assert_equal([[
+  let expected = [[
              \ {'lnum': 1, 'bufnr': bnr, 'col': 0, 'coladd': 0},
              \ {'lnum': 50, 'bufnr': bnr, 'col': 0, 'coladd': 0},
-             \ {'lnum': 100, 'bufnr': bnr, 'col': 0, 'coladd': 0}], 4],
-             \ getjumplist())
+             \ {'lnum': 100, 'bufnr': bnr, 'col': 0, 'coladd': 0}], 3]
+  call assert_equal(expected, getjumplist())
+  " jumplist doesn't change in between calls
+  call assert_equal(expected, getjumplist())
 
   " Traverse the jump list and verify the results
   5
@@ -44,12 +46,14 @@ func Test_getjumplist()
   call assert_equal(3, getjumplist()[1])
   exe "normal \<C-O>"
   normal 20%
-  call assert_equal([[
+  let expected = [[
              \ {'lnum': 1, 'bufnr': bnr, 'col': 0, 'coladd': 0},
              \ {'lnum': 50, 'bufnr': bnr, 'col': 0, 'coladd': 0},
              \ {'lnum': 5, 'bufnr': bnr, 'col': 0, 'coladd': 0},
-             \ {'lnum': 100, 'bufnr': bnr, 'col': 0, 'coladd': 0}], 5],
-             \ getjumplist())
+             \ {'lnum': 100, 'bufnr': bnr, 'col': 0, 'coladd': 0}], 4]
+  call assert_equal(expected, getjumplist())
+  " jumplist doesn't change in between calls
+  call assert_equal(expected, getjumplist())
 
   let l = getjumplist()
   call test_garbagecollect_now()
index b02be7c1df6f4d6ffe87baa84674b300d0ca2071..998f259bad16f91c548dcf416e89c8f600d00b63 100644 (file)
@@ -783,6 +783,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    901,
 /**/
     900,
 /**/