Patch 8.2.3036
Problem:    Vim9: builtin function arguments not checked at compile time.
Solution:   Add more argument type specs. Check arguments to test_setmouse()
            and test_gui_mouse_event(). (Yegappan Lakshmanan, closes #8425)
Files:      src/evalfunc.c, src/testdir/test_assert.vim,
            src/testdir/test_gui.vim, src/testdir/test_popupwin.vim,
            src/testdir/test_vim9_builtin.vim, src/testing.c


*** ../vim-8.2.3035/src/evalfunc.c      2021-06-21 18:43:46.136307978 +0200
--- src/evalfunc.c      2021-06-22 19:46:49.262532114 +0200
***************
*** 403,414 ****
   * Lists of functions that check the argument types of a builtin function.
   */
  argcheck_T arg1_string[] = {arg_string};
! argcheck_T arg3_string_nr_bool[] = {arg_string, arg_number, arg_bool};
  argcheck_T arg1_float_or_nr[] = {arg_float_or_nr};
  argcheck_T arg2_listblob_item[] = {arg_list_or_blob, arg_item_of_prev};
  argcheck_T arg2_execute[] = {arg_string_or_list, arg_string};
  argcheck_T arg23_extend[] = {arg_list_or_dict, arg_same_as_prev, arg_extend3};
  argcheck_T arg23_extendnew[] = {arg_list_or_dict, arg_same_struct_as_prev, 
arg_extend3};
  argcheck_T arg3_insert[] = {arg_list_or_blob, arg_item_of_prev, arg_number};
  
  /*
--- 403,418 ----
   * Lists of functions that check the argument types of a builtin function.
   */
  argcheck_T arg1_string[] = {arg_string};
! argcheck_T arg1_number[] = {arg_number};
  argcheck_T arg1_float_or_nr[] = {arg_float_or_nr};
+ argcheck_T arg2_float_or_nr[] = {arg_float_or_nr, arg_float_or_nr};
+ argcheck_T arg2_number[] = {arg_number, arg_number};
  argcheck_T arg2_listblob_item[] = {arg_list_or_blob, arg_item_of_prev};
  argcheck_T arg2_execute[] = {arg_string_or_list, arg_string};
  argcheck_T arg23_extend[] = {arg_list_or_dict, arg_same_as_prev, arg_extend3};
  argcheck_T arg23_extendnew[] = {arg_list_or_dict, arg_same_struct_as_prev, 
arg_extend3};
+ argcheck_T arg3_string[] = {arg_string, arg_string, arg_string};
+ argcheck_T arg3_string_nr_bool[] = {arg_string, arg_number, arg_bool};
  argcheck_T arg3_insert[] = {arg_list_or_blob, arg_item_of_prev, arg_number};
  
  /*
***************
*** 670,694 ****
  {
      {"abs",           1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_any,            FLOAT_FUNC(f_abs)},
!     {"acos",          1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_acos)},
      {"add",           2, 2, FEARG_1,      NULL /* arg2_listblob_item */,
                        ret_first_arg,      f_add},
!     {"and",           2, 2, FEARG_1,      NULL,
                        ret_number,         f_and},
      {"append",                2, 2, FEARG_2,      NULL,
                        ret_number_bool,    f_append},
      {"appendbufline", 3, 3, FEARG_3,      NULL,
                        ret_number_bool,    f_appendbufline},
!     {"argc",          0, 1, 0,            NULL,
                        ret_number,         f_argc},
      {"argidx",                0, 0, 0,            NULL,
                        ret_number,         f_argidx},
!     {"arglistid",     0, 2, 0,            NULL,
                        ret_number,         f_arglistid},
!     {"argv",          0, 2, 0,            NULL,
                        ret_argv,           f_argv},
!     {"asin",          1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_asin)},
      {"assert_beeps",  1, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_assert_beeps},
--- 674,698 ----
  {
      {"abs",           1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_any,            FLOAT_FUNC(f_abs)},
!     {"acos",          1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_acos)},
      {"add",           2, 2, FEARG_1,      NULL /* arg2_listblob_item */,
                        ret_first_arg,      f_add},
!     {"and",           2, 2, FEARG_1,      arg2_number,
                        ret_number,         f_and},
      {"append",                2, 2, FEARG_2,      NULL,
                        ret_number_bool,    f_append},
      {"appendbufline", 3, 3, FEARG_3,      NULL,
                        ret_number_bool,    f_appendbufline},
!     {"argc",          0, 1, 0,            arg1_number,
                        ret_number,         f_argc},
      {"argidx",                0, 0, 0,            NULL,
                        ret_number,         f_argidx},
!     {"arglistid",     0, 2, 0,            arg2_number,
                        ret_number,         f_arglistid},
!     {"argv",          0, 2, 0,            arg2_number,
                        ret_argv,           f_argv},
!     {"asin",          1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_asin)},
      {"assert_beeps",  1, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_assert_beeps},
***************
*** 716,724 ****
                        ret_number_bool,    f_assert_report},
      {"assert_true",   1, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_assert_true},
!     {"atan",          1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_atan)},
!     {"atan2",         2, 2, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_atan2)},
      {"balloon_gettext",       0, 0, 0,            NULL,
                        ret_string,
--- 720,728 ----
                        ret_number_bool,    f_assert_report},
      {"assert_true",   1, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_assert_true},
!     {"atan",          1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_atan)},
!     {"atan2",         2, 2, FEARG_1,      arg2_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_atan2)},
      {"balloon_gettext",       0, 0, 0,            NULL,
                        ret_string,
***************
*** 780,786 ****
                        ret_number,         f_byteidxcomp},
      {"call",          2, 3, FEARG_1,      NULL,
                        ret_any,            f_call},
!     {"ceil",          1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_ceil)},
      {"ch_canread",    1, 1, FEARG_1,      NULL,
                        ret_number_bool,    JOB_FUNC(f_ch_canread)},
--- 784,790 ----
                        ret_number,         f_byteidxcomp},
      {"call",          2, 3, FEARG_1,      NULL,
                        ret_any,            f_call},
!     {"ceil",          1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_ceil)},
      {"ch_canread",    1, 1, FEARG_1,      NULL,
                        ret_number_bool,    JOB_FUNC(f_ch_canread)},
***************
*** 832,838 ****
                        ret_string,         f_chdir},
      {"cindent",               1, 1, FEARG_1,      NULL,
                        ret_number,         f_cindent},
!     {"clearmatches",  0, 1, FEARG_1,      NULL,
                        ret_void,           f_clearmatches},
      {"col",           1, 1, FEARG_1,      NULL,
                        ret_number,         f_col},
