Patch 9.0.0359
Problem:    Error message for wrong argument type is not specific.
Solution:   Include more information in the error. (Yegappan Lakshmanan,
            closes #11037)
Files:      src/blob.c, src/cmdexpand.c, src/evalfunc.c, src/popupwin.c,
            src/sign.c, src/strings.c, src/testing.c, src/time.c,
            src/testdir/test_assert.vim, src/testdir/test_cmdline.vim,
            src/testdir/test_functions.vim, src/testdir/test_listdict.vim,
            src/testdir/test_signs.vim, src/testdir/test_tagjump.vim,
            src/testdir/test_timers.vim, src/testdir/test_vim9_builtin.vim


*** ../vim-9.0.0358/src/blob.c  2022-04-03 11:14:32.000000000 +0100
--- src/blob.c  2022-09-02 15:11:03.747872714 +0100
***************
*** 667,677 ****
        initial.vval.v_number = blob_get(b, 0);
        i = 1;
      }
!     else if (argvars[2].v_type != VAR_NUMBER)
!     {
!       emsg(_(e_number_expected));
        return;
-     }
      else
      {
        initial = argvars[2];
--- 667,674 ----
        initial.vval.v_number = blob_get(b, 0);
        i = 1;
      }
!     else if (check_for_number_arg(argvars, 2) == FAIL)
        return;
      else
      {
        initial = argvars[2];
*** ../vim-9.0.0358/src/cmdexpand.c     2022-09-01 12:58:46.580970180 +0100
--- src/cmdexpand.c     2022-09-02 15:11:03.747872714 +0100
***************
*** 3679,3689 ****
        return;
  
      pat = tv_get_string(&argvars[0]);
!     if (argvars[1].v_type != VAR_STRING)
!     {
!       semsg(_(e_invalid_argument_str), "type must be a string");
        return;
-     }
      type = tv_get_string(&argvars[1]);
  
      if (argvars[2].v_type != VAR_UNKNOWN)
--- 3679,3686 ----
        return;
  
      pat = tv_get_string(&argvars[0]);
!     if (check_for_string_arg(argvars, 1) == FAIL)
        return;
      type = tv_get_string(&argvars[1]);
  
      if (argvars[2].v_type != VAR_UNKNOWN)
*** ../vim-9.0.0358/src/evalfunc.c      2022-09-01 12:22:19.743659145 +0100
--- src/evalfunc.c      2022-09-02 15:11:03.747872714 +0100
***************
*** 3607,3623 ****
  {
      varnumber_T       noref = 0;
  
!     if (in_vim9script()
!           && (check_for_opt_bool_arg(argvars, 1) == FAIL))
        return;
  
      if (argvars[1].v_type != VAR_UNKNOWN)
        noref = tv_get_bool_chk(&argvars[1], NULL);
!     if (noref < 0 || noref > 1)
!       semsg(_(e_using_number_as_bool_nr), noref);
!     else
!       item_copy(&argvars[0], rettv, TRUE, TRUE,
!                                               noref == 0 ? get_copyID() : 0);
  }
  
  /*
--- 3607,3619 ----
  {
      varnumber_T       noref = 0;
  
!     if (check_for_opt_bool_arg(argvars, 1) == FAIL)
        return;
  
      if (argvars[1].v_type != VAR_UNKNOWN)
        noref = tv_get_bool_chk(&argvars[1], NULL);
! 
!     item_copy(&argvars[0], rettv, TRUE, TRUE, noref == 0 ? get_copyID() : 0);
  }
  
  /*
***************
*** 5257,5277 ****
      static void
  f_gettext(typval_T *argvars, typval_T *rettv)
  {
!     if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
        return;
  
!     if (argvars[0].v_type != VAR_STRING
!           || argvars[0].vval.v_string == NULL
!           || *argvars[0].vval.v_string == NUL)
!     {
!       semsg(_(e_invalid_argument_str), tv_get_string(&argvars[0]));
!     }
!     else
!     {
!       rettv->v_type = VAR_STRING;
!       rettv->vval.v_string = vim_strsave(
!                                       (char_u *)_(argvars[0].vval.v_string));
!     }
  }
  
  // for VIM_VERSION_ defines
--- 5253,5263 ----
      static void
  f_gettext(typval_T *argvars, typval_T *rettv)
  {
!     if (check_for_nonempty_string_arg(argvars, 0) == FAIL)
        return;
  
!     rettv->v_type = VAR_STRING;
!     rettv->vval.v_string = vim_strsave((char_u *)_(argvars[0].vval.v_string));
  }
  
  // for VIM_VERSION_ defines
***************
*** 9641,9647 ****
      // default is to replace the stack.
      if (argvars[2].v_type == VAR_UNKNOWN)
        action = 'r';
!     else if (argvars[2].v_type == VAR_STRING)
      {
        char_u  *actstr;
        actstr = tv_get_string_chk(&argvars[2]);
--- 9627,9635 ----
      // default is to replace the stack.
      if (argvars[2].v_type == VAR_UNKNOWN)
        action = 'r';
!     else if (check_for_string_arg(argvars, 2) == FAIL)
!       return;
!     else
      {
        char_u  *actstr;
        actstr = tv_get_string_chk(&argvars[2]);
***************
*** 9656,9666 ****
            return;
        }
      }
-     else
-     {
-       emsg(_(e_string_required));
-       return;
-     }
  
      if (set_tagstack(wp, d, action) == OK)
        rettv->vval.v_number = 0;
--- 9644,9649 ----
*** ../vim-9.0.0358/src/popupwin.c      2022-09-01 16:42:59.931897217 +0100
--- src/popupwin.c      2022-09-02 15:11:03.747872714 +0100
***************
*** 2769,2777 ****
      wp = find_popup_win(id);
      if (wp != NULL)
      {
!       if (argvars[1].v_type != VAR_STRING && argvars[1].v_type != VAR_LIST)
!           semsg(_(e_invalid_argument_str), tv_get_string(&argvars[1]));
!       else
        {
            popup_set_buffer_text(wp->w_buffer, argvars[1]);
            redraw_win_later(wp, UPD_NOT_VALID);
--- 2769,2775 ----
      wp = find_popup_win(id);
      if (wp != NULL)
      {
!       if (check_for_string_or_list_arg(argvars, 1) != FAIL)
        {
            popup_set_buffer_text(wp->w_buffer, argvars[1]);
            redraw_win_later(wp, UPD_NOT_VALID);
*** ../vim-9.0.0358/src/sign.c  2022-09-01 12:22:19.747659165 +0100
--- src/sign.c  2022-09-02 15:11:03.751872711 +0100
***************
*** 2849,2871 ****
  
      rettv->vval.v_number = -1;
  
!     if (in_vim9script()
!           && (check_for_string_arg(argvars, 0) == FAIL
                || check_for_opt_dict_arg(argvars, 1) == FAIL))
        return;
  
-     if (argvars[0].v_type != VAR_STRING)
-     {
-       emsg(_(e_invalid_argument));
-       return;
-     }
- 
      if (argvars[1].v_type != VAR_UNKNOWN)
-     {
-       if (check_for_dict_arg(argvars, 1) == FAIL)
-           return;
        dict = argvars[1].vval.v_dict;
-     }
  
      rettv->vval.v_number = sign_unplace_from_dict(&argvars[0], dict);
  }
--- 2849,2860 ----
  
      rettv->vval.v_number = -1;
  
!     if ((check_for_string_arg(argvars, 0) == FAIL
                || check_for_opt_dict_arg(argvars, 1) == FAIL))
        return;
  
      if (argvars[1].v_type != VAR_UNKNOWN)
        dict = argvars[1].vval.v_dict;
  
      rettv->vval.v_number = sign_unplace_from_dict(&argvars[0], dict);
  }
*** ../vim-9.0.0358/src/strings.c       2022-05-06 10:59:56.000000000 +0100
--- src/strings.c       2022-09-02 15:11:03.751872711 +0100
***************
*** 960,970 ****
            return;
        p += STRLEN(rettv->vval.v_string);
      }
!     else if (argvars[2].v_type != VAR_STRING)
!     {
!       semsg(_(e_string_expected_for_argument_nr), 3);
        return;
-     }
      else
        copy_tv(&argvars[2], rettv);
  
--- 960,967 ----
            return;
        p += STRLEN(rettv->vval.v_string);
      }
!     else if (check_for_string_arg(argvars, 2) == FAIL)
        return;
      else
        copy_tv(&argvars[2], rettv);
  
***************
*** 1047,1067 ****
  
      rettv->vval.v_number = -1;
  
!     if (in_vim9script()
!           && (check_for_string_arg(argvars, 0) == FAIL
                || check_for_number_arg(argvars, 1) == FAIL
                || check_for_opt_bool_arg(argvars, 2) == FAIL))
        return;
  
-     if (argvars[0].v_type != VAR_STRING || argvars[1].v_type != VAR_NUMBER
-           || (argvars[2].v_type != VAR_UNKNOWN
-                                          && argvars[2].v_type != VAR_NUMBER
-                                          && argvars[2].v_type != VAR_BOOL))
-     {
-       emsg(_(e_invalid_argument));
-       return;
-     }
- 
      str = tv_get_string_chk(&argvars[0]);
      idx = tv_get_number_chk(&argvars[1], NULL);
      if (str == NULL || idx < 0)
--- 1044,1054 ----
  
      rettv->vval.v_number = -1;
  
!     if ((check_for_string_arg(argvars, 0) == FAIL
                || check_for_number_arg(argvars, 1) == FAIL
                || check_for_opt_bool_arg(argvars, 2) == FAIL))
        return;
  
      str = tv_get_string_chk(&argvars[0]);
      idx = tv_get_number_chk(&argvars[1], NULL);
      if (str == NULL || idx < 0)
***************
*** 1783,1793 ****
      if (head == NULL)
        return;
  
!     if (argvars[1].v_type != VAR_UNKNOWN && argvars[1].v_type != VAR_STRING)
!     {
!       semsg(_(e_invalid_argument_str), tv_get_string(&argvars[1]));
        return;
-     }
  
      if (argvars[1].v_type == VAR_STRING)
      {
--- 1770,1777 ----
      if (head == NULL)
        return;
  
!     if (check_for_opt_string_arg(argvars, 1) == FAIL)
        return;
  
      if (argvars[1].v_type == VAR_STRING)
      {
*** ../vim-9.0.0358/src/testing.c       2022-08-14 22:22:59.230654518 +0100
--- src/testing.c       2022-09-02 15:11:03.751872711 +0100
***************
*** 970,989 ****
      void
  f_test_getvalue(typval_T *argvars, typval_T *rettv)
  {
!     if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
        return;
  
!     if (argvars[0].v_type != VAR_STRING)
!       emsg(_(e_invalid_argument));
!     else
!     {
!       char_u *name = tv_get_string(&argvars[0]);
  
!       if (STRCMP(name, (char_u *)"need_fileinfo") == 0)
!           rettv->vval.v_number = need_fileinfo;
!       else
!           semsg(_(e_invalid_argument_str), name);
!     }
  }
  
  /*
--- 970,986 ----
      void
  f_test_getvalue(typval_T *argvars, typval_T *rettv)
  {
!     char_u *name;
! 
!     if (check_for_string_arg(argvars, 0) == FAIL)
        return;
  
!     name = tv_get_string(&argvars[0]);
  
!     if (STRCMP(name, (char_u *)"need_fileinfo") == 0)
!       rettv->vval.v_number = need_fileinfo;
!     else
!       semsg(_(e_invalid_argument_str), name);
  }
  
  /*
***************
*** 994,1010 ****
  {
      char_u *name = (char_u *)"";
  
!     if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
        return;
  
!     if (argvars[0].v_type != VAR_STRING)
!       emsg(_(e_invalid_argument));
!     else
!     {
!       name = tv_get_string(&argvars[0]);
!       if (reset_option_was_set(name) == FAIL)
!           semsg(_(e_invalid_argument_str), name);
!     }
  }
  
  /*
--- 991,1002 ----
  {
      char_u *name = (char_u *)"";
  
!     if (check_for_string_arg(argvars, 0) == FAIL)
        return;
  
!     name = tv_get_string(&argvars[0]);
!     if (reset_option_was_set(name) == FAIL)
!       semsg(_(e_invalid_argument_str), name);
  }
  
  /*
***************
*** 1017,1093 ****
      int     val;
      static int save_starting = -1;
  
!     if (in_vim9script()
!           && (check_for_string_arg(argvars, 0) == FAIL
!               || check_for_number_arg(argvars, 1) == FAIL))
        return;
  
!     if (argvars[0].v_type != VAR_STRING
!           || (argvars[1].v_type) != VAR_NUMBER)
!       emsg(_(e_invalid_argument));
!     else
!     {
!       name = tv_get_string(&argvars[0]);
!       val = (int)tv_get_number(&argvars[1]);
  
!       if (STRCMP(name, (char_u *)"redraw") == 0)
!           disable_redraw_for_testing = val;
!       else if (STRCMP(name, (char_u *)"redraw_flag") == 0)
!           ignore_redraw_flag_for_testing = val;
!       else if (STRCMP(name, (char_u *)"char_avail") == 0)
!           disable_char_avail_for_testing = val;
!       else if (STRCMP(name, (char_u *)"starting") == 0)
        {
!           if (val)
!           {
!               if (save_starting < 0)
!                   save_starting = starting;
!               starting = 0;
!           }
!           else
!           {
!               starting = save_starting;
!               save_starting = -1;
!           }
        }
!       else if (STRCMP(name, (char_u *)"nfa_fail") == 0)
!           nfa_fail_for_testing = val;
!       else if (STRCMP(name, (char_u *)"no_query_mouse") == 0)
!           no_query_mouse_for_testing = val;
!       else if (STRCMP(name, (char_u *)"no_wait_return") == 0)
!           no_wait_return = val;
!       else if (STRCMP(name, (char_u *)"ui_delay") == 0)
!           ui_delay_for_testing = val;
!       else if (STRCMP(name, (char_u *)"term_props") == 0)
!           reset_term_props_on_termresponse = val;
!       else if (STRCMP(name, (char_u *)"vterm_title") == 0)
!           disable_vterm_title_for_testing = val;
!       else if (STRCMP(name, (char_u *)"uptime") == 0)
!           override_sysinfo_uptime = val;
!       else if (STRCMP(name, (char_u *)"alloc_lines") == 0)
!           ml_get_alloc_lines = val;
!       else if (STRCMP(name, (char_u *)"autoload") == 0)
!           override_autoload = val;
!       else if (STRCMP(name, (char_u *)"ALL") == 0)
        {
!           disable_char_avail_for_testing = FALSE;
!           disable_redraw_for_testing = FALSE;
!           ignore_redraw_flag_for_testing = FALSE;
!           nfa_fail_for_testing = FALSE;
!           no_query_mouse_for_testing = FALSE;
!           ui_delay_for_testing = 0;
!           reset_term_props_on_termresponse = FALSE;
!           override_sysinfo_uptime = -1;
!           // ml_get_alloc_lines is not reset by "ALL"
!           if (save_starting >= 0)
!           {
!               starting = save_starting;
!               save_starting = -1;
!           }
        }
-       else
-           semsg(_(e_invalid_argument_str), name);
      }
  }
  
  /*
--- 1009,1078 ----
      int     val;
      static int save_starting = -1;
  
!     if (check_for_string_arg(argvars, 0) == FAIL
!               || check_for_number_arg(argvars, 1) == FAIL)
        return;
  
!     name = tv_get_string(&argvars[0]);
!     val = (int)tv_get_number(&argvars[1]);
  
!     if (STRCMP(name, (char_u *)"redraw") == 0)
!       disable_redraw_for_testing = val;
!     else if (STRCMP(name, (char_u *)"redraw_flag") == 0)
!       ignore_redraw_flag_for_testing = val;
!     else if (STRCMP(name, (char_u *)"char_avail") == 0)
!       disable_char_avail_for_testing = val;
!     else if (STRCMP(name, (char_u *)"starting") == 0)
!     {
!       if (val)
        {
!           if (save_starting < 0)
!               save_starting = starting;
!           starting = 0;
        }
!       else
        {
!           starting = save_starting;
!           save_starting = -1;
!       }
!     }
!     else if (STRCMP(name, (char_u *)"nfa_fail") == 0)
!       nfa_fail_for_testing = val;
!     else if (STRCMP(name, (char_u *)"no_query_mouse") == 0)
!       no_query_mouse_for_testing = val;
!     else if (STRCMP(name, (char_u *)"no_wait_return") == 0)
!       no_wait_return = val;
!     else if (STRCMP(name, (char_u *)"ui_delay") == 0)
!       ui_delay_for_testing = val;
!     else if (STRCMP(name, (char_u *)"term_props") == 0)
!       reset_term_props_on_termresponse = val;
!     else if (STRCMP(name, (char_u *)"vterm_title") == 0)
!       disable_vterm_title_for_testing = val;
!     else if (STRCMP(name, (char_u *)"uptime") == 0)
!       override_sysinfo_uptime = val;
!     else if (STRCMP(name, (char_u *)"alloc_lines") == 0)
!       ml_get_alloc_lines = val;
!     else if (STRCMP(name, (char_u *)"autoload") == 0)
!       override_autoload = val;
!     else if (STRCMP(name, (char_u *)"ALL") == 0)
!     {
!       disable_char_avail_for_testing = FALSE;
!       disable_redraw_for_testing = FALSE;
!       ignore_redraw_flag_for_testing = FALSE;
!       nfa_fail_for_testing = FALSE;
!       no_query_mouse_for_testing = FALSE;
!       ui_delay_for_testing = 0;
!       reset_term_props_on_termresponse = FALSE;
!       override_sysinfo_uptime = -1;
!       // ml_get_alloc_lines is not reset by "ALL"
!       if (save_starting >= 0)
!       {
!           starting = save_starting;
!           save_starting = -1;
        }
      }
+     else
+       semsg(_(e_invalid_argument_str), name);
  }
  
  /*
***************
*** 1184,1196 ****
      void
  f_test_ignore_error(typval_T *argvars, typval_T *rettv UNUSED)
  {
!     if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
        return;
  
!     if (argvars[0].v_type != VAR_STRING)
!       emsg(_(e_invalid_argument));
!     else
!       ignore_error_for_testing(tv_get_string(&argvars[0]));
  }
  
      void
--- 1169,1178 ----
      void
  f_test_ignore_error(typval_T *argvars, typval_T *rettv UNUSED)
  {
!     if (check_for_string_arg(argvars, 0) == FAIL)
        return;
  
!     ignore_error_for_testing(tv_get_string(&argvars[0]));
  }
  
      void
***************
*** 1271,1277 ****
                || check_for_number_arg(argvars, 1) == FAIL))
        return;
  
!     if (argvars[0].v_type != VAR_NUMBER || (argvars[1].v_type) != VAR_NUMBER)
      {
        emsg(_(e_invalid_argument));
        return;
--- 1253,1259 ----
                || check_for_number_arg(argvars, 1) == FAIL))
        return;
  
!     if (argvars[0].v_type != VAR_NUMBER || argvars[1].v_type != VAR_NUMBER)
      {
        emsg(_(e_invalid_argument));
        return;
*** ../vim-9.0.0358/src/time.c  2022-08-30 19:48:17.206760205 +0100
--- src/time.c  2022-09-02 15:11:03.755872705 +0100
***************
*** 805,823 ****
      if (rettv_list_alloc(rettv) == FAIL)
        return;
  
!     if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL)
        return;
  
      if (argvars[0].v_type != VAR_UNKNOWN)
      {
!       if (argvars[0].v_type != VAR_NUMBER)
!           emsg(_(e_number_expected));
!       else
!       {
!           timer = find_timer((int)tv_get_number(&argvars[0]));
!           if (timer != NULL)
!               add_timer_info(rettv, timer);
!       }
      }
      else
        add_timer_info_all(rettv);
--- 805,818 ----
      if (rettv_list_alloc(rettv) == FAIL)
        return;
  
!     if (check_for_opt_number_arg(argvars, 0) == FAIL)
        return;
  
      if (argvars[0].v_type != VAR_UNKNOWN)
      {
!       timer = find_timer((int)tv_get_number(&argvars[0]));
!       if (timer != NULL)
!           add_timer_info(rettv, timer);
      }
      else
        add_timer_info_all(rettv);
***************
*** 909,922 ****
  {
      timer_T *timer;
  
!     if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL)
        return;
  
-     if (argvars[0].v_type != VAR_NUMBER)
-     {
-       emsg(_(e_number_expected));
-       return;
-     }
      timer = find_timer((int)tv_get_number(&argvars[0]));
      if (timer != NULL)
        stop_timer(timer);
--- 904,912 ----
  {
      timer_T *timer;
  
!     if (check_for_number_arg(argvars, 0) == FAIL)
        return;
  
      timer = find_timer((int)tv_get_number(&argvars[0]));
      if (timer != NULL)
        stop_timer(timer);
*** ../vim-9.0.0358/src/testdir/test_assert.vim 2022-08-14 22:22:59.230654518 
+0100
--- src/testdir/test_assert.vim 2022-09-02 15:11:03.751872711 +0100
***************
*** 368,374 ****
    eval 1->test_override('redraw')
    call test_override('ALL', 0)
    call assert_fails("call test_override('xxx', 1)", 'E475:')
!   call assert_fails("call test_override('redraw', 'yes')", 'E474:')
  endfunc
  
  func Test_mouse_position()
--- 368,374 ----
    eval 1->test_override('redraw')
    call test_override('ALL', 0)
    call assert_fails("call test_override('xxx', 1)", 'E475:')
!   call assert_fails("call test_override('redraw', 'yes')", 'E1210:')
  endfunc
  
  func Test_mouse_position()
*** ../vim-9.0.0358/src/testdir/test_cmdline.vim        2022-09-01 
12:58:46.584970141 +0100
--- src/testdir/test_cmdline.vim        2022-09-02 15:11:03.751872711 +0100
***************
*** 605,611 ****
  
    call assert_fails("call getcompletion('\\\\@!\\\\@=', 'buffer')", 'E871:')
    call assert_fails('call getcompletion("", "burp")', 'E475:')
!   call assert_fails('call getcompletion("abc", [])', 'E475:')
  endfunc
  
  " Test for getcompletion() with "fuzzy" in 'wildoptions'
--- 605,611 ----
  
    call assert_fails("call getcompletion('\\\\@!\\\\@=', 'buffer')", 'E871:')
    call assert_fails('call getcompletion("", "burp")', 'E475:')
!   call assert_fails('call getcompletion("abc", [])', 'E1174:')
  endfunc
  
  " Test for getcompletion() with "fuzzy" in 'wildoptions'
*** ../vim-9.0.0358/src/testdir/test_functions.vim      2022-09-01 
12:22:19.747659165 +0100
--- src/testdir/test_functions.vim      2022-09-02 15:11:03.751872711 +0100
***************
*** 1247,1257 ****
    call assert_equal(-1, charidx(a, 8, 1))
    call assert_equal(-1, charidx('', 0, 1))
  
!   call assert_fails('let x = charidx([], 1)', 'E474:')
!   call assert_fails('let x = charidx("abc", [])', 'E474:')
!   call assert_fails('let x = charidx("abc", 1, [])', 'E474:')
!   call assert_fails('let x = charidx("abc", 1, -1)', 'E1023:')
!   call assert_fails('let x = charidx("abc", 1, 2)', 'E1023:')
  endfunc
  
  func Test_count()
--- 1247,1257 ----
    call assert_equal(-1, charidx(a, 8, 1))
    call assert_equal(-1, charidx('', 0, 1))
  
!   call assert_fails('let x = charidx([], 1)', 'E1174:')
!   call assert_fails('let x = charidx("abc", [])', 'E1210:')
!   call assert_fails('let x = charidx("abc", 1, [])', 'E1212:')
!   call assert_fails('let x = charidx("abc", 1, -1)', 'E1212:')
!   call assert_fails('let x = charidx("abc", 1, 2)', 'E1212:')
  endfunc
  
  func Test_count()
***************
*** 1738,1744 ****
    call assert_fails('eval trim("  vim  ", " ", [])', 'E745:')
    call assert_fails('eval trim("  vim  ", " ", -1)', 'E475:')
    call assert_fails('eval trim("  vim  ", " ", 3)', 'E475:')
!   call assert_fails('eval trim("  vim  ", 0)', 'E475:')
  
    let chars = join(map(range(1, 0x20) + [0xa0], {n -> n->nr2char()}), '')
    call assert_equal("x", trim(chars . "x" . chars))
--- 1738,1744 ----
    call assert_fails('eval trim("  vim  ", " ", [])', 'E745:')
    call assert_fails('eval trim("  vim  ", " ", -1)', 'E475:')
    call assert_fails('eval trim("  vim  ", " ", 3)', 'E475:')
!   call assert_fails('eval trim("  vim  ", 0)', 'E1174:')
  
    let chars = join(map(range(1, 0x20) + [0xa0], {n -> n->nr2char()}), '')
    call assert_equal("x", trim(chars . "x" . chars))
***************
*** 2913,2919 ****
  
  " Test for gettext()
  func Test_gettext()
!   call assert_fails('call gettext(1)', 'E475:')
  endfunc
  
  func Test_builtin_check()
--- 2913,2919 ----
  
  " Test for gettext()
  func Test_gettext()
!   call assert_fails('call gettext(1)', 'E1174:')
  endfunc
  
  func Test_builtin_check()
*** ../vim-9.0.0358/src/testdir/test_listdict.vim       2022-08-30 
19:48:17.206760205 +0100
--- src/testdir/test_listdict.vim       2022-09-02 15:11:03.751872711 +0100
***************
*** 568,574 ****
    END
    call v9.CheckLegacyAndVim9Success(lines)
  
!   call assert_fails("call deepcopy([1, 2], 2)", 'E1023:')
  endfunc
  
  " Locked variables
--- 568,574 ----
    END
    call v9.CheckLegacyAndVim9Success(lines)
  
!   call assert_fails("call deepcopy([1, 2], 2)", 'E1212:')
  endfunc
  
  " Locked variables
***************
*** 1044,1059 ****
    call assert_fails("call reduce({}, { acc, val -> acc + val }, 1)", 'E1098:')
    call assert_fails("call reduce(0, { acc, val -> acc + val }, 1)", 'E1098:')
    call assert_fails("call reduce([1, 2], 'Xdoes_not_exist')", 'E117:')
!   call assert_fails("echo reduce(0z01, { acc, val -> 2 * acc + val }, '')", 
'E39:')
  
    call assert_fails("vim9 reduce(0, (acc, val) => (acc .. val), '')", 
'E1252:')
    call assert_fails("vim9 reduce({}, (acc, val) => (acc .. val), '')", 
'E1252:')
    call assert_fails("vim9 reduce(0.1, (acc, val) => (acc .. val), '')", 
'E1252:')
    call assert_fails("vim9 reduce(function('tr'), (acc, val) => (acc .. val), 
'')", 'E1252:')
!   call assert_fails("call reduce('', { acc, val -> acc + val }, 1)", 'E1253:')
!   call assert_fails("call reduce('', { acc, val -> acc + val }, {})", 
'E1253:')
!   call assert_fails("call reduce('', { acc, val -> acc + val }, 0.1)", 
'E1253:')
!   call assert_fails("call reduce('', { acc, val -> acc + val }, 
function('tr'))", 'E1253:')
    call assert_fails("call reduce('abc', { a, v -> a10}, '')", 'E121:')
    call assert_fails("call reduce(0z0102, { a, v -> a10}, 1)", 'E121:')
    call assert_fails("call reduce([1, 2], { a, v -> a10}, '')", 'E121:')
--- 1044,1059 ----
    call assert_fails("call reduce({}, { acc, val -> acc + val }, 1)", 'E1098:')
    call assert_fails("call reduce(0, { acc, val -> acc + val }, 1)", 'E1098:')
    call assert_fails("call reduce([1, 2], 'Xdoes_not_exist')", 'E117:')
!   call assert_fails("echo reduce(0z01, { acc, val -> 2 * acc + val }, '')", 
'E1210:')
  
    call assert_fails("vim9 reduce(0, (acc, val) => (acc .. val), '')", 
'E1252:')
    call assert_fails("vim9 reduce({}, (acc, val) => (acc .. val), '')", 
'E1252:')
    call assert_fails("vim9 reduce(0.1, (acc, val) => (acc .. val), '')", 
'E1252:')
    call assert_fails("vim9 reduce(function('tr'), (acc, val) => (acc .. val), 
'')", 'E1252:')
!   call assert_fails("call reduce('', { acc, val -> acc + val }, 1)", 'E1174:')
!   call assert_fails("call reduce('', { acc, val -> acc + val }, {})", 
'E1174:')
!   call assert_fails("call reduce('', { acc, val -> acc + val }, 0.1)", 
'E1174:')
!   call assert_fails("call reduce('', { acc, val -> acc + val }, 
function('tr'))", 'E1174:')
    call assert_fails("call reduce('abc', { a, v -> a10}, '')", 'E121:')
    call assert_fails("call reduce(0z0102, { a, v -> a10}, 1)", 'E121:')
    call assert_fails("call reduce([1, 2], { a, v -> a10}, '')", 'E121:')
*** ../vim-9.0.0358/src/testdir/test_signs.vim  2022-09-01 12:22:19.751659183 
+0100
--- src/testdir/test_signs.vim  2022-09-02 15:11:03.751872711 +0100
***************
*** 686,692 ****
    call assert_equal([], sign_getplaced(bnum, {'group' : '*'})[0].signs)
  
    " Error case
!   call assert_fails("call sign_unplace({})", 'E474:')
  
    " Place a sign in the global group and try to delete it using a group
    call assert_equal(5, sign_place(5, '', 'sign1', bnum, {'lnum' : 10}))
--- 686,692 ----
    call assert_equal([], sign_getplaced(bnum, {'group' : '*'})[0].signs)
  
    " Error case
!   call assert_fails("call sign_unplace({})", 'E1174:')
  
    " Place a sign in the global group and try to delete it using a group
    call assert_equal(5, sign_place(5, '', 'sign1', bnum, {'lnum' : 10}))
*** ../vim-9.0.0358/src/testdir/test_tagjump.vim        2022-08-30 
19:48:17.210760193 +0100
--- src/testdir/test_tagjump.vim        2022-09-02 15:11:03.751872711 +0100
***************
*** 405,411 ****
    call assert_equal(-1, settagstack(100, {'items' : []}))
    call assert_fails('call settagstack(1, [1, 10])', 'E1206:')
    call assert_fails("call settagstack(1, {'items' : 10})", 'E714:')
!   call assert_fails("call settagstack(1, {'items' : []}, 10)", 'E928:')
    call assert_fails("call settagstack(1, {'items' : []}, 'b')", 'E962:')
    call assert_equal(-1, settagstack(0, test_null_dict()))
  
--- 405,411 ----
    call assert_equal(-1, settagstack(100, {'items' : []}))
    call assert_fails('call settagstack(1, [1, 10])', 'E1206:')
    call assert_fails("call settagstack(1, {'items' : 10})", 'E714:')
!   call assert_fails("call settagstack(1, {'items' : []}, 10)", 'E1174:')
    call assert_fails("call settagstack(1, {'items' : []}, 'b')", 'E962:')
    call assert_equal(-1, settagstack(0, test_null_dict()))
  
*** ../vim-9.0.0358/src/testdir/test_timers.vim 2022-08-30 19:48:17.210760193 
+0100
--- src/testdir/test_timers.vim 2022-09-02 15:11:03.751872711 +0100
***************
*** 116,122 ****
    call timer_stop(id)
    call assert_equal([], timer_info(id))
  
!   call assert_fails('call timer_info("abc")', 'E39:')
  
    " check repeat count inside the callback
    let g:timer_repeat = []
--- 116,122 ----
    call timer_stop(id)
    call assert_equal([], timer_info(id))
  
!   call assert_fails('call timer_info("abc")', 'E1210:')
  
    " check repeat count inside the callback
    let g:timer_repeat = []
***************
*** 267,273 ****
  
    call assert_fails('call timer_start(100, "MyHandler", "abc")', 'E1206:')
    call assert_fails('call timer_start(100, [])', 'E921:')
!   call assert_fails('call timer_stop("abc")', 'E39:')
  endfunc
  
  func FuncWithCaughtError(timer)
--- 267,273 ----
  
    call assert_fails('call timer_start(100, "MyHandler", "abc")', 'E1206:')
    call assert_fails('call timer_start(100, [])', 'E921:')
!   call assert_fails('call timer_stop("abc")', 'E1210:')
  endfunc
  
  func FuncWithCaughtError(timer)
*** ../vim-9.0.0358/src/testdir/test_vim9_builtin.vim   2022-08-30 
17:45:28.787606578 +0100
--- src/testdir/test_vim9_builtin.vim   2022-09-02 15:11:03.751872711 +0100
***************
*** 1961,1969 ****
  
  def Test_gettext()
    v9.CheckDefAndScriptFailure(['gettext(10)'], ['E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1'])
!   v9.CheckDefExecAndScriptFailure(['gettext("")'], 'E475: Invalid argument')
    assert_equal('abc', gettext("abc"))
!   assert_fails('gettext("")', 'E475:')
  enddef
  
  def Test_getwininfo()
--- 1961,1969 ----
  
  def Test_gettext()
    v9.CheckDefAndScriptFailure(['gettext(10)'], ['E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1'])
!   v9.CheckDefExecAndScriptFailure(['gettext("")'], 'E1175: Non-empty string 
required for argument 1')
    assert_equal('abc', gettext("abc"))
!   assert_fails('gettext("")', 'E1175:')
  enddef
  
  def Test_getwininfo()
*** ../vim-9.0.0358/src/version.c       2022-09-02 14:08:50.217794529 +0100
--- src/version.c       2022-09-02 15:11:47.639822363 +0100
***************
*** 709,710 ****
--- 709,712 ----
  {   /* Add new patch number below this line */
+ /**/
+     359,
  /**/

-- 
Lower life forms have more fun!

 /// Bram Moolenaar -- [email protected] -- 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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20220902141651.87CC21C1118%40moolenaar.net.

Raspunde prin e-mail lui