Patch 8.1.0330
Problem:    The qf_add_entries() function is too long.
Solution:   Split in two parts. (Yegappan Lakshmanan)
Files:      src/quickfix.c


*** ../vim-8.1.0329/src/quickfix.c      2018-08-21 21:58:09.524674714 +0200
--- src/quickfix.c      2018-08-28 22:05:22.995585778 +0200
***************
*** 5997,6002 ****
--- 5997,6079 ----
  }
  
  /*
+  * Add a new quickfix entry to list at 'qf_idx' in the stack 'qi' from the
+  * items in the dict 'd'.
+  */
+     static int
+ qf_add_entry_from_dict(
+       qf_info_T       *qi,
+       int             qf_idx,
+       dict_T          *d,
+       int             first_entry)
+ {
+     static int        did_bufnr_emsg;
+     char_u    *filename, *module, *pattern, *text, *type;
+     int               bufnum, valid, status, col, vcol, nr;
+     long      lnum;
+ 
+     if (first_entry)
+       did_bufnr_emsg = FALSE;
+ 
+     filename = get_dict_string(d, (char_u *)"filename", TRUE);
+     module = get_dict_string(d, (char_u *)"module", TRUE);
+     bufnum = (int)get_dict_number(d, (char_u *)"bufnr");
+     lnum = (int)get_dict_number(d, (char_u *)"lnum");
+     col = (int)get_dict_number(d, (char_u *)"col");
+     vcol = (int)get_dict_number(d, (char_u *)"vcol");
+     nr = (int)get_dict_number(d, (char_u *)"nr");
+     type = get_dict_string(d, (char_u *)"type", TRUE);
+     pattern = get_dict_string(d, (char_u *)"pattern", TRUE);
+     text = get_dict_string(d, (char_u *)"text", TRUE);
+     if (text == NULL)
+       text = vim_strsave((char_u *)"");
+ 
+     valid = TRUE;
+     if ((filename == NULL && bufnum == 0) || (lnum == 0 && pattern == NULL))
+       valid = FALSE;
+ 
+     // Mark entries with non-existing buffer number as not valid. Give the
+     // error message only once.
+     if (bufnum != 0 && (buflist_findnr(bufnum) == NULL))
+     {
+       if (!did_bufnr_emsg)
+       {
+           did_bufnr_emsg = TRUE;
+           EMSGN(_("E92: Buffer %ld not found"), bufnum);
+       }
+       valid = FALSE;
+       bufnum = 0;
+     }
+ 
+     // If the 'valid' field is present it overrules the detected value.
+     if ((dict_find(d, (char_u *)"valid", -1)) != NULL)
+       valid = (int)get_dict_number(d, (char_u *)"valid");
+ 
+     status =  qf_add_entry(qi,
+                       qf_idx,
+                       NULL,           // dir
+                       filename,
+                       module,
+                       bufnum,
+                       text,
+                       lnum,
+                       col,
+                       vcol,           // vis_col
+                       pattern,        // search pattern
+                       nr,
+                       type == NULL ? NUL : *type,
+                       valid);
+ 
+     vim_free(filename);
+     vim_free(module);
+     vim_free(pattern);
+     vim_free(text);
+     vim_free(type);
+ 
+     return status;
+ }
+ 
+ /*
   * Add list of entries to quickfix/location list. Each list entry is
   * a dictionary with item information.
   */
***************
*** 6010,6024 ****
  {
      listitem_T        *li;
      dict_T    *d;
-     char_u    *filename, *module, *pattern, *text, *type;
-     int               bufnum;
-     long      lnum;
-     int               col, nr;
-     int               vcol;
      qfline_T  *old_last = NULL;
-     int               valid, status;
      int               retval = OK;
-     int               did_bufnr_emsg = FALSE;
  
      if (action == ' ' || qf_idx == qi->qf_listcount)
      {
--- 6087,6094 ----
***************
*** 6044,6109 ****
        if (d == NULL)
            continue;
  
!       filename = get_dict_string(d, (char_u *)"filename", TRUE);
!       module = get_dict_string(d, (char_u *)"module", TRUE);
!       bufnum = (int)get_dict_number(d, (char_u *)"bufnr");
!       lnum = (int)get_dict_number(d, (char_u *)"lnum");
!       col = (int)get_dict_number(d, (char_u *)"col");
!       vcol = (int)get_dict_number(d, (char_u *)"vcol");
!       nr = (int)get_dict_number(d, (char_u *)"nr");
!       type = get_dict_string(d, (char_u *)"type", TRUE);
!       pattern = get_dict_string(d, (char_u *)"pattern", TRUE);
!       text = get_dict_string(d, (char_u *)"text", TRUE);
!       if (text == NULL)
!           text = vim_strsave((char_u *)"");
! 
!       valid = TRUE;
!       if ((filename == NULL && bufnum == 0) || (lnum == 0 && pattern == NULL))
!           valid = FALSE;
! 
!       /* Mark entries with non-existing buffer number as not valid. Give the
!        * error message only once. */
!       if (bufnum != 0 && (buflist_findnr(bufnum) == NULL))
!       {
!           if (!did_bufnr_emsg)
!           {
!               did_bufnr_emsg = TRUE;
!               EMSGN(_("E92: Buffer %ld not found"), bufnum);
!           }
!           valid = FALSE;
!           bufnum = 0;
!       }
! 
!       /* If the 'valid' field is present it overrules the detected value. */
!       if ((dict_find(d, (char_u *)"valid", -1)) != NULL)
!           valid = (int)get_dict_number(d, (char_u *)"valid");
! 
!       status =  qf_add_entry(qi,
!                              qf_idx,
!                              NULL,        /* dir */
!                              filename,
!                              module,
!                              bufnum,
!                              text,
!                              lnum,
!                              col,
!                              vcol,        /* vis_col */
!                              pattern,     /* search pattern */
!                              nr,
!                              type == NULL ? NUL : *type,
!                              valid);
! 
!       vim_free(filename);
!       vim_free(module);
!       vim_free(pattern);
!       vim_free(text);
!       vim_free(type);
! 
!       if (status == FAIL)
!       {
!           retval = FAIL;
            break;
-       }
      }
  
      if (qi->qf_lists[qf_idx].qf_index == 0)
--- 6114,6122 ----
        if (d == NULL)
            continue;
  
!       retval = qf_add_entry_from_dict(qi, qf_idx, d, li == list->lv_first);
!       if (retval == FAIL)
            break;
      }
  
      if (qi->qf_lists[qf_idx].qf_index == 0)
*** ../vim-8.1.0329/src/version.c       2018-08-27 23:24:13.064009239 +0200
--- src/version.c       2018-08-28 22:06:20.577141281 +0200
***************
*** 796,797 ****
--- 796,799 ----
  {   /* Add new patch number below this line */
+ /**/
+     330,
  /**/

-- 
An alien life briefly visits earth.  Just before departing it leaves a
message in the dust on the back of a white van.  The world is shocked
and wants to know what it means.  After months of studies the worlds
best linguistic scientists are able to decipher the message: "Wash me!".

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