--- 836,842 ----
                        ret_string,         f_chdir},
      {"cindent",               1, 1, FEARG_1,      NULL,
                        ret_number,         f_cindent},
!     {"clearmatches",  0, 1, FEARG_1,      arg1_number,
                        ret_void,           f_clearmatches},
      {"col",           1, 1, FEARG_1,      NULL,
                        ret_number,         f_col},
***************
*** 848,856 ****
                        ret_number,         f_confirm},
      {"copy",          1, 1, FEARG_1,      NULL,
                        ret_first_arg,      f_copy},
!     {"cos",           1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_cos)},
!     {"cosh",          1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_cosh)},
      {"count",         2, 4, FEARG_1,      NULL,
                        ret_number,         f_count},
--- 852,860 ----
                        ret_number,         f_confirm},
      {"copy",          1, 1, FEARG_1,      NULL,
                        ret_first_arg,      f_copy},
!     {"cos",           1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_cos)},
!     {"cosh",          1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_cosh)},
      {"count",         2, 4, FEARG_1,      NULL,
                        ret_number,         f_count},
***************
*** 858,864 ****
                        ret_number,         f_cscope_connection},
      {"cursor",                1, 3, FEARG_1,      NULL,
                        ret_number,         f_cursor},
!     {"debugbreak",    1, 1, FEARG_1,      NULL,
                        ret_number,
  #ifdef MSWIN
            f_debugbreak
--- 862,868 ----
                        ret_number,         f_cscope_connection},
      {"cursor",                1, 3, FEARG_1,      NULL,
                        ret_number,         f_cursor},
!     {"debugbreak",    1, 1, FEARG_1,      arg1_number,
                        ret_number,
  #ifdef MSWIN
            f_debugbreak
***************
*** 898,904 ****
                        ret_string,         f_exepath},
      {"exists",                1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_exists},
!     {"exp",           1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_exp)},
      {"expand",                1, 3, FEARG_1,      NULL,
                        ret_any,            f_expand},
--- 902,908 ----
                        ret_string,         f_exepath},
      {"exists",                1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_exists},
!     {"exp",           1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_exp)},
      {"expand",                1, 3, FEARG_1,      NULL,
                        ret_any,            f_expand},
***************
*** 926,936 ****
                        ret_list_any,       f_flatten},
      {"flattennew",    1, 2, FEARG_1,      NULL,
                        ret_list_any,       f_flattennew},
!     {"float2nr",      1, 1, FEARG_1,      NULL,
                        ret_number,         FLOAT_FUNC(f_float2nr)},
!     {"floor",         1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_floor)},
!     {"fmod",          2, 2, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_fmod)},
      {"fnameescape",   1, 1, FEARG_1,      NULL,
                        ret_string,         f_fnameescape},
--- 930,940 ----
                        ret_list_any,       f_flatten},
      {"flattennew",    1, 2, FEARG_1,      NULL,
                        ret_list_any,       f_flattennew},
!     {"float2nr",      1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_number,         FLOAT_FUNC(f_float2nr)},
!     {"floor",         1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_floor)},
!     {"fmod",          2, 2, FEARG_1,      arg2_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_fmod)},
      {"fnameescape",   1, 1, FEARG_1,      NULL,
                        ret_string,         f_fnameescape},
***************
*** 986,996 ****
                        ret_string,         f_getcmdwintype},
      {"getcompletion", 2, 3, FEARG_1,      NULL,
                        ret_list_string,    f_getcompletion},
!     {"getcurpos",     0, 1, FEARG_1,      NULL,
                        ret_list_number,    f_getcurpos},
!     {"getcursorcharpos",      0, 1, FEARG_1,      NULL,
                        ret_list_number,    f_getcursorcharpos},
!     {"getcwd",                0, 2, FEARG_1,      NULL,
                        ret_string,         f_getcwd},
      {"getenv",                1, 1, FEARG_1,      NULL,
                        ret_any,            f_getenv},
--- 990,1000 ----
                        ret_string,         f_getcmdwintype},
      {"getcompletion", 2, 3, FEARG_1,      NULL,
                        ret_list_string,    f_getcompletion},
!     {"getcurpos",     0, 1, FEARG_1,      arg1_number,
                        ret_list_number,    f_getcurpos},
!     {"getcursorcharpos",      0, 1, FEARG_1,      arg1_number,
                        ret_list_number,    f_getcursorcharpos},
!     {"getcwd",                0, 2, FEARG_1,      arg2_number,
                        ret_string,         f_getcwd},
      {"getenv",                1, 1, FEARG_1,      NULL,
                        ret_any,            f_getenv},
***************
*** 1006,1012 ****
                        ret_string,         f_getftype},
      {"getimstatus",   0, 0, 0,            NULL,
                        ret_number_bool,    f_getimstatus},
!     {"getjumplist",   0, 2, FEARG_1,      NULL,
                        ret_list_any,       f_getjumplist},
      {"getline",               1, 2, FEARG_1,      NULL,
                        ret_f_getline,      f_getline},
--- 1010,1016 ----
                        ret_string,         f_getftype},
      {"getimstatus",   0, 0, 0,            NULL,
                        ret_number_bool,    f_getimstatus},
!     {"getjumplist",   0, 2, FEARG_1,      arg2_number,
                        ret_list_any,       f_getjumplist},
      {"getline",               1, 2, FEARG_1,      NULL,
                        ret_f_getline,      f_getline},
***************
*** 1014,1020 ****
                        ret_list_or_dict_1, f_getloclist},
      {"getmarklist",   0, 1, FEARG_1,      NULL,
                        ret_list_dict_any,  f_getmarklist},
!     {"getmatches",    0, 1, 0,            NULL,
                        ret_list_dict_any,  f_getmatches},
      {"getmousepos",   0, 0, 0,            NULL,
                        ret_dict_number,    f_getmousepos},
--- 1018,1024 ----
                        ret_list_or_dict_1, f_getloclist},
      {"getmarklist",   0, 1, FEARG_1,      NULL,
                        ret_list_dict_any,  f_getmarklist},
!     {"getmatches",    0, 1, 0,            arg1_number,
                        ret_list_dict_any,  f_getmatches},
      {"getmousepos",   0, 0, 0,            NULL,
                        ret_dict_number,    f_getmousepos},
***************
*** 1030,1048 ****
                        ret_dict_any,       f_getreginfo},
      {"getregtype",    0, 1, FEARG_1,      NULL,
                        ret_string,         f_getregtype},
