Patch 8.1.1742
Problem:    Still some match functions in evalfunc.c.
Solution:   Move them to highlight.c.
Files:      src/evalfunc.c, src/highlight.c, src/proto/highlight.pro,
            src/ex_docmd.c


*** ../vim-8.1.1741/src/evalfunc.c      2019-07-24 14:59:42.267465100 +0200
--- src/evalfunc.c      2019-07-24 15:54:16.194531096 +0200
***************
*** 74,80 ****
  static void f_char2nr(typval_T *argvars, typval_T *rettv);
  static void f_chdir(typval_T *argvars, typval_T *rettv);
  static void f_cindent(typval_T *argvars, typval_T *rettv);
- static void f_clearmatches(typval_T *argvars, typval_T *rettv);
  static void f_col(typval_T *argvars, typval_T *rettv);
  #if defined(FEAT_INS_EXPAND)
  static void f_complete(typval_T *argvars, typval_T *rettv);
--- 74,79 ----
***************
*** 314,320 ****
  static void f_setfperm(typval_T *argvars, typval_T *rettv);
  static void f_setline(typval_T *argvars, typval_T *rettv);
  static void f_setloclist(typval_T *argvars, typval_T *rettv);
- static void f_setmatches(typval_T *argvars, typval_T *rettv);
  static void f_setpos(typval_T *argvars, typval_T *rettv);
  static void f_setqflist(typval_T *argvars, typval_T *rettv);
  static void f_setreg(typval_T *argvars, typval_T *rettv);
