Patch 8.2.4683
Problem:    Verbose check with dict_find() to see if a key is present.
Solution:   Add dict_has_key(). (Yegappan Lakshmanan, closes #10074)
Files:      src/channel.c, src/dict.c, src/evalwindow.c, src/filepath.c,
            src/highlight.c, src/json.c, src/match.c, src/popupwin.c,
            src/proto/dict.pro, src/quickfix.c, src/search.c, src/sign.c,
            src/tag.c, src/terminal.c, src/testing.c, src/textprop.c,
            src/time.c


*** ../vim-8.2.4682/src/channel.c       2022-03-30 10:14:41.485657271 +0100
--- src/channel.c       2022-04-04 15:14:05.061617592 +0100
***************
*** 4460,4467 ****
        }
  
        if (argvars[2].v_type == VAR_DICT)
!           if (dict_find(argvars[2].vval.v_dict, (char_u *)"callback", -1)
!                                                                       != NULL)
                callback_present = TRUE;
  
        if (eval || callback_present)
--- 4460,4466 ----
        }
  
        if (argvars[2].v_type == VAR_DICT)
!           if (dict_has_key(argvars[2].vval.v_dict, "callback"))
                callback_present = TRUE;
  
        if (eval || callback_present)
***************
*** 4482,4488 ****
            if (di != NULL)
                id = di->di_tv.vval.v_number;
        }
!       if (dict_find(d, (char_u *)"jsonrpc", -1) == NULL)
            dict_add_string(d, "jsonrpc", (char_u *)"2.0");
        text = json_encode_lsp_msg(&argvars[1]);
      }
--- 4481,4487 ----
            if (di != NULL)
                id = di->di_tv.vval.v_number;
        }
!       if (!dict_has_key(d, "jsonrpc"))
            dict_add_string(d, "jsonrpc", (char_u *)"2.0");
        text = json_encode_lsp_msg(&argvars[1]);
      }
*** ../vim-8.2.4682/src/dict.c  2022-02-05 14:05:48.128149067 +0000
--- src/dict.c  2022-04-04 15:14:05.061617592 +0100
***************
*** 649,654 ****
--- 649,663 ----
  }
  
  /*
+  * Returns TRUE if "key" is present in Dictionary "d".
+  */
+     int
+ dict_has_key(dict_T *d, char *key)
+ {
+     return dict_find(d, (char_u *)key, -1) != NULL;
+ }
+ 
+ /*
   * Get a typval_T item from a dictionary and copy it into "rettv".
   * Returns FAIL if the entry doesn't exist or out of memory.
   */
***************
*** 1582,1589 ****
      if (argvars[0].vval.v_dict == NULL)
        return;
  
!     rettv->vval.v_number = dict_find(argvars[0].vval.v_dict,
!                                     tv_get_string(&argvars[1]), -1) != NULL;
  }
  
  #endif // defined(FEAT_EVAL)
--- 1591,1598 ----
      if (argvars[0].vval.v_dict == NULL)
        return;
  
!     rettv->vval.v_number = dict_has_key(argvars[0].vval.v_dict,
!                               (char *)tv_get_string(&argvars[1]));
  }
  
  #endif // defined(FEAT_EVAL)