!     {"gettabinfo",    0, 1, FEARG_1,      NULL,
                        ret_list_dict_any,  f_gettabinfo},
      {"gettabvar",     2, 3, FEARG_1,      NULL,
                        ret_any,            f_gettabvar},
      {"gettabwinvar",  3, 4, FEARG_1,      NULL,
                        ret_any,            f_gettabwinvar},
!     {"gettagstack",   0, 1, FEARG_1,      NULL,
                        ret_dict_any,       f_gettagstack},
      {"gettext",               1, 1, FEARG_1,      NULL,
                        ret_string,         f_gettext},
!     {"getwininfo",    0, 1, FEARG_1,      NULL,
                        ret_list_dict_any,  f_getwininfo},
!     {"getwinpos",     0, 1, FEARG_1,      NULL,
                        ret_list_number,    f_getwinpos},
      {"getwinposx",    0, 0, 0,            NULL,
                        ret_number,         f_getwinposx},
--- 1034,1052 ----
                        ret_dict_any,       f_getreginfo},
      {"getregtype",    0, 1, FEARG_1,      NULL,
                        ret_string,         f_getregtype},
!     {"gettabinfo",    0, 1, FEARG_1,      arg1_number,
                        ret_list_dict_any,  f_gettabinfo},
      {"gettabvar",     2, 3, FEARG_1,      NULL,
                        ret_any,            f_gettabvar},
      {"gettabwinvar",  3, 4, FEARG_1,      NULL,
                        ret_any,            f_gettabwinvar},
!     {"gettagstack",   0, 1, FEARG_1,      arg1_number,
                        ret_dict_any,       f_gettagstack},
      {"gettext",               1, 1, FEARG_1,      NULL,
                        ret_string,         f_gettext},
!     {"getwininfo",    0, 1, FEARG_1,      arg1_number,
                        ret_list_dict_any,  f_getwininfo},
!     {"getwinpos",     0, 1, FEARG_1,      arg1_number,
                        ret_list_number,    f_getwinpos},
      {"getwinposx",    0, 0, 0,            NULL,
                        ret_number,         f_getwinposx},
***************
*** 1060,1066 ****
                        ret_number_bool,    f_has},
      {"has_key",               2, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_has_key},
!     {"haslocaldir",   0, 2, FEARG_1,      NULL,
                        ret_number,         f_haslocaldir},
      {"hasmapto",      1, 3, FEARG_1,      NULL,
                        ret_number_bool,    f_hasmapto},
--- 1064,1070 ----
                        ret_number_bool,    f_has},
      {"has_key",               2, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_has_key},
!     {"haslocaldir",   0, 2, FEARG_1,      arg2_number,
                        ret_number,         f_haslocaldir},
      {"hasmapto",      1, 3, FEARG_1,      NULL,
                        ret_number_bool,    f_hasmapto},
***************
*** 1104,1118 ****
                        ret_first_arg,      f_insert},
      {"interrupt",     0, 0, 0,            NULL,
                        ret_void,           f_interrupt},
!     {"invert",                1, 1, FEARG_1,      NULL,
                        ret_number,         f_invert},
      {"isdirectory",   1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_isdirectory},
!     {"isinf",         1, 1, FEARG_1,      NULL,
                        ret_number,         MATH_FUNC(f_isinf)},
      {"islocked",      1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_islocked},
!     {"isnan",         1, 1, FEARG_1,      NULL,
                        ret_number_bool,    MATH_FUNC(f_isnan)},
      {"items",         1, 1, FEARG_1,      NULL,
                        ret_list_any,       f_items},
--- 1108,1122 ----
                        ret_first_arg,      f_insert},
      {"interrupt",     0, 0, 0,            NULL,
                        ret_void,           f_interrupt},
!     {"invert",                1, 1, FEARG_1,      arg1_number,
                        ret_number,         f_invert},
      {"isdirectory",   1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_isdirectory},
!     {"isinf",         1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_number,         MATH_FUNC(f_isinf)},
      {"islocked",      1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_islocked},
!     {"isnan",         1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_number_bool,    MATH_FUNC(f_isnan)},
      {"items",         1, 1, FEARG_1,      NULL,
                        ret_list_any,       f_items},
***************
*** 1160,1172 ****
                        ret_number,         f_listener_add},
      {"listener_flush",        0, 1, FEARG_1,      NULL,
                        ret_void,           f_listener_flush},
!     {"listener_remove",       1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_listener_remove},
      {"localtime",     0, 0, 0,            NULL,
                        ret_number,         f_localtime},
!     {"log",           1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_log)},
!     {"log10",         1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_log10)},
      {"luaeval",               1, 2, FEARG_1,      NULL,
                        ret_any,
--- 1164,1176 ----
                        ret_number,         f_listener_add},
      {"listener_flush",        0, 1, FEARG_1,      NULL,
                        ret_void,           f_listener_flush},
!     {"listener_remove",       1, 1, FEARG_1,      arg1_number,
                        ret_number_bool,    f_listener_remove},
      {"localtime",     0, 0, 0,            NULL,
                        ret_number,         f_localtime},
!     {"log",           1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_log)},
!     {"log10",         1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_log10)},
      {"luaeval",               1, 2, FEARG_1,      NULL,
                        ret_any,
***************
*** 1192,1200 ****
                        ret_number,         f_matchadd},
      {"matchaddpos",   2, 5, FEARG_1,      NULL,
                        ret_number,         f_matchaddpos},
!     {"matcharg",      1, 1, FEARG_1,      NULL,
                        ret_list_string,    f_matcharg},
!     {"matchdelete",   1, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_matchdelete},
      {"matchend",      2, 4, FEARG_1,      NULL,
                        ret_number,         f_matchend},
--- 1196,1204 ----
                        ret_number,         f_matchadd},
      {"matchaddpos",   2, 5, FEARG_1,      NULL,
                        ret_number,         f_matchaddpos},
!     {"matcharg",      1, 1, FEARG_1,      arg1_number,
                        ret_list_string,    f_matcharg},
!     {"matchdelete",   1, 2, FEARG_1,      arg2_number,
                        ret_number_bool,    f_matchdelete},
      {"matchend",      2, 4, FEARG_1,      NULL,
                        ret_number,         f_matchend},
***************
*** 1236,1242 ****
                        ret_number,         f_nextnonblank},
      {"nr2char",               1, 2, FEARG_1,      NULL,
                        ret_string,         f_nr2char},
!     {"or",            2, 2, FEARG_1,      NULL,
                        ret_number,         f_or},
      {"pathshorten",   1, 2, FEARG_1,      NULL,
                        ret_string,         f_pathshorten},
--- 1240,1246 ----
                        ret_number,         f_nextnonblank},
      {"nr2char",               1, 2, FEARG_1,      NULL,
                        ret_string,         f_nr2char},
