]> granicus.if.org Git - vim/commitdiff
patch 8.1.1742: still some match functions in evalfunc.c v8.1.1742
authorBram Moolenaar <Bram@vim.org>
Wed, 24 Jul 2019 14:00:39 +0000 (16:00 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 24 Jul 2019 14:00:39 +0000 (16:00 +0200)
Problem:    Still some match functions in evalfunc.c.
Solution:   Move them to highlight.c.

src/evalfunc.c
src/ex_docmd.c
src/highlight.c
src/proto/highlight.pro
src/version.c

index 8b9fba02c24305ab60b8a1a85b72d9f607336b7c..73efa79f2cdb93211f35b72f8bbd8661f93dc141 100644 (file)
@@ -74,7 +74,6 @@ static void f_changenr(typval_T *argvars, typval_T *rettv);
 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);
@@ -314,7 +313,6 @@ static void f_setenv(typval_T *argvars, typval_T *rettv);
 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);
@@ -2208,20 +2206,6 @@ get_optional_window(typval_T *argvars, int idx)
     return win;
 }
 
-/*
- * "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
  */
@@ -10740,120 +10724,6 @@ f_setloclist(typval_T *argvars, typval_T *rettv)
        set_qf_ll_list(win, &argvars[1], &argvars[2], &argvars[3], rettv);
 }
 
-/*
- * "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
  */
index d8249186020fc9c4e0c402b1d031cc520f1c0ffb..3fa5129c78e06de2c3c39370c3f1ae4b12c6c0f1 100644 (file)
@@ -339,7 +339,6 @@ static void ex_set(exarg_T *eap);
 #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
@@ -10951,76 +10950,6 @@ ex_nohlsearch(exarg_T *eap UNUSED)
     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
index 42fab45e3549df96c33fcf1b685cfb1cab49f246..fb3aede76ecfe1adb784b660fe73c85d9f2e82bd 100644 (file)
@@ -3664,7 +3664,7 @@ free_highlight_fonts(void)
  * If no particular ID is desired, -1 must be specified for 'id'.
  * Return ID of added match, -1 on failure.
  */
-    int
+    static int
 match_add(
     win_T      *wp,
     char_u     *grp,
@@ -3862,7 +3862,7 @@ fail:
  * Delete match with ID 'id' in the match list of window 'wp'.
  * Print error messages if 'perr' is TRUE.
  */
-    int
+    static int
 match_delete(win_T *wp, int id, int perr)
 {
     matchitem_T        *cur = wp->w_match_head;
@@ -3939,7 +3939,7 @@ clear_matches(win_T *wp)
  * Get match from ID 'id' in window 'wp'.
  * Return NULL if match not found.
  */
-    matchitem_T *
+    static matchitem_T *
 get_match(win_T *wp, int id)
 {
     matchitem_T *cur = wp->w_match_head;
@@ -3981,6 +3981,20 @@ matchadd_dict_arg(typval_T *tv, char_u **conceal_char, win_T **win)
 }
 #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
  */
@@ -4049,6 +4063,120 @@ f_getmatches(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
 # endif
 }
 
+/*
+ * "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
  */
@@ -4198,3 +4326,75 @@ f_matchdelete(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
 # 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
index 9dcfdf4dd5d30e81604e6469d28868a8d0c69f77..61cea3655ba0a0d66abf79e4e9ee6aa4a8c9f98b 100644 (file)
@@ -43,13 +43,13 @@ void set_context_in_highlight_cmd(expand_T *xp, char_u *arg);
 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_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 : */
index f8f9bb59362c737883ab437a7676481e3316a280..c674702e07dbe8b24d4b83b95fe5fe7c31c8863d 100644 (file)
@@ -777,6 +777,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1742,
 /**/
     1741,
 /**/