--- 313,318 ----
***************
*** 2209,2228 ****
  }
  
  /*
-  * "clearmatches()" function
-  */
-     static void
- f_clearmatches(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
- {
- #ifdef FEAT_SEARCH_EXTRA
-     win_T   *win = get_optional_window(argvars, 0);
- 
-     if (win != NULL)
-       clear_matches(win);
- #endif
- }
- 
- /*
   * "col(string)" function
   */
      static void
--- 2207,2212 ----
***************
*** 10741,10860 ****
  }
  
  /*
-  * "setmatches()" function
-  */
-     static void
- f_setmatches(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
- {
- #ifdef FEAT_SEARCH_EXTRA
-     list_T    *l;
-     listitem_T        *li;
-     dict_T    *d;
-     list_T    *s = NULL;
-     win_T     *win = get_optional_window(argvars, 1);
- 
-     rettv->vval.v_number = -1;
-     if (argvars[0].v_type != VAR_LIST)
-     {
-       emsg(_(e_listreq));
-       return;
-     }
-     if (win == NULL)
-       return;
- 
-     if ((l = argvars[0].vval.v_list) != NULL)
-     {
-       /* To some extent make sure that we are dealing with a list from
-        * "getmatches()". */
-       li = l->lv_first;
-       while (li != NULL)
-       {
-           if (li->li_tv.v_type != VAR_DICT
-                   || (d = li->li_tv.vval.v_dict) == NULL)
-           {
-               emsg(_(e_invarg));
-               return;
-           }
-           if (!(dict_find(d, (char_u *)"group", -1) != NULL
-                       && (dict_find(d, (char_u *)"pattern", -1) != NULL
-                           || dict_find(d, (char_u *)"pos1", -1) != NULL)
-                       && dict_find(d, (char_u *)"priority", -1) != NULL
-                       && dict_find(d, (char_u *)"id", -1) != NULL))
-           {
-               emsg(_(e_invarg));
-               return;
-           }
-           li = li->li_next;
-       }
- 
-       clear_matches(win);
-       li = l->lv_first;
-       while (li != NULL)
-       {
-           int         i = 0;
-           char        buf[30];  // use 30 to avoid compiler warning
-           dictitem_T  *di;
-           char_u      *group;
-           int         priority;
-           int         id;
-           char_u      *conceal;
- 
-           d = li->li_tv.vval.v_dict;
-           if (dict_find(d, (char_u *)"pattern", -1) == NULL)
-           {
-               if (s == NULL)
-               {
-                   s = list_alloc();
-                   if (s == NULL)
-                       return;
-               }
- 
-               /* match from matchaddpos() */
-               for (i = 1; i < 9; i++)
-               {
-                   sprintf((char *)buf, (char *)"pos%d", i);
-                   if ((di = dict_find(d, (char_u *)buf, -1)) != NULL)
-                   {
-                       if (di->di_tv.v_type != VAR_LIST)
-                           return;
- 
-                       list_append_tv(s, &di->di_tv);
-                       s->lv_refcount++;
-                   }
-                   else
-                       break;
-               }
-           }
- 
-           group = dict_get_string(d, (char_u *)"group", TRUE);
-           priority = (int)dict_get_number(d, (char_u *)"priority");
-           id = (int)dict_get_number(d, (char_u *)"id");
-           conceal = dict_find(d, (char_u *)"conceal", -1) != NULL
-                             ? dict_get_string(d, (char_u *)"conceal", TRUE)
-                             : NULL;
-           if (i == 0)
-           {
-               match_add(win, group,
-                   dict_get_string(d, (char_u *)"pattern", FALSE),
-                   priority, id, NULL, conceal);
-           }
-           else
-           {
-               match_add(win, group, NULL, priority, id, s, conceal);
-               list_unref(s);
-               s = NULL;
-           }
-           vim_free(group);
-           vim_free(conceal);
- 
-           li = li->li_next;
-       }
-       rettv->vval.v_number = 0;
-     }
- #endif
- }
- 
- /*
   * "setpos()" function
   */
      static void
--- 10725,10730 ----
*** ../vim-8.1.1741/src/highlight.c     2019-07-24 15:28:02.428878172 +0200
--- src/highlight.c     2019-07-24 15:59:30.638324304 +0200
***************
*** 3664,3670 ****
   * If no particular ID is desired, -1 must be specified for 'id'.
   * Return ID of added match, -1 on failure.
   */
!     int
  match_add(
      win_T     *wp,
      char_u    *grp,
--- 3664,3670 ----
   * If no particular ID is desired, -1 must be specified for 'id'.
   * Return ID of added match, -1 on failure.
   */
!     static int
  match_add(
      win_T     *wp,
      char_u    *grp,
***************
*** 3862,3868 ****
   * Delete match with ID 'id' in the match list of window 'wp'.
   * Print error messages if 'perr' is TRUE.
   */
!     int
  match_delete(win_T *wp, int id, int perr)
  {
      matchitem_T       *cur = wp->w_match_head;
--- 3862,3868 ----
   * Delete match with ID 'id' in the match list of window 'wp'.
   * Print error messages if 'perr' is TRUE.
   */
!     static int
  match_delete(win_T *wp, int id, int perr)
  {
      matchitem_T       *cur = wp->w_match_head;
***************
*** 3939,3945 ****
   * Get match from ID 'id' in window 'wp'.
   * Return NULL if match not found.
   */
!     matchitem_T *
  get_match(win_T *wp, int id)
  {
      matchitem_T *cur = wp->w_match_head;
--- 3939,3945 ----
   * Get match from ID 'id' in window 'wp'.
   * Return NULL if match not found.
   */
!     static matchitem_T *
  get_match(win_T *wp, int id)
  {
      matchitem_T *cur = wp->w_match_head;
***************
*** 3982,3987 ****
--- 3982,4001 ----
  #endif
  
  /*
+  * "clearmatches()" function
+  */
+     void
+ f_clearmatches(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
+ {
+ #ifdef FEAT_SEARCH_EXTRA
+     win_T   *win = get_optional_window(argvars, 0);
+ 
+     if (win != NULL)
+       clear_matches(win);
+ #endif
+ }
+ 
+ /*
   * "getmatches()" function
   */
      void
***************
*** 4050,4055 ****
--- 4064,4183 ----
  }
  
  /*
+  * "setmatches()" function
+  */
+     void
+ f_setmatches(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
+ {
+ #ifdef FEAT_SEARCH_EXTRA
+     list_T    *l;
+     listitem_T        *li;
+     dict_T    *d;
+     list_T    *s = NULL;
+     win_T     *win = get_optional_window(argvars, 1);
+ 
+     rettv->vval.v_number = -1;
+     if (argvars[0].v_type != VAR_LIST)
+     {
+       emsg(_(e_listreq));
+       return;
+     }
+     if (win == NULL)
+       return;
+ 
+     if ((l = argvars[0].vval.v_list) != NULL)
+     {
+       /* To some extent make sure that we are dealing with a list from
+        * "getmatches()". */
+       li = l->lv_first;
+       while (li != NULL)
+       {
+           if (li->li_tv.v_type != VAR_DICT
+                   || (d = li->li_tv.vval.v_dict) == NULL)
+           {
+               emsg(_(e_invarg));
+               return;
+           }
+           if (!(dict_find(d, (char_u *)"group", -1) != NULL
+                       && (dict_find(d, (char_u *)"pattern", -1) != NULL
+                           || dict_find(d, (char_u *)"pos1", -1) != NULL)
+                       && dict_find(d, (char_u *)"priority", -1) != NULL
+                       && dict_find(d, (char_u *)"id", -1) != NULL))
+           {
+               emsg(_(e_invarg));
+               return;
+           }
+           li = li->li_next;
+       }
+ 
+       clear_matches(win);
+       li = l->lv_first;
+       while (li != NULL)
+       {
+           int         i = 0;
+           char        buf[30];  // use 30 to avoid compiler warning
+           dictitem_T  *di;
+           char_u      *group;
+           int         priority;
+           int         id;
+           char_u      *conceal;
+ 
+           d = li->li_tv.vval.v_dict;
+           if (dict_find(d, (char_u *)"pattern", -1) == NULL)
+           {
+               if (s == NULL)
+               {
+                   s = list_alloc();
+                   if (s == NULL)
+                       return;
+               }
+ 
+               /* match from matchaddpos() */
+               for (i = 1; i < 9; i++)
+               {
+                   sprintf((char *)buf, (char *)"pos%d", i);
+                   if ((di = dict_find(d, (char_u *)buf, -1)) != NULL)
+                   {
+                       if (di->di_tv.v_type != VAR_LIST)
+                           return;
+ 
+                       list_append_tv(s, &di->di_tv);
+                       s->lv_refcount++;
+                   }
+                   else
+                       break;
+               }
+           }
+ 
+           group = dict_get_string(d, (char_u *)"group", TRUE);
+           priority = (int)dict_get_number(d, (char_u *)"priority");
+           id = (int)dict_get_number(d, (char_u *)"id");
+           conceal = dict_find(d, (char_u *)"conceal", -1) != NULL
+                             ? dict_get_string(d, (char_u *)"conceal", TRUE)
+                             : NULL;
+           if (i == 0)
+           {
+               match_add(win, group,
+                   dict_get_string(d, (char_u *)"pattern", FALSE),
+                   priority, id, NULL, conceal);
+           }
+           else
+           {
+               match_add(win, group, NULL, priority, id, s, conceal);
+               list_unref(s);
+               s = NULL;
+           }
+           vim_free(group);
+           vim_free(conceal);
+ 
+           li = li->li_next;
+       }
+       rettv->vval.v_number = 0;
+     }
+ #endif
+ }
+ 
+ /*
   * "matchadd()" function
   */
      void
***************
*** 4198,4200 ****
--- 4326,4400 ----
  # endif
  }
  #endif
+ 
+ #if defined(FEAT_SEARCH_EXTRA) || defined(PROTO)
+ /*
+  * ":[N]match {group} {pattern}"
+  * Sets nextcmd to the start of the next command, if any.  Also called when
+  * skipping commands to find the next command.
+  */
+     void
+ ex_match(exarg_T *eap)
+ {
+     char_u    *p;
+     char_u    *g = NULL;
+     char_u    *end;
+     int               c;
+     int               id;
+ 
+     if (eap->line2 <= 3)
+       id = eap->line2;
+     else
+     {
+       emsg(_(e_invcmd));
+       return;
+     }
+ 
+     /* First clear any old pattern. */
+     if (!eap->skip)
+       match_delete(curwin, id, FALSE);
+ 
+     if (ends_excmd(*eap->arg))
+       end = eap->arg;
+     else if ((STRNICMP(eap->arg, "none", 4) == 0
+               && (VIM_ISWHITE(eap->arg[4]) || ends_excmd(eap->arg[4]))))
+       end = eap->arg + 4;
+     else
+     {
+       p = skiptowhite(eap->arg);
+       if (!eap->skip)
+           g = vim_strnsave(eap->arg, (int)(p - eap->arg));
+       p = skipwhite(p);
+       if (*p == NUL)
+       {
+           /* There must be two arguments. */
+           vim_free(g);
+           semsg(_(e_invarg2), eap->arg);
+           return;
+       }
+       end = skip_regexp(p + 1, *p, TRUE, NULL);
+       if (!eap->skip)
+       {
+           if (*end != NUL && !ends_excmd(*skipwhite(end + 1)))
+           {
+               vim_free(g);
+               eap->errmsg = e_trailing;
+               return;
+           }
+           if (*end != *p)
+           {
+               vim_free(g);
+               semsg(_(e_invarg2), p);
+               return;
+           }
+ 
+           c = *end;
+           *end = NUL;
+           match_add(curwin, g, p + 1, 10, id, NULL, NULL);
+           vim_free(g);
+           *end = c;
+       }
+     }
+     eap->nextcmd = find_nextcmd(end);
+ }
+ #endif
*** ../vim-8.1.1741/src/proto/highlight.pro     2019-07-22 23:03:53.322360395 
+0200
--- src/proto/highlight.pro     2019-07-24 15:59:43.238299118 +0200
***************
*** 43,55 ****
  char_u *get_highlight_name(expand_T *xp, int idx);
  char_u *get_highlight_name_ext(expand_T *xp, int idx, int skip_cleared);
  void free_highlight_fonts(void);
- int match_add(win_T *wp, char_u *grp, char_u *pat, int prio, int id, list_T 
*pos_list, char_u *conceal_char);
- int match_delete(win_T *wp, int id, int perr);
  void clear_matches(win_T *wp);
! matchitem_T *get_match(win_T *wp, int id);
  void f_getmatches(typval_T *argvars, typval_T *rettv);
  void f_matchadd(typval_T *argvars, typval_T *rettv);
  void f_matchaddpos(typval_T *argvars, typval_T *rettv);
  void f_matcharg(typval_T *argvars, typval_T *rettv);
  void f_matchdelete(typval_T *argvars, typval_T *rettv);
  /* vim: set ft=c : */
--- 43,55 ----
  char_u *get_highlight_name(expand_T *xp, int idx);
  char_u *get_highlight_name_ext(expand_T *xp, int idx, int skip_cleared);
  void free_highlight_fonts(void);
  void clear_matches(win_T *wp);
! void f_clearmatches(typval_T *argvars, typval_T *rettv);
  void f_getmatches(typval_T *argvars, typval_T *rettv);
+ void f_setmatches(typval_T *argvars, typval_T *rettv);
  void f_matchadd(typval_T *argvars, typval_T *rettv);
  void f_matchaddpos(typval_T *argvars, typval_T *rettv);
  void f_matcharg(typval_T *argvars, typval_T *rettv);
  void f_matchdelete(typval_T *argvars, typval_T *rettv);
+ void ex_match(exarg_T *eap);
  /* vim: set ft=c : */
*** ../vim-8.1.1741/src/ex_docmd.c      2019-07-21 19:25:16.654609424 +0200
--- src/ex_docmd.c      2019-07-24 15:57:57.482460115 +0200
***************
*** 339,345 ****
  #endif
  #ifdef FEAT_SEARCH_EXTRA
  static void   ex_nohlsearch(exarg_T *eap);
- static void   ex_match(exarg_T *eap);
  #else
  # define ex_nohlsearch                ex_ni
  # define ex_match             ex_ni
--- 339,344 ----
***************
*** 10951,11026 ****
      set_no_hlsearch(TRUE);
      redraw_all_later(SOME_VALID);
  }
- 
- /*
-  * ":[N]match {group} {pattern}"
-  * Sets nextcmd to the start of the next command, if any.  Also called when
-  * skipping commands to find the next command.
-  */
-     static void
- ex_match(exarg_T *eap)
- {
-     char_u    *p;
-     char_u    *g = NULL;
-     char_u    *end;
-     int               c;
-     int               id;
- 
-     if (eap->line2 <= 3)
-       id = eap->line2;
-     else
-     {
-       emsg(_(e_invcmd));
-       return;
-     }
- 
-     /* First clear any old pattern. */
-     if (!eap->skip)
-       match_delete(curwin, id, FALSE);
- 
-     if (ends_excmd(*eap->arg))
-       end = eap->arg;
-     else if ((STRNICMP(eap->arg, "none", 4) == 0
-               && (VIM_ISWHITE(eap->arg[4]) || ends_excmd(eap->arg[4]))))
-       end = eap->arg + 4;
-     else
-     {
-       p = skiptowhite(eap->arg);
-       if (!eap->skip)
-           g = vim_strnsave(eap->arg, (int)(p - eap->arg));
-       p = skipwhite(p);
-       if (*p == NUL)
-       {
-           /* There must be two arguments. */
-           vim_free(g);
-           semsg(_(e_invarg2), eap->arg);
-           return;
-       }
-       end = skip_regexp(p + 1, *p, TRUE, NULL);
-       if (!eap->skip)
-       {
-           if (*end != NUL && !ends_excmd(*skipwhite(end + 1)))
-           {
-               vim_free(g);
-               eap->errmsg = e_trailing;
-               return;
-           }
-           if (*end != *p)
-           {
-               vim_free(g);
-               semsg(_(e_invarg2), p);
-               return;
-           }
- 
-           c = *end;
-           *end = NUL;
-           match_add(curwin, g, p + 1, 10, id, NULL, NULL);
-           vim_free(g);
-           *end = c;
-       }
-     }
-     eap->nextcmd = find_nextcmd(end);
- }
  #endif
  
  #ifdef FEAT_CRYPT
--- 10950,10955 ----
*** ../vim-8.1.1741/src/version.c       2019-07-24 15:28:02.428878172 +0200
--- src/version.c       2019-07-24 15:52:48.419250486 +0200
***************
*** 779,780 ****
--- 779,782 ----
  {   /* Add new patch number below this line */
+ /**/
+     1742,
  /**/

-- 
CART DRIVER: Bring out your dead!
   There are legs stick out of windows and doors.  Two MEN are fighting in the
   mud - covered from head to foot in it.  Another MAN is on his hands in
   knees shovelling mud into his mouth.  We just catch sight of a MAN falling
   into a well.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- b...@moolenaar.net -- 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 vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/201907241400.x6OE0qUr010547%40masaka.moolenaar.net.

Raspunde prin e-mail lui