!     {"or",            2, 2, FEARG_1,      arg2_number,
                        ret_number,         f_or},
      {"pathshorten",   1, 2, FEARG_1,      NULL,
                        ret_string,         f_pathshorten},
***************
*** 1290,1296 ****
                        ret_void,           PROP_FUNC(f_popup_settext)},
      {"popup_show",    1, 1, FEARG_1,      NULL,
                        ret_void,           PROP_FUNC(f_popup_show)},
!     {"pow",           2, 2, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_pow)},
      {"prevnonblank",  1, 1, FEARG_1,      NULL,
                        ret_number,         f_prevnonblank},
--- 1294,1300 ----
                        ret_void,           PROP_FUNC(f_popup_settext)},
      {"popup_show",    1, 1, FEARG_1,      NULL,
                        ret_void,           PROP_FUNC(f_popup_show)},
!     {"pow",           2, 2, FEARG_1,      arg2_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_pow)},
      {"prevnonblank",  1, 1, FEARG_1,      NULL,
                        ret_number,         f_prevnonblank},
***************
*** 1398,1404 ****
                        ret_string,         f_resolve},
      {"reverse",               1, 1, FEARG_1,      NULL,
                        ret_first_arg,      f_reverse},
!     {"round",         1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_round)},
      {"rubyeval",      1, 1, FEARG_1,      NULL,
                        ret_any,
--- 1402,1408 ----
                        ret_string,         f_resolve},
      {"reverse",               1, 1, FEARG_1,      NULL,
                        ret_first_arg,      f_reverse},
!     {"round",         1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_round)},
      {"rubyeval",      1, 1, FEARG_1,      NULL,
                        ret_any,
***************
*** 1408,1418 ****
            NULL
  #endif
                        },
!     {"screenattr",    2, 2, FEARG_1,      NULL,
                        ret_number,         f_screenattr},
!     {"screenchar",    2, 2, FEARG_1,      NULL,
                        ret_number,         f_screenchar},
!     {"screenchars",   2, 2, FEARG_1,      NULL,
                        ret_list_number,    f_screenchars},
      {"screencol",     0, 0, 0,            NULL,
                        ret_number,         f_screencol},
--- 1412,1422 ----
            NULL
  #endif
                        },
!     {"screenattr",    2, 2, FEARG_1,      arg2_number,
                        ret_number,         f_screenattr},
!     {"screenchar",    2, 2, FEARG_1,      arg2_number,
                        ret_number,         f_screenchar},
!     {"screenchars",   2, 2, FEARG_1,      arg2_number,
                        ret_list_number,    f_screenchars},
      {"screencol",     0, 0, 0,            NULL,
                        ret_number,         f_screencol},
***************
*** 1420,1426 ****
                        ret_dict_number,    f_screenpos},
      {"screenrow",     0, 0, 0,            NULL,
                        ret_number,         f_screenrow},
!     {"screenstring",  2, 2, FEARG_1,      NULL,
                        ret_string,         f_screenstring},
      {"search",                1, 5, FEARG_1,      NULL,
                        ret_number,         f_search},
--- 1424,1430 ----
                        ret_dict_number,    f_screenpos},
      {"screenrow",     0, 0, 0,            NULL,
                        ret_number,         f_screenrow},
!     {"screenstring",  2, 2, FEARG_1,      arg2_number,
                        ret_string,         f_screenstring},
      {"search",                1, 5, FEARG_1,      NULL,
                        ret_number,         f_search},
***************
*** 1448,1454 ****
                        ret_number_bool,    f_setcharpos},
      {"setcharsearch", 1, 1, FEARG_1,      NULL,
                        ret_void,           f_setcharsearch},
!     {"setcmdpos",     1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_setcmdpos},
      {"setcursorcharpos", 1, 3, FEARG_1,           NULL,
                        ret_number_bool,    f_setcursorcharpos},
--- 1452,1458 ----
                        ret_number_bool,    f_setcharpos},
      {"setcharsearch", 1, 1, FEARG_1,      NULL,
                        ret_void,           f_setcharsearch},
!     {"setcmdpos",     1, 1, FEARG_1,      arg1_number,
                        ret_number_bool,    f_setcmdpos},
      {"setcursorcharpos", 1, 3, FEARG_1,           NULL,
                        ret_number_bool,    f_setcursorcharpos},
***************
*** 1486,1492 ****
                        },
      {"shellescape",   1, 2, FEARG_1,      NULL,
                        ret_string,         f_shellescape},
!     {"shiftwidth",    0, 1, FEARG_1,      NULL,
                        ret_number,         f_shiftwidth},
      {"sign_define",   1, 2, FEARG_1,      NULL,
                        ret_any,            SIGN_FUNC(f_sign_define)},
--- 1490,1496 ----
                        },
      {"shellescape",   1, 2, FEARG_1,      NULL,
                        ret_string,         f_shellescape},
!     {"shiftwidth",    0, 1, FEARG_1,      arg1_number,
                        ret_number,         f_shiftwidth},
      {"sign_define",   1, 2, FEARG_1,      NULL,
                        ret_any,            SIGN_FUNC(f_sign_define)},
***************
*** 1508,1516 ****
                        ret_list_number,    SIGN_FUNC(f_sign_unplacelist)},
      {"simplify",      1, 1, FEARG_1,      NULL,
                        ret_string,         f_simplify},
!     {"sin",           1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_sin)},
!     {"sinh",          1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_sinh)},
      {"slice",         2, 3, FEARG_1,      NULL,
                        ret_first_arg,      f_slice},
--- 1512,1520 ----
                        ret_list_number,    SIGN_FUNC(f_sign_unplacelist)},
      {"simplify",      1, 1, FEARG_1,      NULL,
                        ret_string,         f_simplify},
!     {"sin",           1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_sin)},
!     {"sinh",          1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_sinh)},
      {"slice",         2, 3, FEARG_1,      NULL,
                        ret_first_arg,      f_slice},
***************
*** 1532,1538 ****
                        ret_list_string,    f_spellsuggest},
      {"split",         1, 3, FEARG_1,      NULL,
                        ret_list_string,    f_split},
!     {"sqrt",          1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_sqrt)},
      {"srand",         0, 1, FEARG_1,      NULL,
                        ret_list_number,    f_srand},
--- 1536,1542 ----
                        ret_list_string,    f_spellsuggest},
      {"split",         1, 3, FEARG_1,      NULL,
                        ret_list_string,    f_split},
!     {"sqrt",          1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_sqrt)},
      {"srand",         0, 1, FEARG_1,      NULL,
                        ret_list_number,    f_srand},
