Patch 7.4.1940
Problem:    "gd" hangs in some situations. (Eric Biggers)
Solution:   Remove the SEARCH_START flag when looping.  Add a test.
Files:      src/normal.c, src/testdir/test_goto.vim


*** ../vim-7.4.1939/src/normal.c        2016-05-24 10:46:41.655541832 +0200
--- src/normal.c        2016-06-15 21:58:13.712716993 +0200
***************
*** 4250,4256 ****
      int               len,
      int               locally,
      int               thisblock,
!     int               searchflags)    /* flags passed to searchit() */
  {
      char_u    *pat;
      pos_T     old_pos;
--- 4250,4256 ----
      int               len,
      int               locally,
      int               thisblock,
!     int               flags_arg)      /* flags passed to searchit() */
  {
      char_u    *pat;
      pos_T     old_pos;
***************
*** 4261,4266 ****
--- 4261,4267 ----
      int               save_p_scs;
      int               retval = OK;
      int               incll;
+     int               searchflags = flags_arg;
  
      if ((pat = alloc(len + 7)) == NULL)
        return FAIL;
***************
*** 4346,4353 ****
  
        /* 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. */
        found_pos = curwin->w_cursor;
      }
  
      if (t == FAIL)
--- 4347,4356 ----
  
        /* 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.  Remove SEARCH_START from
!        * flags to avoid getting stuck at one position. */
        found_pos = curwin->w_cursor;
+       searchflags &= ~SEARCH_START;
      }
  
      if (t == FAIL)
*** ../vim-7.4.1939/src/testdir/test_goto.vim   2016-04-16 09:13:31.538407268 
+0200
--- src/testdir/test_goto.vim   2016-06-15 21:58:47.884349679 +0200
***************
*** 1,6 ****
  " Test commands that jump somewhere.
  
! func Test_geedee()
    new
    call setline(1, ["Filename x;", "", "int Filename", "int func() {", 
"Filename y;"])
    /y;/
--- 1,6 ----
  " Test commands that jump somewhere.
  
! func Test_geeDEE()
    new
    call setline(1, ["Filename x;", "", "int Filename", "int func() {", 
"Filename y;"])
    /y;/
***************
*** 8,10 ****
--- 8,20 ----
    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
*** ../vim-7.4.1939/src/version.c       2016-06-15 21:44:47.645388277 +0200
--- src/version.c       2016-06-15 22:02:57.569666438 +0200
***************
*** 755,756 ****
--- 755,758 ----
  {   /* Add new patch number below this line */
+ /**/
+     1940,
  /**/

-- 
>From "know your smileys":
 <|-) Chinese
 <|-( Chinese and doesn't like these kind of jokes

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui