]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 7.4.1940 v7.4.1940
authorBram Moolenaar <Bram@vim.org>
Wed, 15 Jun 2016 20:03:48 +0000 (22:03 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 15 Jun 2016 20:03:48 +0000 (22:03 +0200)
Problem:    "gd" hangs in some situations. (Eric Biggers)
Solution:   Remove the SEARCH_START flag when looping.  Add a test.

src/normal.c
src/testdir/test_goto.vim
src/version.c

index d9948ec5943bf9deaf6ee0fbdc336d2b63c229bd..c0a54b6cbd3343b908ee3953e70791508271d342 100644 (file)
@@ -4250,7 +4250,7 @@ find_decl(
     int                len,
     int                locally,
     int                thisblock,
-    int                searchflags)    /* flags passed to searchit() */
+    int                flags_arg)      /* flags passed to searchit() */
 {
     char_u     *pat;
     pos_T      old_pos;
@@ -4261,6 +4261,7 @@ find_decl(
     int                save_p_scs;
     int                retval = OK;
     int                incll;
+    int                searchflags = flags_arg;
 
     if ((pat = alloc(len + 7)) == NULL)
        return FAIL;
@@ -4346,8 +4347,10 @@ find_decl(
 
        /* For finding a local variable and the match is before the "{" search
         * to find a later match.  For K&R style function declarations this
-        * skips the function header without types. */
+        * skips the function header without types.  Remove SEARCH_START from
+        * flags to avoid getting stuck at one position. */
        found_pos = curwin->w_cursor;
+       searchflags &= ~SEARCH_START;
     }
 
     if (t == FAIL)
index fb8f190fa6f790e417a659debbe9147bce7d071a..2afd96b2960627242f34f6c56e0fe2b3c9e4db58 100644 (file)
@@ -1,6 +1,6 @@
 " Test commands that jump somewhere.
 
-func Test_geedee()
+func Test_geeDEE()
   new
   call setline(1, ["Filename x;", "", "int Filename", "int func() {", "Filename y;"])
   /y;/
@@ -8,3 +8,13 @@ func Test_geedee()
   call assert_equal(1, line('.'))
   quit!
 endfunc
+
+func Test_gee_dee()
+  new
+  call setline(1, ["int x;", "", "int func(int x)", "{", "  return x;", "}"])
+  /return/
+  normal $hgd
+  call assert_equal(3, line('.'))
+  call assert_equal(14, col('.'))
+  quit!
+endfunc
index 9608a7e553cc26197ef675fd53c7e902658c62f2..f72ad1858ffa93ed72dc00bdbab8c3eabf6b040e 100644 (file)
@@ -753,6 +753,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1940,
 /**/
     1939,
 /**/