***************
*** 1616,1624 ****
                        ret_list_string,    f_tagfiles},
      {"taglist",               1, 2, FEARG_1,      NULL,
                        ret_list_dict_any,  f_taglist},
!     {"tan",           1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_tan)},
!     {"tanh",          1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_tanh)},
      {"tempname",      0, 0, 0,            NULL,
                        ret_string,         f_tempname},
--- 1620,1628 ----
                        ret_list_string,    f_tagfiles},
      {"taglist",               1, 2, FEARG_1,      NULL,
                        ret_list_dict_any,  f_taglist},
!     {"tan",           1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_tan)},
!     {"tanh",          1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_tanh)},
      {"tempname",      0, 0, 0,            NULL,
                        ret_string,         f_tempname},
***************
*** 1750,1764 ****
                        ret_void,           TIMER_FUNC(f_timer_stop)},
      {"timer_stopall", 0, 0, 0,            NULL,
                        ret_void,           TIMER_FUNC(f_timer_stopall)},
!     {"tolower",               1, 1, FEARG_1,      NULL,
                        ret_string,         f_tolower},
!     {"toupper",               1, 1, FEARG_1,      NULL,
                        ret_string,         f_toupper},
!     {"tr",            3, 3, FEARG_1,      NULL,
                        ret_string,         f_tr},
      {"trim",          1, 3, FEARG_1,      NULL,
                        ret_string,         f_trim},
!     {"trunc",         1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_trunc)},
      {"type",          1, 1, FEARG_1,      NULL,
                        ret_number,         f_type},
--- 1754,1768 ----
                        ret_void,           TIMER_FUNC(f_timer_stop)},
      {"timer_stopall", 0, 0, 0,            NULL,
                        ret_void,           TIMER_FUNC(f_timer_stopall)},
!     {"tolower",               1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_tolower},
!     {"toupper",               1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_toupper},
!     {"tr",            3, 3, FEARG_1,      arg3_string,
                        ret_string,         f_tr},
      {"trim",          1, 3, FEARG_1,      NULL,
                        ret_string,         f_trim},
!     {"trunc",         1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_trunc)},
      {"type",          1, 1, FEARG_1,      NULL,
                        ret_number,         f_type},
***************
*** 1784,1810 ****
                        ret_list_number,    f_win_findbuf},
      {"win_getid",     0, 2, FEARG_1,      NULL,
                        ret_number,         f_win_getid},
!     {"win_gettype",   0, 1, FEARG_1,      NULL,
                        ret_string,         f_win_gettype},
!     {"win_gotoid",    1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_win_gotoid},
!     {"win_id2tabwin", 1, 1, FEARG_1,      NULL,
                        ret_list_number,    f_win_id2tabwin},
!     {"win_id2win",    1, 1, FEARG_1,      NULL,
                        ret_number,         f_win_id2win},
!     {"win_screenpos", 1, 1, FEARG_1,      NULL,
                        ret_list_number,    f_win_screenpos},
      {"win_splitmove",   2, 3, FEARG_1,            NULL,
                        ret_number_bool,    f_win_splitmove},
!     {"winbufnr",      1, 1, FEARG_1,      NULL,
                        ret_number,         f_winbufnr},
      {"wincol",                0, 0, 0,            NULL,
                        ret_number,         f_wincol},
      {"windowsversion",        0, 0, 0,            NULL,
                        ret_string,         f_windowsversion},
!     {"winheight",     1, 1, FEARG_1,      NULL,
                        ret_number,         f_winheight},
!     {"winlayout",     0, 1, FEARG_1,      NULL,
                        ret_list_any,       f_winlayout},
      {"winline",               0, 0, 0,            NULL,
                        ret_number,         f_winline},
--- 1788,1814 ----
                        ret_list_number,    f_win_findbuf},
      {"win_getid",     0, 2, FEARG_1,      NULL,
                        ret_number,         f_win_getid},
!     {"win_gettype",   0, 1, FEARG_1,      arg1_number,
                        ret_string,         f_win_gettype},
!     {"win_gotoid",    1, 1, FEARG_1,      arg1_number,
                        ret_number_bool,    f_win_gotoid},
!     {"win_id2tabwin", 1, 1, FEARG_1,      arg1_number,
                        ret_list_number,    f_win_id2tabwin},
!     {"win_id2win",    1, 1, FEARG_1,      arg1_number,
                        ret_number,         f_win_id2win},
!     {"win_screenpos", 1, 1, FEARG_1,      arg1_number,
                        ret_list_number,    f_win_screenpos},
      {"win_splitmove",   2, 3, FEARG_1,            NULL,
                        ret_number_bool,    f_win_splitmove},
!     {"winbufnr",      1, 1, FEARG_1,      arg1_number,
                        ret_number,         f_winbufnr},
      {"wincol",                0, 0, 0,            NULL,
                        ret_number,         f_wincol},
      {"windowsversion",        0, 0, 0,            NULL,
                        ret_string,         f_windowsversion},
!     {"winheight",     1, 1, FEARG_1,      arg1_number,
                        ret_number,         f_winheight},
!     {"winlayout",     0, 1, FEARG_1,      arg1_number,
                        ret_list_any,       f_winlayout},
      {"winline",               0, 0, 0,            NULL,
                        ret_number,         f_winline},
***************
*** 1816,1828 ****
                        ret_void,           f_winrestview},
      {"winsaveview",   0, 0, 0,            NULL,
                        ret_dict_number,    f_winsaveview},
!     {"winwidth",      1, 1, FEARG_1,      NULL,
                        ret_number,         f_winwidth},
      {"wordcount",     0, 0, 0,            NULL,
                        ret_dict_number,    f_wordcount},
      {"writefile",     2, 3, FEARG_1,      NULL,
                        ret_number_bool,    f_writefile},
!     {"xor",           2, 2, FEARG_1,      NULL,
                        ret_number,         f_xor},
  };
  
--- 1820,1832 ----
                        ret_void,           f_winrestview},
      {"winsaveview",   0, 0, 0,            NULL,
                        ret_dict_number,    f_winsaveview},
!     {"winwidth",      1, 1, FEARG_1,      arg1_number,
                        ret_number,         f_winwidth},
      {"wordcount",     0, 0, 0,            NULL,
                        ret_dict_number,    f_wordcount},
      {"writefile",     2, 3, FEARG_1,      NULL,
                        ret_number_bool,    f_writefile},
!     {"xor",           2, 2, FEARG_1,      arg2_number,
                        ret_number,         f_xor},
  };
  