*** ../vim-8.2.4682/src/evalwindow.c    2022-01-11 12:37:16.827153847 +0000
--- src/evalwindow.c    2022-04-04 15:14:05.061617592 +0100
***************
*** 1220,1246 ****
        emsg(_(e_invalid_argument));
      else
      {
!       if (dict_find(dict, (char_u *)"lnum", -1) != NULL)
            curwin->w_cursor.lnum = (linenr_T)dict_get_number(dict, (char_u 
*)"lnum");
!       if (dict_find(dict, (char_u *)"col", -1) != NULL)
            curwin->w_cursor.col = (colnr_T)dict_get_number(dict, (char_u 
*)"col");
!       if (dict_find(dict, (char_u *)"coladd", -1) != NULL)
            curwin->w_cursor.coladd = (colnr_T)dict_get_number(dict, (char_u 
*)"coladd");
!       if (dict_find(dict, (char_u *)"curswant", -1) != NULL)
        {
            curwin->w_curswant = (colnr_T)dict_get_number(dict, (char_u 
*)"curswant");
            curwin->w_set_curswant = FALSE;
        }
  
!       if (dict_find(dict, (char_u *)"topline", -1) != NULL)
            set_topline(curwin, (linenr_T)dict_get_number(dict, (char_u 
*)"topline"));
  #ifdef FEAT_DIFF
!       if (dict_find(dict, (char_u *)"topfill", -1) != NULL)
            curwin->w_topfill = (int)dict_get_number(dict, (char_u *)"topfill");
  #endif
!       if (dict_find(dict, (char_u *)"leftcol", -1) != NULL)
            curwin->w_leftcol = (colnr_T)dict_get_number(dict, (char_u 
*)"leftcol");
!       if (dict_find(dict, (char_u *)"skipcol", -1) != NULL)
            curwin->w_skipcol = (colnr_T)dict_get_number(dict, (char_u 
*)"skipcol");
  
        check_cursor();
--- 1220,1246 ----
        emsg(_(e_invalid_argument));
      else
      {
!       if (dict_has_key(dict, "lnum"))
            curwin->w_cursor.lnum = (linenr_T)dict_get_number(dict, (char_u 
*)"lnum");
!       if (dict_has_key(dict, "col"))
            curwin->w_cursor.col = (colnr_T)dict_get_number(dict, (char_u 
*)"col");
!       if (dict_has_key(dict, "coladd"))
            curwin->w_cursor.coladd = (colnr_T)dict_get_number(dict, (char_u 
*)"coladd");
!       if (dict_has_key(dict, "curswant"))
        {
            curwin->w_curswant = (colnr_T)dict_get_number(dict, (char_u 
*)"curswant");
            curwin->w_set_curswant = FALSE;
        }
  
!       if (dict_has_key(dict, "topline"))
            set_topline(curwin, (linenr_T)dict_get_number(dict, (char_u 
*)"topline"));
  #ifdef FEAT_DIFF
!       if (dict_has_key(dict, "topfill"))
            curwin->w_topfill = (int)dict_get_number(dict, (char_u *)"topfill");
  #endif
!       if (dict_has_key(dict, "leftcol"))
            curwin->w_leftcol = (colnr_T)dict_get_number(dict, (char_u 
*)"leftcol");
!       if (dict_has_key(dict, "skipcol"))
            curwin->w_skipcol = (colnr_T)dict_get_number(dict, (char_u 
*)"skipcol");
  
        check_cursor();
*** ../vim-8.2.4682/src/filepath.c      2022-04-03 21:30:25.022559205 +0100
--- src/filepath.c      2022-04-04 15:14:05.065617606 +0100
***************
*** 1605,1611 ****
        return FAIL;
      }
  
!     if (dict_find(tv->vval.v_dict, (char_u *)"sort", -1) != NULL)
        compare = dict_get_string(tv->vval.v_dict, (char_u *)"sort", FALSE);
      else
      {
--- 1605,1611 ----
        return FAIL;
      }
  
!     if (dict_has_key(tv->vval.v_dict, "sort"))
        compare = dict_get_string(tv->vval.v_dict, (char_u *)"sort", FALSE);
      else
      {
*** ../vim-8.2.4682/src/highlight.c     2022-02-16 19:24:03.622162411 +0000
--- src/highlight.c     2022-04-04 15:14:05.065617606 +0100
***************
*** 718,724 ****
  # ifdef FEAT_BEVAL_TIP
        gui_init_tooltip_font();
  # endif
! # if defined(FEAT_MENU) && (defined(FEAT_GUI_ATHENA) || 
defined(FEAT_GUI_MOTIF))
        gui_init_menu_font();
  # endif
      }
--- 718,724 ----
  # ifdef FEAT_BEVAL_TIP
        gui_init_tooltip_font();
  # endif
! # if defined(FEAT_MENU) && defined(FEAT_GUI_MOTIF)
        gui_init_menu_font();
  # endif
      }
***************
*** 2134,2140 ****
        || do_menu
  #  endif
  #  ifdef FEAT_BEVAL_TIP
!       // In Athena & Motif, the Tooltip highlight group is always a fontset
        || do_tooltip
  #  endif
            )
--- 2134,2140 ----
        || do_menu
  #  endif
  #  ifdef FEAT_BEVAL_TIP
!       // In Motif, the Tooltip highlight group is always a fontset
        || do_tooltip
  #  endif
            )
***************
*** 2156,2162 ****
        // fontset.  Same for the Menu group.
        if (do_normal)
            gui_init_font(arg, TRUE);
