Patch 8.1.0434
Problem:    copy_loclist() is too long.
Solution:   Split in multiple functions. (Yegappan Lakshmanan)
Files:      src/proto/quickfix.pro, src/quickfix.c, src/window.c


*** ../vim-8.1.0433/src/proto/quickfix.pro      2018-07-25 22:36:48.987518583 
+0200
--- src/proto/quickfix.pro      2018-09-25 22:06:03.183095511 +0200
***************
*** 1,7 ****
  /* quickfix.c */
  int qf_init(win_T *wp, char_u *efile, char_u *errorformat, int newlist, 
char_u *qf_title, char_u *enc);
  void qf_free_all(win_T *wp);
! void copy_loclist(win_T *from, win_T *to);
  void qf_jump(qf_info_T *qi, int dir, int errornr, int forceit);
  void qf_list(exarg_T *eap);
  void qf_age(exarg_T *eap);
--- 1,7 ----
  /* quickfix.c */
  int qf_init(win_T *wp, char_u *efile, char_u *errorformat, int newlist, 
char_u *qf_title, char_u *enc);
  void qf_free_all(win_T *wp);
! void copy_loclist_stack(win_T *from, win_T *to);
  void qf_jump(qf_info_T *qi, int dir, int errornr, int forceit);
  void qf_list(exarg_T *eap);
  void qf_age(exarg_T *eap);
*** ../vim-8.1.0433/src/quickfix.c      2018-09-24 21:50:08.932086794 +0200
--- src/quickfix.c      2018-09-25 22:06:03.187095471 +0200
***************
*** 2044,2165 ****
  }
  
  /*
!  * Copy the location list from window "from" to window "to".
   */
      void