*** ../vim-8.2.3035/src/testdir/test_assert.vim 2020-11-04 15:07:13.057780706 
+0100
--- src/testdir/test_assert.vim 2021-06-22 19:46:49.262532114 +0200
***************
*** 374,379 ****
--- 374,381 ----
    call test_setmouse(5, 1)
    call feedkeys("\<LeftMouse>", "xt")
    call assert_equal([0, 2, 1, 0], getpos('.'))
+   call assert_fails('call test_setmouse("", 2)', 'E474:')
+   call assert_fails('call test_setmouse(1, "")', 'E474:')
    bwipe!
    let &mouse = save_mouse
  endfunc
*** ../vim-8.2.3035/src/testdir/test_gui.vim    2021-06-21 18:43:46.136307978 
+0200
--- src/testdir/test_gui.vim    2021-06-22 19:46:49.262532114 +0200
***************
*** 882,888 ****
    new
    call setline(1, ['one two three', 'four five six'])
  
!   " place the cursor using left click
    call cursor(1, 1)
    call test_gui_mouse_event(0, 2, 4, 0, 0)
    call test_gui_mouse_event(3, 2, 4, 0, 0)
--- 882,888 ----
    new
    call setline(1, ['one two three', 'four five six'])
  
!   " place the cursor using left click in normal mode
    call cursor(1, 1)
    call test_gui_mouse_event(0, 2, 4, 0, 0)
    call test_gui_mouse_event(3, 2, 4, 0, 0)
***************
*** 1092,1100 ****
--- 1092,1161 ----
    set mouse&
    let &guioptions = save_guioptions
  
+   " Test invalid parameters for test_gui_mouse_event()
+   call assert_fails('call test_gui_mouse_event("", 1, 2, 3, 4)', 'E474:')
+   call assert_fails('call test_gui_mouse_event(0, "", 2, 3, 4)', 'E474:')
+   call assert_fails('call test_gui_mouse_event(0, 1, "", 3, 4)', 'E474:')
+   call assert_fails('call test_gui_mouse_event(0, 1, 2, "", 4)', 'E474:')
+   call assert_fails('call test_gui_mouse_event(0, 1, 2, 3, "")', 'E474:')
+ 
    bw!
    call test_override('no_query_mouse', 0)
    set mousemodel&
  endfunc
  
+ " Test for 'guitablabel' and 'guitabtooltip' options
+ func TestGuiTabLabel()
+   call add(g:TabLabels, v:lnum + 100)
+   let bufnrlist = tabpagebuflist(v:lnum)
+   return bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])
+ endfunc
+ 
+ func TestGuiTabToolTip()
+   call add(g:TabToolTips, v:lnum + 200)
+   let bufnrlist = tabpagebuflist(v:lnum)
+   return bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])
+ endfunc
+ 
+ func Test_gui_tablabel_tooltip()
+   %bw!
+   " Removing the tabline at the end of this test, reduces the window height by
+   " one. Save and restore it after the test.
+   let save_lines = &lines
+   edit one
+   set modified
+   tabnew two
+   set modified
+   tabnew three
+   set modified
+   let g:TabLabels = []
+   set guitablabel=%{TestGuiTabLabel()}
+   call test_override('starting', 1)
+   redrawtabline
+   call test_override('starting', 0)
+   call assert_true(index(g:TabLabels, 101) != -1)
+   call assert_true(index(g:TabLabels, 102) != -1)
+   call assert_true(index(g:TabLabels, 103) != -1)
+   set guitablabel&
+   unlet g:TabLabels
+ 
+   if has('gui_gtk')
+     " Only on GTK+, the tooltip function is called even if the mouse is not
+     " on the tabline. on Win32 and Motif, the tooltip function is called only
+     " when the mouse pointer is over the tabline.
+     let g:TabToolTips = []
+     set guitabtooltip=%{TestGuiTabToolTip()}
+     call test_override('starting', 1)
+     redrawtabline
+     call test_override('starting', 0)
+     call assert_true(index(g:TabToolTips, 201) != -1)
+     call assert_true(index(g:TabToolTips, 202) != -1)
+     call assert_true(index(g:TabToolTips, 203) != -1)
+     set guitabtooltip&
+     unlet g:TabToolTips
+   endif
+   %bw!
+   let &lines = save_lines
+ endfunc
+ 
  " vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.3035/src/testdir/test_popupwin.vim       2021-06-12 
13:59:00.417806488 +0200
--- src/testdir/test_popupwin.vim       2021-06-22 19:46:49.262532114 +0200
***************
*** 1552,1559 ****
    call assert_equal(9, getcurpos()[2])
    call feedkeys('0', 'xt')
    call assert_equal('0', g:ignored)
!   redraw
!   call assert_equal(1, getcurpos()[2])
  
    " x closes the popup
    call feedkeys('x', 'xt')
--- 1552,1559 ----
    call assert_equal(9, getcurpos()[2])
    call feedkeys('0', 'xt')
    call assert_equal('0', g:ignored)
!   normal! l
!   call assert_equal(2, getcurpos()[2])
  
    " x closes the popup
    call feedkeys('x', 'xt')
*** ../vim-8.2.3035/src/testdir/test_vim9_builtin.vim   2021-06-20 
14:40:57.584007589 +0200
--- src/testdir/test_vim9_builtin.vim   2021-06-22 19:46:49.266532105 +0200
***************
*** 141,146 ****
--- 141,151 ----
    CheckScriptSuccess(lines)
  enddef
  
