From 23c60f21b07b04351d846e6fbf4f4abd9aa09345 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 15 Jun 2016 22:03:48 +0200 Subject: [PATCH] patch 7.4.1940 Problem: "gd" hangs in some situations. (Eric Biggers) Solution: Remove the SEARCH_START flag when looping. Add a test. --- src/normal.c | 7 +++++-- src/testdir/test_goto.vim | 12 +++++++++++- src/version.c | 2 ++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/normal.c b/src/normal.c index d9948ec59..c0a54b6cb 100644 --- a/src/normal.c +++ b/src/normal.c @@ -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) diff --git a/src/testdir/test_goto.vim b/src/testdir/test_goto.vim index fb8f190fa..2afd96b29 100644 --- a/src/testdir/test_goto.vim +++ b/src/testdir/test_goto.vim @@ -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 diff --git a/src/version.c b/src/version.c index 9608a7e55..f72ad1858 100644 --- a/src/version.c +++ b/src/version.c @@ -753,6 +753,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1940, /**/ 1939, /**/ -- 2.50.1