! copy_loclist(win_T *from, win_T *to)
  {
      qf_info_T *qi;
      int               idx;
-     int               i;
  
!     /*
!      * When copying from a location list window, copy the referenced
!      * location list. For other windows, copy the location list for
!      * that window.
!      */
      if (IS_LL_WINDOW(from))
        qi = from->w_llist_ref;
      else
        qi = from->w_llist;
  
!     if (qi == NULL)               /* no location list to copy */
        return;
  
!     /* allocate a new location list */
      if ((to->w_llist = ll_new_list()) == NULL)
        return;
  
      to->w_llist->qf_listcount = qi->qf_listcount;
  
!     /* Copy the location lists one at a time */
      for (idx = 0; idx < qi->qf_listcount; ++idx)
      {
-       qf_list_T   *from_qfl;
-       qf_list_T   *to_qfl;
- 
        to->w_llist->qf_curlist = idx;
  
!       from_qfl = &qi->qf_lists[idx];
!       to_qfl = &to->w_llist->qf_lists[idx];
! 
!       /* Some of the fields are populated by qf_add_entry() */
!       to_qfl->qf_nonevalid = from_qfl->qf_nonevalid;
!       to_qfl->qf_count = 0;
!       to_qfl->qf_index = 0;
!       to_qfl->qf_start = NULL;
!       to_qfl->qf_last = NULL;
!       to_qfl->qf_ptr = NULL;
!       if (from_qfl->qf_title != NULL)
!           to_qfl->qf_title = vim_strsave(from_qfl->qf_title);
!       else
!           to_qfl->qf_title = NULL;
!       if (from_qfl->qf_ctx != NULL)
!       {
!           to_qfl->qf_ctx = alloc_tv();
!           if (to_qfl->qf_ctx != NULL)
!               copy_tv(from_qfl->qf_ctx, to_qfl->qf_ctx);
!       }
!       else
!           to_qfl->qf_ctx = NULL;
! 
!       if (from_qfl->qf_count)
!       {
!           qfline_T    *from_qfp;
!           qfline_T    *prevp;
! 
!           /* copy all the location entries in this list */
!           for (i = 0, from_qfp = from_qfl->qf_start;
!                   i < from_qfl->qf_count && from_qfp != NULL;
!                   ++i, from_qfp = from_qfp->qf_next)
!           {
!               if (qf_add_entry(to->w_llist,
!                                to->w_llist->qf_curlist,
!                                NULL,
!                                NULL,
!                                from_qfp->qf_module,
!                                0,
!                                from_qfp->qf_text,
!                                from_qfp->qf_lnum,
!                                from_qfp->qf_col,
!                                from_qfp->qf_viscol,
!                                from_qfp->qf_pattern,
!                                from_qfp->qf_nr,
!                                0,
!                                from_qfp->qf_valid) == FAIL)
!               {
!                   qf_free_all(to);
!                   return;
!               }
!               /*
!                * qf_add_entry() will not set the qf_num field, as the
!                * directory and file names are not supplied. So the qf_fnum
!                * field is copied here.
!                */
!               prevp = to->w_llist->qf_lists[to->w_llist->qf_curlist].qf_last;
!               prevp->qf_fnum = from_qfp->qf_fnum; /* file number */
!               prevp->qf_type = from_qfp->qf_type; /* error type */
!               if (from_qfl->qf_ptr == from_qfp)
!                   to_qfl->qf_ptr = prevp;         /* current location */
!           }
!       }
! 
!       to_qfl->qf_index = from_qfl->qf_index;  /* current index in the list */
! 
!       /* Assign a new ID for the location list */
!       to_qfl->qf_id = ++last_qf_id;
!       to_qfl->qf_changedtick = 0L;
! 
!       /* When no valid entries are present in the list, qf_ptr points to
!        * the first item in the list */
!       if (to_qfl->qf_nonevalid)
        {
!           to_qfl->qf_ptr = to_qfl->qf_start;
!           to_qfl->qf_index = 1;
        }
      }
  
!     to->w_llist->qf_curlist = qi->qf_curlist; /* current list */
  }
  
  /*
--- 2044,2179 ----
  }
  
  /*
!  * Copy location list entries from 'from_qfl' to 'to_qfl'.
!  */
!     static int
! copy_loclist_entries(qf_list_T *from_qfl, qf_list_T *to_qfl, qf_info_T *to_qi)
! {
!     int               i;
!     qfline_T    *from_qfp;
!     qfline_T    *prevp;
! 
!     // copy all the location entries in this list
!     for (i = 0, from_qfp = from_qfl->qf_start;
!           i < from_qfl->qf_count && from_qfp != NULL;
!           ++i, from_qfp = from_qfp->qf_next)
!     {
!       if (qf_add_entry(to_qi,
!                   to_qi->qf_curlist,
!                   NULL,
!                   NULL,
!                   from_qfp->qf_module,
!                   0,
!                   from_qfp->qf_text,
!                   from_qfp->qf_lnum,
!                   from_qfp->qf_col,
!                   from_qfp->qf_viscol,
!                   from_qfp->qf_pattern,
!                   from_qfp->qf_nr,
!                   0,
!                   from_qfp->qf_valid) == FAIL)
!           return FAIL;
! 
!       // qf_add_entry() will not set the qf_num field, as the
!       // directory and file names are not supplied. So the qf_fnum
!       // field is copied here.
!       prevp = to_qfl->qf_last;
!       prevp->qf_fnum = from_qfp->qf_fnum;     // file number
!       prevp->qf_type = from_qfp->qf_type;     // error type
!       if (from_qfl->qf_ptr == from_qfp)
!           to_qfl->qf_ptr = prevp;             // current location
!     }
! 
!     return OK;
! }
! 
! /*
!  * Copy the specified location list 'from_qfl' to 'to_qfl'.
!  */
!     static int
! copy_loclist(qf_list_T *from_qfl, qf_list_T *to_qfl, qf_info_T *to_qi)
! {
!     // Some of the fields are populated by qf_add_entry()
!     to_qfl->qf_nonevalid = from_qfl->qf_nonevalid;
!     to_qfl->qf_count = 0;
!     to_qfl->qf_index = 0;
!     to_qfl->qf_start = NULL;
!     to_qfl->qf_last = NULL;
!     to_qfl->qf_ptr = NULL;
!     if (from_qfl->qf_title != NULL)
!       to_qfl->qf_title = vim_strsave(from_qfl->qf_title);
!     else
!       to_qfl->qf_title = NULL;
!     if (from_qfl->qf_ctx != NULL)
!     {
!       to_qfl->qf_ctx = alloc_tv();
!       if (to_qfl->qf_ctx != NULL)
!           copy_tv(from_qfl->qf_ctx, to_qfl->qf_ctx);
!     }
!     else
!       to_qfl->qf_ctx = NULL;
! 
!     if (from_qfl->qf_count)
!       if (copy_loclist_entries(from_qfl, to_qfl, to_qi) == FAIL)
!           return FAIL;
! 
!     to_qfl->qf_index = from_qfl->qf_index;    // current index in the list
! 
!     // Assign a new ID for the location list
!     to_qfl->qf_id = ++last_qf_id;
!     to_qfl->qf_changedtick = 0L;
! 
!     // When no valid entries are present in the list, qf_ptr points to
!     // the first item in the list
!     if (to_qfl->qf_nonevalid)
!     {
!       to_qfl->qf_ptr = to_qfl->qf_start;
!       to_qfl->qf_index = 1;
!     }
! 
!     return OK;
! }
! 
! /*
!  * Copy the location list stack 'from' window to 'to' window.
   */
      void