+ def Test_and()
+   CheckDefFailure(['echo and("x", 0x2)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   CheckDefFailure(['echo and(0x1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
+ enddef
+ 
  def Test_append()
    new
    setline(1, range(3))
***************
*** 155,160 ****
--- 160,181 ----
    bwipe!
  enddef
  
+ def Test_argc()
+   CheckDefFailure(['echo argc("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+ enddef
+ 
+ def Test_arglistid()
+   CheckDefFailure(['echo arglistid("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   CheckDefFailure(['echo arglistid(1, "y")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
+   CheckDefFailure(['echo arglistid("x", "y")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
+ 
+ def Test_argv()
+   CheckDefFailure(['echo argv("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   CheckDefFailure(['echo argv(1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
+   CheckDefFailure(['echo argv("x", "y")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+ enddef
+ 
  def Test_balloon_show()
    CheckGui
    CheckFeature balloon_eval
***************
*** 256,261 ****
--- 277,286 ----
    assert_fails('chdir(true)', 'E1174')
  enddef
  
+ def Test_clearmatches()
+   CheckDefFailure(['echo clearmatches("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
+ 
  def Test_col()
    new
    setline(1, 'asdf')
***************
*** 311,316 ****
--- 336,346 ----
    CheckDefExecAndScriptFailure(lines, 'E475:')
  enddef
  
+ def Test_debugbreak()
+   CheckMSWindows
+   CheckDefFailure(['echo debugbreak("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
+ 
  def Test_delete()
    var res: bool = delete('doesnotexist')
    assert_equal(true, res)
***************
*** 532,537 ****
--- 562,625 ----
    CheckDefAndScriptFailure(lines, 'E1158:')
  enddef
  
+ " Test for float functions argument type
+ def Test_float_funcs_args()
+   CheckFeature float
+ 
+   # acos()
+   CheckDefFailure(['echo acos("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # asin()
+   CheckDefFailure(['echo asin("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # atan()
+   CheckDefFailure(['echo atan("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # atan2()
+   CheckDefFailure(['echo atan2("a", 1.1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+   CheckDefFailure(['echo atan2(1.2, "a")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
+   CheckDefFailure(['echo atan2(1.2)'], 'E119:')
+   # ceil()
+   CheckDefFailure(['echo ceil("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # cos()
+   CheckDefFailure(['echo cos("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # cosh()
+   CheckDefFailure(['echo cosh("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # exp()
+   CheckDefFailure(['echo exp("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # float2nr()
+   CheckDefFailure(['echo float2nr("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # floor()
+   CheckDefFailure(['echo floor("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # fmod()
+   CheckDefFailure(['echo fmod(1.1, "a")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
+   CheckDefFailure(['echo fmod("a", 1.1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   CheckDefFailure(['echo fmod(1.1)'], 'E119:')
+   # isinf()
+   CheckDefFailure(['echo isinf("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # isnan()
+   CheckDefFailure(['echo isnan("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # log()
+   CheckDefFailure(['echo log("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # log10()
+   CheckDefFailure(['echo log10("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # pow()
+   CheckDefFailure(['echo pow("a", 1.1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   CheckDefFailure(['echo pow(1.1, "a")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
+   CheckDefFailure(['echo pow(1.1)'], 'E119:')
+   # round()
+   CheckDefFailure(['echo round("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # sin()
+   CheckDefFailure(['echo sin("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # sinh()
+   CheckDefFailure(['echo sinh("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # sqrt()
+   CheckDefFailure(['echo sqrt("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # tan()
+   CheckDefFailure(['echo tan("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # tanh()
+   CheckDefFailure(['echo tanh("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   # trunc()
+   CheckDefFailure(['echo trunc("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+ enddef
+ 
  def Test_fnamemodify()
    CheckDefSuccess(['echo fnamemodify(test_null_string(), ":p")'])
    CheckDefSuccess(['echo fnamemodify("", ":p")'])
***************
*** 652,657 ****
--- 740,759 ----
    set wildignore&
  enddef
  
+ def Test_getcurpos()
+   CheckDefFailure(['echo getcursorcharpos("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
+ 
+ def Test_getcursorcharpos()
+   CheckDefFailure(['echo getcursorcharpos("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
+ 
+ def Test_getcwd()
+   CheckDefFailure(['echo getcwd("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   CheckDefFailure(['echo getcwd("x", 1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   CheckDefFailure(['echo getcwd(1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
+ enddef
+ 
  def Test_getloclist_return_type()
    var l = getloclist(1)
    l->assert_equal([])
***************
*** 692,697 ****
--- 794,809 ----
    CheckDefExecFailure(['echo getftype(v:null)'], 'E1174:')
  enddef
  
+ def Test_getjumplist()
+   CheckDefFailure(['echo getjumplist("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+   CheckDefFailure(['echo getjumplist("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+   CheckDefFailure(['echo getjumplist(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
+ enddef
+ 
+ def Test_getmatches()
+   CheckDefFailure(['echo getmatches("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
+ 
  def Test_getqflist_return_type()
    var l = getqflist()
    l->assert_equal([])
***************
*** 727,732 ****
--- 839,860 ----
    assert_fails('getregtype("ab")', 'E1162:')
  enddef
  
+ def Test_gettabinfo()
+   CheckDefFailure(['echo gettabinfo("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
+ 
+ def Test_gettagstack()
+   CheckDefFailure(['echo gettagstack("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
+ 
+ def Test_getwininfo()
+   CheckDefFailure(['echo getwininfo("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
+ 
+ def Test_getwinpos()
+   CheckDefFailure(['echo getwinpos("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+ enddef
+ 
  def Test_glob()
    glob('runtest.vim', true, true, true)->assert_equal(['runtest.vim'])
  enddef
***************
*** 739,744 ****
--- 867,878 ----
    has('eval', true)->assert_equal(1)
  enddef
  
+ def Test_haslocaldir()
+   CheckDefFailure(['echo haslocaldir("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+   CheckDefFailure(['echo haslocaldir("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+   CheckDefFailure(['echo haslocaldir(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
+ enddef
+ 
  def Test_hasmapto()
    hasmapto('foobar', 'i', true)->assert_equal(0)
    iabbrev foo foobar
***************
*** 790,795 ****
--- 924,933 ----
    CheckDefFailure(['insert([2, 3], 1, "x")'], 'E1013: Argument 3: type 
mismatch, expected number but got string', 1)
  enddef
  
+ def Test_invert()
+   CheckDefFailure(['echo invert("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+ enddef
+ 
  def Test_keys_return_type()
    const var: list<string> = {a: 1, b: 2}->keys()
    var->assert_equal(['a', 'b'])
***************
*** 812,817 ****
--- 950,959 ----
            ->str2nr()
  enddef
  
+ def Test_listener_remove()
+   CheckDefFailure(['echo listener_remove("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
+ 
  def Test_map_function_arg()
    var lines =<< trim END
        def MapOne(i: number, v: string): string
***************
*** 914,919 ****
--- 1056,1071 ----
    delete('Xtmpfile')
  enddef
  
+ def Test_matcharg()
+   CheckDefFailure(['echo matcharg("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+ enddef
+ 
+ def Test_matchdelete()
+   CheckDefFailure(['echo matchdelete("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+   CheckDefFailure(['echo matchdelete("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+   CheckDefFailure(['echo matchdelete(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
+ enddef
+ 
  def Test_max()
    g:flag = true
    var l1: list<number> = g:flag
***************
*** 946,951 ****
--- 1098,1108 ----
    nr2char(97, true)->assert_equal('a')
  enddef
  
+ def Test_or()
+   CheckDefFailure(['echo or("x", 0x2)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   CheckDefFailure(['echo or(0x1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
+ enddef
+ 
  def Test_readdir()
     eval expand('sautest')->readdir((e) => e[0] !=# '.')
     eval expand('sautest')->readdirex((e) => e.name[0] !=# '.')
***************
*** 995,1000 ****
--- 1152,1177 ----
    res->assert_equal(6)
  enddef
  
+ def Test_screenattr()
+   CheckDefFailure(['echo screenattr("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+   CheckDefFailure(['echo screenattr(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
+ enddef
+ 
+ def Test_screenchar()
+   CheckDefFailure(['echo screenchar("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+   CheckDefFailure(['echo screenchar(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
+ enddef
+ 
+ def Test_screenchars()
+   CheckDefFailure(['echo screenchars("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+   CheckDefFailure(['echo screenchars(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
+ enddef
+ 
+ def Test_screenstring()
+   CheckDefFailure(['echo screenstring("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+   CheckDefFailure(['echo screenstring(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
+ enddef
+ 
  def Test_search()
    new
    setline(1, ['foo', 'bar'])
***************
*** 1157,1162 ****
--- 1334,1343 ----
    getbufvar('%', 'myvar')->assert_equal(123)
  enddef
  
+ def Test_setcmdpos()
+   CheckDefFailure(['echo setcmdpos("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+ enddef
+ 
  def Test_setloclist()
    var items = [{filename: '/tmp/file', lnum: 1, valid: true}]
    var what = {items: items}
***************
*** 1172,1177 ****
--- 1353,1362 ----
    assert_fails('setreg("ab", 0)', 'E1162:')
  enddef 
  
+ def Test_shiftwidth()
+   CheckDefFailure(['echo shiftwidth("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
+ 
  def Test_slice()
    assert_equal('12345', slice('012345', 1))
    assert_equal('123', slice('012345', 1, 4))
***************
*** 1309,1314 ****
--- 1494,1513 ----
    timer_stop(id)
  enddef
  
+ def Test_tolower()
+   CheckDefFailure(['echo tolower(1)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+ enddef
+ 
+ def Test_toupper()
+   CheckDefFailure(['echo toupper(1)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+ enddef
+ 
+ def Test_tr()
+   CheckDefFailure(['echo tr(1, "a", "b")'], 'E1013: Argument 1: type 
mismatch, expected string but got number')
+   CheckDefFailure(['echo tr("a", 1, "b")'], 'E1013: Argument 2: type 
mismatch, expected string but got number')
+   CheckDefFailure(['echo tr("a", "a", 1)'], 'E1013: Argument 3: type 
mismatch, expected string but got number')
+ enddef
+ 
  def Test_win_execute()
    assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()'))
    assert_equal('', win_execute(342343, 'echo winnr()'))
***************
*** 1338,1344 ****
--- 1537,1581 ----
    CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected 
list<number> but got dict<number>', 1)
  enddef
  
+ def Test_win_gettype()
+   CheckDefFailure(['echo win_gettype("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
+ 
+ def Test_win_gotoid()
+   CheckDefFailure(['echo win_gotoid("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
+ 
+ def Test_win_id2tabwin()
+   CheckDefFailure(['echo win_id2tabwin("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
  
+ def Test_win_id2win()
+   CheckDefFailure(['echo win_id2win("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
+ 
+ def Test_win_screenpos()
+   CheckDefFailure(['echo win_screenpos("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+ enddef
  
+ def Test_winbufnr()
+   CheckDefFailure(['echo winbufnr("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+ enddef
+ 
+ def Test_winheight()
+   CheckDefFailure(['echo winheight("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+ enddef
+ 
+ def Test_winlayout()
+   CheckDefFailure(['echo winlayout("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+ enddef
+ 
+ def Test_winwidth()
+   CheckDefFailure(['echo winwidth("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+ enddef
+ 
+ def Test_xor()
+   CheckDefFailure(['echo xor("x", 0x2)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   CheckDefFailure(['echo xor(0x1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
+ enddef
  
  " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
*** ../vim-8.2.3035/src/testing.c       2021-06-21 18:43:46.136307978 +0200
--- src/testing.c       2021-06-22 19:46:49.266532105 +0200
***************
*** 1211,1216 ****
--- 1211,1222 ----
      void
  f_test_setmouse(typval_T *argvars, typval_T *rettv UNUSED)
  {
+     if (argvars[0].v_type != VAR_NUMBER || (argvars[1].v_type) != VAR_NUMBER)
+     {
+       emsg(_(e_invarg));
+       return;
+     }
+ 
      mouse_row = (time_t)tv_get_number(&argvars[0]) - 1;
      mouse_col = (time_t)tv_get_number(&argvars[1]) - 1;
  }
***************
*** 1219,1229 ****
  f_test_gui_mouse_event(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
  {
  #ifdef FEAT_GUI
!     int               button = tv_get_number(&argvars[0]);
!     int               row = tv_get_number(&argvars[1]);
!     int               col = tv_get_number(&argvars[2]);
!     int               repeated_click = tv_get_number(&argvars[3]);
!     int_u     mods = tv_get_number(&argvars[4]);
  
      gui_send_mouse_event(button, TEXT_X(col - 1), TEXT_Y(row - 1), 
repeated_click, mods);
  #endif
--- 1225,1251 ----
  f_test_gui_mouse_event(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
  {
  #ifdef FEAT_GUI
!     int               button;
!     int               row;
!     int               col;
!     int               repeated_click;
!     int_u     mods;
! 
!     if (argvars[0].v_type != VAR_NUMBER
!           || (argvars[1].v_type) != VAR_NUMBER
!           || (argvars[2].v_type) != VAR_NUMBER
!           || (argvars[3].v_type) != VAR_NUMBER
!           || (argvars[4].v_type) != VAR_NUMBER)
!     {
!       emsg(_(e_invarg));
!       return;
!     }
! 
!     button = tv_get_number(&argvars[0]);
!     row = tv_get_number(&argvars[1]);
!     col = tv_get_number(&argvars[2]);
!     repeated_click = tv_get_number(&argvars[3]);
!     mods = tv_get_number(&argvars[4]);
  
      gui_send_mouse_event(button, TEXT_X(col - 1), TEXT_Y(row - 1), 
repeated_click, mods);
  #endif
*** ../vim-8.2.3035/src/version.c       2021-06-22 19:32:13.356374012 +0200
--- src/version.c       2021-06-22 19:49:39.330163893 +0200
***************
*** 757,758 ****
--- 757,760 ----
  {   /* Add new patch number below this line */
+ /**/
+     3036,
  /**/

-- 
How To Keep A Healthy Level Of Insanity:
9. As often as possible, skip rather than walk.

 /// 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/202106221752.15MHqvaY939938%40masaka.moolenaar.net.

Raspunde prin e-mail lui