! #   if (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) && 
defined(FEAT_MENU)
        if (do_menu)
        {
  #    ifdef FONTSET_ALWAYS
--- 2156,2162 ----
        // fontset.  Same for the Menu group.
        if (do_normal)
            gui_init_font(arg, TRUE);
! #   if defined(FEAT_GUI_MOTIF) && defined(FEAT_MENU)
        if (do_menu)
        {
  #    ifdef FONTSET_ALWAYS
***************
*** 2170,2176 ****
  #    ifdef FEAT_BEVAL_GUI
        if (do_tooltip)
        {
!           // The Athena widget set cannot currently handle switching between
            // displaying a single font and a fontset.
            // If the XtNinternational resource is set to True at widget
            // creation, then a fontset is always used, otherwise an
--- 2170,2176 ----
  #    ifdef FEAT_BEVAL_GUI
        if (do_tooltip)
        {
!           // The Athena widget set could not handle switching between
            // displaying a single font and a fontset.
            // If the XtNinternational resource is set to True at widget
            // creation, then a fontset is always used, otherwise an
***************
*** 2194,2200 ****
            if (do_normal)
                gui_init_font(arg, FALSE);
  #ifndef FONTSET_ALWAYS
! # if (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) && 
defined(FEAT_MENU)
            if (do_menu)
            {
                gui.menu_font = HL_TABLE()[idx].sg_font;
--- 2194,2200 ----
            if (do_normal)
                gui_init_font(arg, FALSE);
  #ifndef FONTSET_ALWAYS
! # if defined(FEAT_GUI_MOTIF) && defined(FEAT_MENU)
            if (do_menu)
            {
                gui.menu_font = HL_TABLE()[idx].sg_font;
***************
*** 4411,4417 ****
      if (dict_get_bool(dict, (char_u *)"default", VVAL_FALSE) == VVAL_TRUE)
        dodefault = TRUE;
  
!     if (dict_find(dict, (char_u *)"cleared", -1) != NULL)
      {
        varnumber_T     cleared;
  
--- 4411,4417 ----
      if (dict_get_bool(dict, (char_u *)"default", VVAL_FALSE) == VVAL_TRUE)
        dodefault = TRUE;
  
!     if (dict_has_key(dict, "cleared"))
      {
        varnumber_T     cleared;
  
***************
*** 4425,4431 ****
        }
      }
  
!     if (dict_find(dict, (char_u *)"linksto", -1) != NULL)
      {
        char_u  *linksto;
  
--- 4425,4431 ----
        }
      }
  
!     if (dict_has_key(dict, "linksto"))
      {
        char_u  *linksto;
  
*** ../vim-8.2.4682/src/json.c  2022-03-30 10:14:41.485657271 +0100
--- src/json.c  2022-04-04 15:14:05.065617606 +0100
***************
*** 1027,1034 ****
  
            case JSON_OBJECT:
                if (cur_item != NULL
!                       && dict_find(top_item->jd_tv.vval.v_dict,
!                                                top_item->jd_key, -1) != NULL)
                {
                    semsg(_(e_duplicate_key_in_json_str), top_item->jd_key);
                    clear_tv(cur_item);
--- 1027,1034 ----
  
            case JSON_OBJECT:
                if (cur_item != NULL
!                       && dict_has_key(top_item->jd_tv.vval.v_dict,
!                                               (char *)top_item->jd_key))
                {
                    semsg(_(e_duplicate_key_in_json_str), top_item->jd_key);
                    clear_tv(cur_item);
*** ../vim-8.2.4682/src/match.c 2022-01-28 15:28:00.208927722 +0000
--- src/match.c 2022-04-04 15:14:05.065617606 +0100
***************
*** 938,944 ****
        return FAIL;
      }
  
!     if (dict_find(tv->vval.v_dict, (char_u *)"conceal", -1) != NULL)
        *conceal_char = dict_get_string(tv->vval.v_dict,
                                                   (char_u *)"conceal", FALSE);
  
--- 938,944 ----
        return FAIL;
      }
  
!     if (dict_has_key(tv->vval.v_dict, "conceal"))
        *conceal_char = dict_get_string(tv->vval.v_dict,
                                                   (char_u *)"conceal", FALSE);
  
***************
*** 1088,1098 ****
                emsg(_(e_invalid_argument));
                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_invalid_argument));
                return;
--- 1088,1098 ----
                emsg(_(e_invalid_argument));
                return;
            }
!           if (!(dict_has_key(d, "group")
!                       && (dict_has_key(d, "pattern")
!                           || dict_has_key(d, "pos1"))
!                       && dict_has_key(d, "priority")
!                       && dict_has_key(d, "id")))
            {
                emsg(_(e_invalid_argument));
                return;
***************
*** 1113,1119 ****
            char_u      *conceal;
  
            d = li->li_tv.vval.v_dict;
!           if (dict_find(d, (char_u *)"pattern", -1) == NULL)
            {
                if (s == NULL)
                {
--- 1113,1119 ----
            char_u      *conceal;
  
            d = li->li_tv.vval.v_dict;
!           if (!dict_has_key(d, "pattern"))
            {
                if (s == NULL)
                {
***************
*** 1142,1148 ****
            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)
--- 1142,1148 ----
            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_has_key(d, "conceal")
                              ? dict_get_string(d, (char_u *)"conceal", TRUE)
                              : NULL;
            if (i == 0)
*** ../vim-8.2.4682/src/popupwin.c      2022-04-02 21:46:14.989612828 +0100
--- src/popupwin.c      2022-04-04 15:14:05.065617606 +0100
***************
*** 1957,1963 ****
  
      if (d != NULL)
      {
!       if (dict_find(d, (char_u *)"tabpage", -1) != NULL)
            tabnr = (int)dict_get_number(d, (char_u *)"tabpage");
        else if (type == TYPE_NOTIFICATION)
            tabnr = -1;  // notifications are global by default
--- 1957,1963 ----
  
      if (d != NULL)
      {
!       if (dict_has_key(d, "tabpage"))
            tabnr = (int)dict_get_number(d, (char_u *)"tabpage");
        else if (type == TYPE_NOTIFICATION)
            tabnr = -1;  // notifications are global by default
*** ../vim-8.2.4682/src/proto/dict.pro  2022-02-02 20:01:21.957210955 +0000
--- src/proto/dict.pro  2022-04-04 15:14:05.065617606 +0100
***************
*** 27,32 ****
--- 27,33 ----
  int dict_add_dict(dict_T *d, char *key, dict_T *dict);
  long dict_len(dict_T *d);
  dictitem_T *dict_find(dict_T *d, char_u *key, int len);
+ int dict_has_key(dict_T *d, char *key);
  int dict_get_tv(dict_T *d, char_u *key, typval_T *rettv);
  char_u *dict_get_string(dict_T *d, char_u *key, int save);
  varnumber_T dict_get_number(dict_T *d, char_u *key);
*** ../vim-8.2.4682/src/quickfix.c      2022-03-30 10:57:36.735346197 +0100
--- src/quickfix.c      2022-04-04 15:14:05.065617606 +0100
***************
*** 6859,6865 ****
  {
      int               flags = QF_GETLIST_NONE;
  
!     if (dict_find(what, (char_u *)"all", -1) != NULL)
      {
        flags |= QF_GETLIST_ALL;
        if (!loclist)
--- 6859,6865 ----
  {
      int               flags = QF_GETLIST_NONE;
  
!     if (dict_has_key(what, "all"))
      {
        flags |= QF_GETLIST_ALL;
        if (!loclist)
***************
*** 6867,6906 ****
            flags &= ~ QF_GETLIST_FILEWINID;
      }
  
!     if (dict_find(what, (char_u *)"title", -1) != NULL)
        flags |= QF_GETLIST_TITLE;
  
!     if (dict_find(what, (char_u *)"nr", -1) != NULL)
        flags |= QF_GETLIST_NR;
  
!     if (dict_find(what, (char_u *)"winid", -1) != NULL)
        flags |= QF_GETLIST_WINID;
  
!     if (dict_find(what, (char_u *)"context", -1) != NULL)
        flags |= QF_GETLIST_CONTEXT;
  
!     if (dict_find(what, (char_u *)"id", -1) != NULL)
        flags |= QF_GETLIST_ID;
  
!     if (dict_find(what, (char_u *)"items", -1) != NULL)
        flags |= QF_GETLIST_ITEMS;
  
!     if (dict_find(what, (char_u *)"idx", -1) != NULL)
        flags |= QF_GETLIST_IDX;
  
!     if (dict_find(what, (char_u *)"size", -1) != NULL)
        flags |= QF_GETLIST_SIZE;
  
!     if (dict_find(what, (char_u *)"changedtick", -1) != NULL)
        flags |= QF_GETLIST_TICK;
  
!     if (loclist && dict_find(what, (char_u *)"filewinid", -1) != NULL)
        flags |= QF_GETLIST_FILEWINID;
  
!     if (dict_find(what, (char_u *)"qfbufnr", -1) != NULL)
        flags |= QF_GETLIST_QFBUFNR;
  
!     if (dict_find(what, (char_u *)"quickfixtextfunc", -1) != NULL)
        flags |= QF_GETLIST_QFTF;
  
      return flags;
--- 6867,6906 ----
            flags &= ~ QF_GETLIST_FILEWINID;
      }
  
!     if (dict_has_key(what, "title"))
        flags |= QF_GETLIST_TITLE;
  
!     if (dict_has_key(what, "nr"))
        flags |= QF_GETLIST_NR;
  
!     if (dict_has_key(what, "winid"))
        flags |= QF_GETLIST_WINID;
  
!     if (dict_has_key(what, "context"))
        flags |= QF_GETLIST_CONTEXT;
  
!     if (dict_has_key(what, "id"))
        flags |= QF_GETLIST_ID;
  
!     if (dict_has_key(what, "items"))
        flags |= QF_GETLIST_ITEMS;
  
!     if (dict_has_key(what, "idx"))
        flags |= QF_GETLIST_IDX;
  
!     if (dict_has_key(what, "size"))
        flags |= QF_GETLIST_SIZE;
  
!     if (dict_has_key(what, "changedtick"))
        flags |= QF_GETLIST_TICK;
  
!     if (loclist && dict_has_key(what, "filewinid"))
        flags |= QF_GETLIST_FILEWINID;
  
!     if (dict_has_key(what, "qfbufnr"))
        flags |= QF_GETLIST_QFBUFNR;
  
!     if (dict_has_key(what, "quickfixtextfunc"))
        flags |= QF_GETLIST_QFTF;
  
      return flags;
***************
*** 7241,7247 ****
      }
  
      // If the 'valid' field is present it overrules the detected value.
!     if ((dict_find(d, (char_u *)"valid", -1)) != NULL)
        valid = (int)dict_get_bool(d, (char_u *)"valid", FALSE);
  
      status =  qf_add_entry(qfl,
--- 7241,7247 ----
      }
  
      // If the 'valid' field is present it overrules the detected value.
!     if (dict_has_key(d, "valid"))
        valid = (int)dict_get_bool(d, (char_u *)"valid", FALSE);
  
      status =  qf_add_entry(qfl,
*** ../vim-8.2.4682/src/search.c        2022-02-27 12:07:26.666960401 +0000
--- src/search.c        2022-04-04 15:14:05.065617606 +0100
***************
*** 4878,4884 ****
                return;
            }
        }
!       if (dict_find(d, (char_u *)"matchseq", -1) != NULL)
            matchseq = TRUE;
      }
  
--- 4878,4884 ----
                return;
            }
        }
!       if (dict_has_key(d, "matchseq"))
            matchseq = TRUE;
      }
  
*** ../vim-8.2.4682/src/sign.c  2022-03-22 20:42:09.174172862 +0000
--- src/sign.c  2022-04-04 15:14:05.069617614 +0100
***************
*** 2786,2792 ****
            if (buf == NULL)
                goto cleanup;
        }
!       if (dict_find(dict, (char_u *)"id", -1) != NULL)
        {
            sign_id = dict_get_number(dict, (char_u *)"id");
            if (sign_id <= 0)
--- 2786,2792 ----
            if (buf == NULL)
                goto cleanup;
        }
!       if (dict_has_key(dict, "id"))
        {
            sign_id = dict_get_number(dict, (char_u *)"id");
            if (sign_id <= 0)
*** ../vim-8.2.4682/src/tag.c   2022-03-13 19:23:44.912318213 +0000
--- src/tag.c   2022-04-04 15:14:05.069617614 +0100
***************
*** 4313,4319 ****
      int               retval;
  
      // check that the field name doesn't exist yet
!     if (dict_find(dict, (char_u *)field_name, -1) != NULL)
      {
        if (p_verbose > 0)
        {
--- 4313,4319 ----
      int               retval;
  
      // check that the field name doesn't exist yet
!     if (dict_has_key(dict, field_name))
      {
        if (p_verbose > 0)
        {
*** ../vim-8.2.4682/src/terminal.c      2022-02-25 20:48:22.135350734 +0000
--- src/terminal.c      2022-04-04 15:14:05.069617614 +0100
***************
*** 4311,4323 ****
        if (p != NULL)
            get_bad_opt(p, &ea);
  
!       if (dict_find(dict, (char_u *)"bin", -1) != NULL)
            ea.force_bin = FORCE_BIN;
!       if (dict_find(dict, (char_u *)"binary", -1) != NULL)
            ea.force_bin = FORCE_BIN;
!       if (dict_find(dict, (char_u *)"nobin", -1) != NULL)
            ea.force_bin = FORCE_NOBIN;
!       if (dict_find(dict, (char_u *)"nobinary", -1) != NULL)
            ea.force_bin = FORCE_NOBIN;
      }
  
--- 4311,4323 ----
        if (p != NULL)
            get_bad_opt(p, &ea);
  
!       if (dict_has_key(dict, "bin"))
            ea.force_bin = FORCE_BIN;
!       if (dict_has_key(dict, "binary"))
            ea.force_bin = FORCE_BIN;
!       if (dict_has_key(dict, "nobin"))
            ea.force_bin = FORCE_NOBIN;
!       if (dict_has_key(dict, "nobinary"))
            ea.force_bin = FORCE_NOBIN;
      }
  
*** ../vim-8.2.4682/src/testing.c       2022-04-03 15:46:57.389502603 +0100
--- src/testing.c       2022-04-04 15:14:05.069617614 +0100
***************
*** 1285,1294 ****
      list_T    *l;
      listitem_T        *li;
  
!     if (dict_find(args, (char_u *)"files", -1) == NULL
!           || dict_find(args, (char_u *)"row", -1) == NULL
!           || dict_find(args, (char_u *)"col", -1) == NULL
!           || dict_find(args, (char_u *)"modifiers", -1) == NULL)
        return FALSE;
  
      (void)dict_get_tv(args, (char_u *)"files", &t);
--- 1285,1294 ----
      list_T    *l;
      listitem_T        *li;
  
!     if (!dict_has_key(args, "files")
!           || !dict_has_key(args, "row")
!           || !dict_has_key(args, "col")
!           || !dict_has_key(args, "modifiers"))
        return FALSE;
  
      (void)dict_get_tv(args, (char_u *)"files", &t);
***************
*** 1341,1350 ****
      int               forward;
      int               retval;
  
!     if (dict_find(args, (char_u *)"find_text", -1) == NULL
!           || dict_find(args, (char_u *)"repl_text", -1) == NULL
!           || dict_find(args, (char_u *)"flags", -1) == NULL
!           || dict_find(args, (char_u *)"forward", -1) == NULL)
        return FALSE;
  
      find_text = dict_get_string(args, (char_u *)"find_text", TRUE);
--- 1341,1350 ----
      int               forward;
      int               retval;
  
!     if (!dict_has_key(args, "find_text")
!           || !dict_has_key(args, "repl_text")
!           || !dict_has_key(args, "flags")
!           || !dict_has_key(args, "forward"))
        return FALSE;
  
      find_text = dict_get_string(args, (char_u *)"find_text", TRUE);
***************
*** 1370,1385 ****
      int_u     mods;
      int               move;
  
!     if (dict_find(args, (char_u *)"row", -1) == NULL
!           || dict_find(args, (char_u *)"col", -1) == NULL)
        return FALSE;
  
      // Note: "move" is optional, requires fewer arguments
      move = (int)dict_get_bool(args, (char_u *)"move", FALSE);
  
!     if (!move && (dict_find(args, (char_u *)"button", -1) == NULL
!           || dict_find(args, (char_u *)"multiclick", -1) == NULL
!           || dict_find(args, (char_u *)"modifiers", -1) == NULL))
        return FALSE;
  
      row = (int)dict_get_number(args, (char_u *)"row");
--- 1370,1385 ----
      int_u     mods;
      int               move;
  
!     if (!dict_has_key(args, "row")
!           || !dict_has_key(args, "col"))
        return FALSE;
  
      // Note: "move" is optional, requires fewer arguments
      move = (int)dict_get_bool(args, (char_u *)"move", FALSE);
  
!     if (!move && (!dict_has_key(args, "button")
!           || !dict_has_key(args, "multiclick")
!           || !dict_has_key(args, "modifiers")))
        return FALSE;
  
      row = (int)dict_get_number(args, (char_u *)"row");
***************
*** 1408,1416 ****
      int               dragging;
      scrollbar_T *sb = NULL;
  
!     if (dict_find(args, (char_u *)"which", -1) == NULL
!           || dict_find(args, (char_u *)"value", -1) == NULL
!           || dict_find(args, (char_u *)"dragging", -1) == NULL)
        return FALSE;
  
      which = dict_get_string(args, (char_u *)"which", FALSE);
--- 1408,1416 ----
      int               dragging;
      scrollbar_T *sb = NULL;
  
!     if (!dict_has_key(args, "which")
!           || !dict_has_key(args, "value")
!           || !dict_has_key(args, "dragging"))
        return FALSE;
  
      which = dict_get_string(args, (char_u *)"which", FALSE);
***************
*** 1443,1449 ****
  #  ifdef FEAT_GUI_TABLINE
      int               tabnr;
  
!     if (dict_find(args, (char_u *)"tabnr", -1) == NULL)
        return FALSE;
  
      tabnr = (int)dict_get_number(args, (char_u *)"tabnr");
--- 1443,1449 ----
  #  ifdef FEAT_GUI_TABLINE
      int               tabnr;
  
!     if (!dict_has_key(args, "tabnr"))
        return FALSE;
  
      tabnr = (int)dict_get_number(args, (char_u *)"tabnr");
***************
*** 1461,1468 ****
      int       tabnr;
      int       item;
  
!     if (dict_find(args, (char_u *)"tabnr", -1) == NULL
!           || dict_find(args, (char_u *)"item", -1) == NULL)
        return FALSE;
  
      tabnr = (int)dict_get_number(args, (char_u *)"tabnr");
--- 1461,1468 ----
      int       tabnr;
      int       item;
  
!     if (!dict_has_key(args, "tabnr")
!           || !dict_has_key(args, "item"))
        return FALSE;
  
      tabnr = (int)dict_get_number(args, (char_u *)"tabnr");
*** ../vim-8.2.4682/src/textprop.c      2022-01-05 20:24:34.280005633 +0000
--- src/textprop.c      2022-04-04 15:14:05.069617614 +0100
***************
*** 331,344 ****
      }
  
      dict = argvars[0].vval.v_dict;
!     if (dict == NULL || dict_find(dict, (char_u *)"type", -1) == NULL)
      {
        emsg(_(e_missing_property_type_name));
        return;
      }
      type_name = dict_get_string(dict, (char_u *)"type", FALSE);
  
!     if (dict_find(dict, (char_u *)"id", -1) != NULL)
        id = dict_get_number(dict, (char_u *)"id");
  
      if (get_bufnr_from_arg(&argvars[0], &buf) == FAIL)
--- 331,344 ----
      }
  
      dict = argvars[0].vval.v_dict;
!     if (dict == NULL || !dict_has_key(dict, "type"))
      {
        emsg(_(e_missing_property_type_name));
        return;
      }
      type_name = dict_get_string(dict, (char_u *)"type", FALSE);
  
!     if (dict_has_key(dict, "id"))
        id = dict_get_number(dict, (char_u *)"id");
  
      if (get_bufnr_from_arg(&argvars[0], &buf) == FAIL)
***************
*** 391,404 ****
      buf_T     *buf = default_buf;
      int               id = 0;
  
!     if (dict == NULL || dict_find(dict, (char_u *)"type", -1) == NULL)
      {
        emsg(_(e_missing_property_type_name));
        return;
      }
      type_name = dict_get_string(dict, (char_u *)"type", FALSE);
  
!     if (dict_find(dict, (char_u *)"end_lnum", -1) != NULL)
      {
        end_lnum = dict_get_number(dict, (char_u *)"end_lnum");
        if (end_lnum < start_lnum)
--- 391,404 ----
      buf_T     *buf = default_buf;
      int               id = 0;
  
!     if (dict == NULL || !dict_has_key(dict, "type"))
      {
        emsg(_(e_missing_property_type_name));
        return;
      }
      type_name = dict_get_string(dict, (char_u *)"type", FALSE);
  
!     if (dict_has_key(dict, "end_lnum"))
      {
        end_lnum = dict_get_number(dict, (char_u *)"end_lnum");
        if (end_lnum < start_lnum)
***************
*** 410,416 ****
      else
        end_lnum = start_lnum;
  
!     if (dict_find(dict, (char_u *)"length", -1) != NULL)
      {
        long length = dict_get_number(dict, (char_u *)"length");
  
--- 410,416 ----
      else
        end_lnum = start_lnum;
  
!     if (dict_has_key(dict, "length"))
      {
        long length = dict_get_number(dict, (char_u *)"length");
  
***************
*** 421,427 ****
        }
        end_col = start_col + length;
      }
!     else if (dict_find(dict, (char_u *)"end_col", -1) != NULL)
      {
        end_col = dict_get_number(dict, (char_u *)"end_col");
        if (end_col <= 0)
--- 421,427 ----
        }
        end_col = start_col + length;
      }
!     else if (dict_has_key(dict, "end_col"))
      {
        end_col = dict_get_number(dict, (char_u *)"end_col");
        if (end_col <= 0)
***************
*** 435,441 ****
      else
        end_col = 1;
  
!     if (dict_find(dict, (char_u *)"id", -1) != NULL)
        id = dict_get_number(dict, (char_u *)"id");
  
      if (dict_arg != NULL && get_bufnr_from_arg(dict_arg, &buf) == FAIL)
--- 435,441 ----
      else
        end_col = 1;
  
!     if (dict_has_key(dict, "id"))
        id = dict_get_number(dict, (char_u *)"id");
  
      if (dict_arg != NULL && get_bufnr_from_arg(dict_arg, &buf) == FAIL)
***************
*** 777,788 ****
  
      skipstart = dict_get_bool(dict, (char_u *)"skipstart", 0);
  
!     if (dict_find(dict, (char_u *)"id", -1) != NULL)
      {
        id = dict_get_number(dict, (char_u *)"id");
        id_found = TRUE;
      }
!     if (dict_find(dict, (char_u *)"type", -1))
      {
        char_u      *name = dict_get_string(dict, (char_u *)"type", FALSE);
        proptype_T  *type = lookup_prop_type(name, buf);
--- 777,788 ----
  
      skipstart = dict_get_bool(dict, (char_u *)"skipstart", 0);
  
!     if (dict_has_key(dict, "id"))
      {
        id = dict_get_number(dict, (char_u *)"id");
        id_found = TRUE;
      }
!     if (dict_has_key(dict, "type"))
      {
        char_u      *name = dict_get_string(dict, (char_u *)"type", FALSE);
        proptype_T  *type = lookup_prop_type(name, buf);
***************
*** 1202,1210 ****
  
      do_all = dict_get_bool(dict, (char_u *)"all", FALSE);
  
!     if (dict_find(dict, (char_u *)"id", -1) != NULL)
        id = dict_get_number(dict, (char_u *)"id");
!     if (dict_find(dict, (char_u *)"type", -1))
      {
        char_u      *name = dict_get_string(dict, (char_u *)"type", FALSE);
        proptype_T  *type = lookup_prop_type(name, buf);
--- 1202,1210 ----
  
      do_all = dict_get_bool(dict, (char_u *)"all", FALSE);
  
!     if (dict_has_key(dict, "id"))
        id = dict_get_number(dict, (char_u *)"id");
!     if (dict_has_key(dict, "type"))
      {
        char_u      *name = dict_get_string(dict, (char_u *)"type", FALSE);
        proptype_T  *type = lookup_prop_type(name, buf);
*** ../vim-8.2.4682/src/time.c  2022-01-27 13:55:29.846840950 +0000
--- src/time.c  2022-04-04 15:14:05.069617614 +0100
***************
*** 848,854 ****
            semsg(_(e_invalid_argument_str), tv_get_string(&argvars[2]));
            return;
        }
!       if (dict_find(dict, (char_u *)"repeat", -1) != NULL)
            repeat = dict_get_number(dict, (char_u *)"repeat");
      }
  
--- 848,854 ----
            semsg(_(e_invalid_argument_str), tv_get_string(&argvars[2]));
            return;
        }
!       if (dict_has_key(dict, "repeat"))
            repeat = dict_get_number(dict, (char_u *)"repeat");
      }
  
*** ../vim-8.2.4682/src/version.c       2022-04-04 14:58:02.170539803 +0100
--- src/version.c       2022-04-04 15:16:07.381926360 +0100
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     4683,
  /**/

-- 
It is illegal for anyone to try and stop a child from playfully jumping over
puddles of water.
                [real standing law in California, United States of America]

 /// Bram Moolenaar -- b...@moolenaar.net -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            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/20220404141727.591651C0561%40moolenaar.net.

Raspunde prin e-mail lui