! copy_loclist_stack(win_T *from, win_T *to)
  {
      qf_info_T *qi;
      int               idx;
  
!     // When copying from a location list window, copy the referenced
!     // location list. For other windows, copy the location list for
!     // that window.
      if (IS_LL_WINDOW(from))
        qi = from->w_llist_ref;
      else
        qi = from->w_llist;
  
!     if (qi == NULL)               // no location list to copy
        return;
  
!     // allocate a new location list
      if ((to->w_llist = ll_new_list()) == NULL)
        return;
  
      to->w_llist->qf_listcount = qi->qf_listcount;
  
!     // Copy the location lists one at a time
      for (idx = 0; idx < qi->qf_listcount; ++idx)
      {
        to->w_llist->qf_curlist = idx;
  
!       if (copy_loclist(&qi->qf_lists[idx],
!                       &to->w_llist->qf_lists[idx], to->w_llist) == FAIL)
        {
!           qf_free_all(to);
!           return;
        }
      }
  
!     to->w_llist->qf_curlist = qi->qf_curlist; // current list
  }
  
  /*
*** ../vim-8.1.0433/src/window.c        2018-09-13 15:33:39.609712174 +0200
--- src/window.c        2018-09-25 22:06:03.187095471 +0200
***************
*** 1308,1314 ****
        newp->w_llist_ref = NULL;
      }
      else
!       copy_loclist(oldp, newp);
  #endif
      newp->w_localdir = (oldp->w_localdir == NULL)
                                    ? NULL : vim_strsave(oldp->w_localdir);
--- 1308,1314 ----
        newp->w_llist_ref = NULL;
      }
      else
!       copy_loclist_stack(oldp, newp);
  #endif
      newp->w_localdir = (oldp->w_localdir == NULL)
                                    ? NULL : vim_strsave(oldp->w_localdir);
*** ../vim-8.1.0433/src/version.c       2018-09-25 20:48:53.882887698 +0200
--- src/version.c       2018-09-25 22:07:03.802483924 +0200
***************
*** 796,797 ****
--- 796,799 ----
  {   /* Add new patch number below this line */
+ /**/
+     434,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
100. The most exciting sporting events you noticed during summer 1996
    was Netscape vs. Microsoft.

 /// 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