Patch 8.2.3084
Problem:    Vim9: builtin function argument types are not checked at compile
            time.
Solution:   Add argument types. (Yegappan Lakshmanan, closes #8503)
Files:      src/evalfunc.c, src/testdir/test_functions.vim,
            src/testdir/test_glob2regpat.vim,
            src/testdir/test_vim9_builtin.vim, src/testdir/test_vim9_expr.vim


*** ../vim-8.2.3083/src/evalfunc.c      2021-06-27 22:03:28.637707737 +0200
--- src/evalfunc.c      2021-07-03 11:57:02.997988712 +0200
***************
*** 268,273 ****
--- 268,300 ----
  }
  
  /*
+  * Check "type" is a dict of 'any'.
+  */
+     static int
+ arg_dict_any(type_T *type, argcontext_T *context)
+ {
+     return check_arg_type(&t_dict_any, type, context);
+ }
+ 
+ /*
+  * Check "type" is a list of numbers.
+  */
+     static int
+ arg_list_number(type_T *type, argcontext_T *context)
+ {
+     return check_arg_type(&t_list_number, type, context);
+ }
+ 
+ /*
+  * Check "type" is a list of strings.
+  */
+     static int
+ arg_list_string(type_T *type, argcontext_T *context)
+ {
+     return check_arg_type(&t_list_string, type, context);
+ }
+ 
+ /*
   * Check "type" is a string.
   */
      static int
***************
*** 302,307 ****
--- 329,346 ----
  }
  
  /*
+  * Check "type" is a string or a number
+  */
+     static int
+ arg_string_or_nr(type_T *type, argcontext_T *context)
+ {
+     if (type->tt_type == VAR_ANY
+           || type->tt_type == VAR_STRING || type->tt_type == VAR_NUMBER)
+       return OK;
+     arg_type_mismatch(&t_string, type, context->arg_idx + 1);
+     return FAIL;
+ }
+ /*
   * Check "type" is a string or a list of strings.
   */
      static int
***************
*** 404,417 ****
--- 443,464 ----
   */
  argcheck_T arg1_string[] = {arg_string};
  argcheck_T arg1_number[] = {arg_number};
+ argcheck_T arg1_dict[] = {arg_dict_any};
+ argcheck_T arg1_list_number[] = {arg_list_number};
+ argcheck_T arg1_string_list[] = {arg_list_string};
  argcheck_T arg1_float_or_nr[] = {arg_float_or_nr};
+ argcheck_T arg1_string_or_nr[] = {arg_string_or_nr};
+ argcheck_T arg1_string_or_list[] = {arg_string_or_list};
  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_string[] = {arg_string, arg_string};
+ argcheck_T arg2_list_number[] = {arg_list_number, arg_list_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_number[] = {arg_number, arg_number, arg_number};
  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};
  
***************
*** 732,738 ****
            NULL
  #endif
                        },
!     {"balloon_show",  1, 1, FEARG_1,      NULL,
                        ret_void,
  #ifdef FEAT_BEVAL
            f_balloon_show
--- 779,785 ----
            NULL
  #endif
                        },
!     {"balloon_show",  1, 1, FEARG_1,      arg1_string_or_list,
                        ret_void,
  #ifdef FEAT_BEVAL
            f_balloon_show
***************
*** 740,746 ****
            NULL
  #endif
                        },
!     {"balloon_split", 1, 1, FEARG_1,      NULL,
                        ret_list_string,
  #if defined(FEAT_BEVAL_TERM)
            f_balloon_split
--- 787,793 ----
            NULL
  #endif
                        },
!     {"balloon_split", 1, 1, FEARG_1,      arg1_string,
                        ret_list_string,
  #if defined(FEAT_BEVAL_TERM)
            f_balloon_split
***************
*** 752,782 ****
                        ret_string,         f_browse},
      {"browsedir",     2, 2, 0,            NULL,
                        ret_string,         f_browsedir},
!     {"bufadd",                1, 1, FEARG_1,      NULL,
                        ret_number,         f_bufadd},
!     {"bufexists",     1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_bufexists},
!     {"buffer_exists", 1, 1, FEARG_1,      NULL,       // obsolete
                        ret_number_bool,    f_bufexists},
!     {"buffer_name",   0, 1, FEARG_1,      NULL,       // obsolete
                        ret_string,         f_bufname},
      {"buffer_number", 0, 1, FEARG_1,      NULL,       // obsolete
                        ret_number,         f_bufnr},
!     {"buflisted",     1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_buflisted},
!     {"bufload",               1, 1, FEARG_1,      NULL,
                        ret_void,           f_bufload},
!     {"bufloaded",     1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_bufloaded},
!     {"bufname",               0, 1, FEARG_1,      NULL,
                        ret_string,         f_bufname},
      {"bufnr",         0, 2, FEARG_1,      NULL,
                        ret_number,         f_bufnr},
!     {"bufwinid",      1, 1, FEARG_1,      NULL,
                        ret_number,         f_bufwinid},
!     {"bufwinnr",      1, 1, FEARG_1,      NULL,
                        ret_number,         f_bufwinnr},
!     {"byte2line",     1, 1, FEARG_1,      NULL,
                        ret_number,         f_byte2line},
      {"byteidx",               2, 2, FEARG_1,      NULL,
                        ret_number,         f_byteidx},
--- 799,829 ----
                        ret_string,         f_browse},
      {"browsedir",     2, 2, 0,            NULL,
                        ret_string,         f_browsedir},
!     {"bufadd",                1, 1, FEARG_1,      arg1_string,
                        ret_number,         f_bufadd},
!     {"bufexists",     1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number_bool,    f_bufexists},
!     {"buffer_exists", 1, 1, FEARG_1,      arg1_string_or_nr,  // obsolete
                        ret_number_bool,    f_bufexists},
!     {"buffer_name",   0, 1, FEARG_1,      arg1_string_or_nr,  // obsolete
                        ret_string,         f_bufname},
      {"buffer_number", 0, 1, FEARG_1,      NULL,       // obsolete
                        ret_number,         f_bufnr},
!     {"buflisted",     1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number_bool,    f_buflisted},
!     {"bufload",               1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_void,           f_bufload},
!     {"bufloaded",     1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number_bool,    f_bufloaded},
!     {"bufname",               0, 1, FEARG_1,      arg1_string_or_nr,
                        ret_string,         f_bufname},
      {"bufnr",         0, 2, FEARG_1,      NULL,
                        ret_number,         f_bufnr},
!     {"bufwinid",      1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number,         f_bufwinid},
!     {"bufwinnr",      1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number,         f_bufwinnr},
!     {"byte2line",     1, 1, FEARG_1,      arg1_number,
                        ret_number,         f_byte2line},
      {"byteidx",               2, 2, FEARG_1,      NULL,
                        ret_number,         f_byteidx},
***************
*** 826,840 ****
                        ret_number,         f_changenr},
      {"char2nr",               1, 2, FEARG_1,      NULL,
                        ret_number,         f_char2nr},
!     {"charclass",     1, 1, FEARG_1,      NULL,
                        ret_number,         f_charclass},
      {"charcol",               1, 1, FEARG_1,      NULL,
                        ret_number,         f_charcol},
      {"charidx",               2, 3, FEARG_1,      NULL,
                        ret_number,         f_charidx},
!     {"chdir",         1, 1, FEARG_1,      NULL,
                        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},
--- 873,887 ----
                        ret_number,         f_changenr},
      {"char2nr",               1, 2, FEARG_1,      NULL,
                        ret_number,         f_char2nr},
!     {"charclass",     1, 1, FEARG_1,      arg1_string,
                        ret_number,         f_charclass},
      {"charcol",               1, 1, FEARG_1,      NULL,
                        ret_number,         f_charcol},
      {"charidx",               2, 3, FEARG_1,      NULL,
                        ret_number,         f_charidx},
!     {"chdir",         1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_chdir},
!     {"cindent",               1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number,         f_cindent},
      {"clearmatches",  0, 1, FEARG_1,      arg1_number,
                        ret_void,           f_clearmatches},
***************
*** 846,852 ****
                        ret_number,         f_complete_add},
      {"complete_check",        0, 0, 0,            NULL,
                        ret_number_bool,    f_complete_check},
!     {"complete_info", 0, 1, FEARG_1,      NULL,
                        ret_dict_any,       f_complete_info},
      {"confirm",               1, 4, FEARG_1,      NULL,
                        ret_number,         f_confirm},
--- 893,899 ----
                        ret_number,         f_complete_add},
      {"complete_check",        0, 0, 0,            NULL,
                        ret_number_bool,    f_complete_check},
!     {"complete_info", 0, 1, FEARG_1,      arg1_string_list,
                        ret_dict_any,       f_complete_info},
      {"confirm",               1, 4, FEARG_1,      NULL,
                        ret_number,         f_confirm},
***************
*** 878,884 ****
                        ret_number_bool,    f_deletebufline},
      {"did_filetype",  0, 0, 0,            NULL,
                        ret_number_bool,    f_did_filetype},
!     {"diff_filler",   1, 1, FEARG_1,      NULL,
                        ret_number,         f_diff_filler},
      {"diff_hlID",     2, 2, FEARG_1,      NULL,
                        ret_number,         f_diff_hlID},
--- 925,931 ----
                        ret_number_bool,    f_deletebufline},
      {"did_filetype",  0, 0, 0,            NULL,
                        ret_number_bool,    f_did_filetype},
!     {"diff_filler",   1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number,         f_diff_filler},
      {"diff_hlID",     2, 2, FEARG_1,      NULL,
                        ret_number,         f_diff_hlID},
***************
*** 888,924 ****
                        ret_number_bool,    f_empty},
      {"environ",               0, 0, 0,            NULL,
                        ret_dict_string,    f_environ},
!     {"escape",                2, 2, FEARG_1,      NULL,
                        ret_string,         f_escape},
!     {"eval",          1, 1, FEARG_1,      NULL,
                        ret_any,            f_eval},
      {"eventhandler",  0, 0, 0,            NULL,
                        ret_number_bool,    f_eventhandler},
!     {"executable",    1, 1, FEARG_1,      NULL,
                        ret_number,         f_executable},
      {"execute",               1, 2, FEARG_1,      arg2_execute,
                        ret_string,         f_execute},
!     {"exepath",               1, 1, FEARG_1,      NULL,
                        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},
!     {"expandcmd",     1, 1, FEARG_1,      NULL,
                        ret_string,         f_expandcmd},
      {"extend",                2, 3, FEARG_1,      arg23_extend,
                        ret_first_arg,      f_extend},
      {"extendnew",     2, 3, FEARG_1,      arg23_extendnew,
                        ret_first_cont,     f_extendnew},
!     {"feedkeys",      1, 2, FEARG_1,      NULL,
                        ret_void,           f_feedkeys},
!     {"file_readable", 1, 1, FEARG_1,      NULL,       // obsolete
                        ret_number_bool,    f_filereadable},
!     {"filereadable",  1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_filereadable},
!     {"filewritable",  1, 1, FEARG_1,      NULL,
                        ret_number,         f_filewritable},
      {"filter",                2, 2, FEARG_1,      NULL,
                        ret_first_arg,      f_filter},
--- 935,971 ----
                        ret_number_bool,    f_empty},
      {"environ",               0, 0, 0,            NULL,
                        ret_dict_string,    f_environ},
!     {"escape",                2, 2, FEARG_1,      arg2_string,
                        ret_string,         f_escape},
!     {"eval",          1, 1, FEARG_1,      arg1_string,
                        ret_any,            f_eval},
      {"eventhandler",  0, 0, 0,            NULL,
                        ret_number_bool,    f_eventhandler},
!     {"executable",    1, 1, FEARG_1,      arg1_string,
                        ret_number,         f_executable},
      {"execute",               1, 2, FEARG_1,      arg2_execute,
                        ret_string,         f_execute},
!     {"exepath",               1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_exepath},
!     {"exists",                1, 1, FEARG_1,      arg1_string,
                        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},
!     {"expandcmd",     1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_expandcmd},
      {"extend",                2, 3, FEARG_1,      arg23_extend,
                        ret_first_arg,      f_extend},
      {"extendnew",     2, 3, FEARG_1,      arg23_extendnew,
                        ret_first_cont,     f_extendnew},
!     {"feedkeys",      1, 2, FEARG_1,      arg2_string,
                        ret_void,           f_feedkeys},
!     {"file_readable", 1, 1, FEARG_1,      arg1_string,        // obsolete
                        ret_number_bool,    f_filereadable},
!     {"filereadable",  1, 1, FEARG_1,      arg1_string,
                        ret_number_bool,    f_filereadable},
!     {"filewritable",  1, 1, FEARG_1,      arg1_string,
                        ret_number,         f_filewritable},
      {"filter",                2, 2, FEARG_1,      NULL,
                        ret_first_arg,      f_filter},
***************
*** 936,954 ****
                        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},
!     {"fnamemodify",   2, 2, FEARG_1,      NULL,
                        ret_string,         f_fnamemodify},
!     {"foldclosed",    1, 1, FEARG_1,      NULL,
                        ret_number,         f_foldclosed},
!     {"foldclosedend", 1, 1, FEARG_1,      NULL,
                        ret_number,         f_foldclosedend},
!     {"foldlevel",     1, 1, FEARG_1,      NULL,
                        ret_number,         f_foldlevel},
      {"foldtext",      0, 0, 0,            NULL,
                        ret_string,         f_foldtext},
!     {"foldtextresult",        1, 1, FEARG_1,      NULL,
                        ret_string,         f_foldtextresult},
      {"foreground",    0, 0, 0,            NULL,
                        ret_void,           f_foreground},
--- 983,1001 ----
                        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,      arg1_string,
                        ret_string,         f_fnameescape},
!     {"fnamemodify",   2, 2, FEARG_1,      arg2_string,
                        ret_string,         f_fnamemodify},
!     {"foldclosed",    1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number,         f_foldclosed},
!     {"foldclosedend", 1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number,         f_foldclosedend},
!     {"foldlevel",     1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number,         f_foldlevel},
      {"foldtext",      0, 0, 0,            NULL,
                        ret_string,         f_foldtext},
!     {"foldtextresult",        1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_string,         f_foldtextresult},
      {"foreground",    0, 0, 0,            NULL,
                        ret_void,           f_foreground},
***************
*** 968,974 ****
                        ret_list_string,    f_getbufline},
      {"getbufvar",     2, 3, FEARG_1,      NULL,
                        ret_any,            f_getbufvar},
!     {"getchangelist", 0, 1, FEARG_1,      NULL,
                        ret_list_any,       f_getchangelist},
      {"getchar",               0, 1, 0,            NULL,
                        ret_any,            f_getchar},
--- 1015,1021 ----
                        ret_list_string,    f_getbufline},
      {"getbufvar",     2, 3, FEARG_1,      NULL,
                        ret_any,            f_getbufvar},
!     {"getchangelist", 0, 1, FEARG_1,      arg1_string_or_nr,
                        ret_list_any,       f_getchangelist},
      {"getchar",               0, 1, 0,            NULL,
                        ret_any,            f_getchar},
***************
*** 996,1012 ****
                        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},
!     {"getfontname",   0, 1, 0,            NULL,
                        ret_string,         f_getfontname},
!     {"getfperm",      1, 1, FEARG_1,      NULL,
                        ret_string,         f_getfperm},
!     {"getfsize",      1, 1, FEARG_1,      NULL,
                        ret_number,         f_getfsize},
!     {"getftime",      1, 1, FEARG_1,      NULL,
                        ret_number,         f_getftime},
!     {"getftype",      1, 1, FEARG_1,      NULL,
                        ret_string,         f_getftype},
      {"getimstatus",   0, 0, 0,            NULL,
                        ret_number_bool,    f_getimstatus},
--- 1043,1059 ----
                        ret_list_number,    f_getcursorcharpos},
      {"getcwd",                0, 2, FEARG_1,      arg2_number,
                        ret_string,         f_getcwd},
!     {"getenv",                1, 1, FEARG_1,      arg1_string,
                        ret_any,            f_getenv},
!     {"getfontname",   0, 1, 0,            arg1_string,
                        ret_string,         f_getfontname},
!     {"getfperm",      1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_getfperm},
!     {"getfsize",      1, 1, FEARG_1,      arg1_string,
                        ret_number,         f_getfsize},
!     {"getftime",      1, 1, FEARG_1,      arg1_string,
                        ret_number,         f_getftime},
!     {"getftype",      1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_getftype},
      {"getimstatus",   0, 0, 0,            NULL,
                        ret_number_bool,    f_getimstatus},
***************
*** 1016,1022 ****
                        ret_f_getline,      f_getline},
      {"getloclist",    1, 2, 0,            NULL,
                        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},
--- 1063,1069 ----
                        ret_f_getline,      f_getline},
      {"getloclist",    1, 2, 0,            NULL,
                        ret_list_or_dict_1, f_getloclist},
!     {"getmarklist",   0, 1, FEARG_1,      arg1_string_or_nr,
                        ret_list_dict_any,  f_getmarklist},
      {"getmatches",    0, 1, 0,            arg1_number,
                        ret_list_dict_any,  f_getmatches},
***************
*** 1024,1038 ****
                        ret_dict_number,    f_getmousepos},
      {"getpid",                0, 0, 0,            NULL,
                        ret_number,         f_getpid},
!     {"getpos",                1, 1, FEARG_1,      NULL,
                        ret_list_number,    f_getpos},
!     {"getqflist",     0, 1, 0,            NULL,
                        ret_list_or_dict_0, f_getqflist},
      {"getreg",                0, 3, FEARG_1,      NULL,
                        ret_getreg,         f_getreg},
!     {"getreginfo",    0, 1, FEARG_1,      NULL,
                        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},
--- 1071,1085 ----
                        ret_dict_number,    f_getmousepos},
      {"getpid",                0, 0, 0,            NULL,
                        ret_number,         f_getpid},
!     {"getpos",                1, 1, FEARG_1,      arg1_string,
                        ret_list_number,    f_getpos},
!     {"getqflist",     0, 1, 0,            arg1_dict,
                        ret_list_or_dict_0, f_getqflist},
      {"getreg",                0, 3, FEARG_1,      NULL,
                        ret_getreg,         f_getreg},
!     {"getreginfo",    0, 1, FEARG_1,      arg1_string,
                        ret_dict_any,       f_getreginfo},
!     {"getregtype",    0, 1, FEARG_1,      arg1_string,
                        ret_string,         f_getregtype},
      {"gettabinfo",    0, 1, FEARG_1,      arg1_number,
                        ret_list_dict_any,  f_gettabinfo},
***************
*** 1042,1048 ****
                        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},
--- 1089,1095 ----
                        ret_any,            f_gettabwinvar},
      {"gettagstack",   0, 1, FEARG_1,      arg1_number,
                        ret_dict_any,       f_gettagstack},
!     {"gettext",               1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_gettext},
      {"getwininfo",    0, 1, FEARG_1,      arg1_number,
                        ret_list_dict_any,  f_getwininfo},
***************
*** 1056,1062 ****
                        ret_any,            f_getwinvar},
      {"glob",          1, 4, FEARG_1,      NULL,
                        ret_any,            f_glob},
!     {"glob2regpat",   1, 1, FEARG_1,      NULL,
                        ret_string,         f_glob2regpat},
      {"globpath",      2, 5, FEARG_2,      NULL,
                        ret_any,            f_globpath},
--- 1103,1109 ----
                        ret_any,            f_getwinvar},
      {"glob",          1, 4, FEARG_1,      NULL,
                        ret_any,            f_glob},
!     {"glob2regpat",   1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_glob2regpat},
      {"globpath",      2, 5, FEARG_2,      NULL,
                        ret_any,            f_globpath},
***************
*** 1072,1092 ****
                        ret_number,         f_hlID},
      {"highlight_exists",1, 1, FEARG_1,            NULL,       // obsolete
                        ret_number_bool,    f_hlexists},
!     {"histadd",               2, 2, FEARG_2,      NULL,
                        ret_number_bool,    f_histadd},
      {"histdel",               1, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_histdel},
      {"histget",               1, 2, FEARG_1,      NULL,
                        ret_string,         f_histget},
!     {"histnr",                1, 1, FEARG_1,      NULL,
                        ret_number,         f_histnr},
!     {"hlID",          1, 1, FEARG_1,      NULL,
                        ret_number,         f_hlID},
!     {"hlexists",      1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_hlexists},
      {"hostname",      0, 0, 0,            NULL,
                        ret_string,         f_hostname},
!     {"iconv",         3, 3, FEARG_1,      NULL,
                        ret_string,         f_iconv},
      {"indent",                1, 1, FEARG_1,      NULL,
                        ret_number,         f_indent},
--- 1119,1139 ----
                        ret_number,         f_hlID},
      {"highlight_exists",1, 1, FEARG_1,            NULL,       // obsolete
                        ret_number_bool,    f_hlexists},
!     {"histadd",               2, 2, FEARG_2,      arg2_string,
                        ret_number_bool,    f_histadd},
      {"histdel",               1, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_histdel},
      {"histget",               1, 2, FEARG_1,      NULL,
                        ret_string,         f_histget},
!     {"histnr",                1, 1, FEARG_1,      arg1_string,
                        ret_number,         f_histnr},
!     {"hlID",          1, 1, FEARG_1,      arg1_string,
                        ret_number,         f_hlID},
!     {"hlexists",      1, 1, FEARG_1,      arg1_string,
                        ret_number_bool,    f_hlexists},
      {"hostname",      0, 0, 0,            NULL,
                        ret_string,         f_hostname},
!     {"iconv",         3, 3, FEARG_1,      arg3_string,
                        ret_string,         f_iconv},
      {"indent",                1, 1, FEARG_1,      NULL,
                        ret_number,         f_indent},
***************
*** 1096,1108 ****
                        ret_string,         f_input},
      {"inputdialog",   1, 3, FEARG_1,      NULL,
                        ret_string,         f_inputdialog},
!     {"inputlist",     1, 1, FEARG_1,      NULL,
                        ret_number,         f_inputlist},
      {"inputrestore",  0, 0, 0,            NULL,
                        ret_number_bool,    f_inputrestore},
      {"inputsave",     0, 0, 0,            NULL,
                        ret_number_bool,    f_inputsave},
!     {"inputsecret",   1, 2, FEARG_1,      NULL,
                        ret_string,         f_inputsecret},
      {"insert",                2, 3, FEARG_1,      arg3_insert,
                        ret_first_arg,      f_insert},
--- 1143,1155 ----
                        ret_string,         f_input},
      {"inputdialog",   1, 3, FEARG_1,      NULL,
                        ret_string,         f_inputdialog},
!     {"inputlist",     1, 1, FEARG_1,      arg1_string_list,
                        ret_number,         f_inputlist},
      {"inputrestore",  0, 0, 0,            NULL,
                        ret_number_bool,    f_inputrestore},
      {"inputsave",     0, 0, 0,            NULL,
                        ret_number_bool,    f_inputsave},
!     {"inputsecret",   1, 2, FEARG_1,      arg2_string,
                        ret_string,         f_inputsecret},
      {"insert",                2, 3, FEARG_1,      arg3_insert,
                        ret_first_arg,      f_insert},
***************
*** 1110,1116 ****
                        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)},
--- 1157,1163 ----
                        ret_void,           f_interrupt},
      {"invert",                1, 1, FEARG_1,      arg1_number,
                        ret_number,         f_invert},
!     {"isdirectory",   1, 1, FEARG_1,      arg1_string,
                        ret_number_bool,    f_isdirectory},
      {"isinf",         1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_number,         MATH_FUNC(f_isinf)},
***************
*** 1118,1124 ****
                        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},
      {"job_getchannel",        1, 1, FEARG_1,      NULL,
                        ret_channel,        JOB_FUNC(f_job_getchannel)},
--- 1165,1171 ----
                        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,      arg1_dict,
                        ret_list_any,       f_items},
      {"job_getchannel",        1, 1, FEARG_1,      NULL,
                        ret_channel,        JOB_FUNC(f_job_getchannel)},
***************
*** 1134,1148 ****
                        ret_number_bool,    JOB_FUNC(f_job_stop)},
      {"join",          1, 2, FEARG_1,      NULL,
                        ret_string,         f_join},
!     {"js_decode",     1, 1, FEARG_1,      NULL,
                        ret_any,            f_js_decode},
      {"js_encode",     1, 1, FEARG_1,      NULL,
                        ret_string,         f_js_encode},
!     {"json_decode",   1, 1, FEARG_1,      NULL,
                        ret_any,            f_json_decode},
      {"json_encode",   1, 1, FEARG_1,      NULL,
                        ret_string,         f_json_encode},
!     {"keys",          1, 1, FEARG_1,      NULL,
                        ret_list_string,    f_keys},
      {"last_buffer_nr",        0, 0, 0,            NULL,       // obsolete
                        ret_number,         f_last_buffer_nr},
--- 1181,1195 ----
                        ret_number_bool,    JOB_FUNC(f_job_stop)},
      {"join",          1, 2, FEARG_1,      NULL,
                        ret_string,         f_join},
!     {"js_decode",     1, 1, FEARG_1,      arg1_string,
                        ret_any,            f_js_decode},
      {"js_encode",     1, 1, FEARG_1,      NULL,
                        ret_string,         f_js_encode},
!     {"json_decode",   1, 1, FEARG_1,      arg1_string,
                        ret_any,            f_json_decode},
      {"json_encode",   1, 1, FEARG_1,      NULL,
                        ret_string,         f_json_encode},
!     {"keys",          1, 1, FEARG_1,      arg1_dict,
                        ret_list_string,    f_keys},
      {"last_buffer_nr",        0, 0, 0,            NULL,       // obsolete
                        ret_number,         f_last_buffer_nr},
***************
*** 1154,1162 ****
                        ret_number,         f_libcallnr},
      {"line",          1, 2, FEARG_1,      NULL,
                        ret_number,         f_line},
!     {"line2byte",     1, 1, FEARG_1,      NULL,
                        ret_number,         f_line2byte},
!     {"lispindent",    1, 1, FEARG_1,      NULL,
                        ret_number,         f_lispindent},
      {"list2str",      1, 2, FEARG_1,      NULL,
                        ret_string,         f_list2str},
--- 1201,1209 ----
                        ret_number,         f_libcallnr},
      {"line",          1, 2, FEARG_1,      NULL,
                        ret_number,         f_line},
!     {"line2byte",     1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number,         f_line2byte},
!     {"lispindent",    1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number,         f_lispindent},
      {"list2str",      1, 2, FEARG_1,      NULL,
                        ret_string,         f_list2str},
***************
*** 1214,1220 ****
                        ret_list_any,       f_matchstrpos},
      {"max",           1, 1, FEARG_1,      NULL,
                        ret_number,         f_max},
!     {"menu_info",     1, 2, FEARG_1,      NULL,
                        ret_dict_any,
  #ifdef FEAT_MENU
            f_menu_info
--- 1261,1267 ----
                        ret_list_any,       f_matchstrpos},
      {"max",           1, 1, FEARG_1,      NULL,
                        ret_number,         f_max},
!     {"menu_info",     1, 2, FEARG_1,      arg2_string,
                        ret_dict_any,
  #ifdef FEAT_MENU
            f_menu_info
***************
*** 1236,1242 ****
            NULL
  #endif
                        },
!     {"nextnonblank",  1, 1, FEARG_1,      NULL,
                        ret_number,         f_nextnonblank},
      {"nr2char",               1, 2, FEARG_1,      NULL,
                        ret_string,         f_nr2char},
--- 1283,1289 ----
            NULL
  #endif
                        },
!     {"nextnonblank",  1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number,         f_nextnonblank},
      {"nr2char",               1, 2, FEARG_1,      NULL,
                        ret_string,         f_nr2char},
***************
*** 1296,1306 ****
                        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},
      {"printf",                1, 19, FEARG_2,     NULL,
                        ret_string,         f_printf},
!     {"prompt_getprompt", 1, 1, FEARG_1,           NULL,
                        ret_string,         JOB_FUNC(f_prompt_getprompt)},
      {"prompt_setcallback", 2, 2, FEARG_1,   NULL,
                        ret_void,           JOB_FUNC(f_prompt_setcallback)},
--- 1343,1353 ----
                        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,      arg1_string_or_nr,
                        ret_number,         f_prevnonblank},
      {"printf",                1, 19, FEARG_2,     NULL,
                        ret_string,         f_printf},
!     {"prompt_getprompt", 1, 1, FEARG_1,           arg1_string_or_nr,
                        ret_string,         JOB_FUNC(f_prompt_getprompt)},
      {"prompt_setcallback", 2, 2, FEARG_1,   NULL,
                        ret_void,           JOB_FUNC(f_prompt_setcallback)},
***************
*** 1356,1366 ****
            NULL
  #endif
                        },
!     {"rand",          0, 1, FEARG_1,      NULL,
                        ret_number,         f_rand},
      {"range",         1, 3, FEARG_1,      NULL,
                        ret_list_number,    f_range},
!     {"readblob",      1, 1, FEARG_1,      NULL,
                        ret_blob,           f_readblob},
      {"readdir",               1, 3, FEARG_1,      NULL,
                        ret_list_string,    f_readdir},
--- 1403,1413 ----
            NULL
  #endif
                        },
!     {"rand",          0, 1, FEARG_1,      arg1_list_number,
                        ret_number,         f_rand},
      {"range",         1, 3, FEARG_1,      NULL,
                        ret_list_number,    f_range},
!     {"readblob",      1, 1, FEARG_1,      arg1_string,
                        ret_blob,           f_readblob},
      {"readdir",               1, 3, FEARG_1,      NULL,
                        ret_list_string,    f_readdir},
***************
*** 1374,1388 ****
                        ret_string,         f_reg_executing},
      {"reg_recording", 0, 0, 0,            NULL,
                        ret_string,         f_reg_recording},
!     {"reltime",               0, 2, FEARG_1,      NULL,
                        ret_list_any,       f_reltime},
!     {"reltimefloat",  1, 1, FEARG_1,      NULL,
                        ret_float,          FLOAT_FUNC(f_reltimefloat)},
!     {"reltimestr",    1, 1, FEARG_1,      NULL,
                        ret_string,         f_reltimestr},
      {"remote_expr",   2, 4, FEARG_1,      NULL,
                        ret_string,         f_remote_expr},
!     {"remote_foreground", 1, 1, FEARG_1,    NULL,
                        ret_string,         f_remote_foreground},
      {"remote_peek",   1, 2, FEARG_1,      NULL,
                        ret_number,         f_remote_peek},
--- 1421,1435 ----
                        ret_string,         f_reg_executing},
      {"reg_recording", 0, 0, 0,            NULL,
                        ret_string,         f_reg_recording},
!     {"reltime",               0, 2, FEARG_1,      arg2_list_number,
                        ret_list_any,       f_reltime},
!     {"reltimefloat",  1, 1, FEARG_1,      arg1_list_number,
                        ret_float,          FLOAT_FUNC(f_reltimefloat)},
!     {"reltimestr",    1, 1, FEARG_1,      arg1_list_number,
                        ret_string,         f_reltimestr},
      {"remote_expr",   2, 4, FEARG_1,      NULL,
                        ret_string,         f_remote_expr},
!     {"remote_foreground", 1, 1, FEARG_1,    arg1_string,
                        ret_string,         f_remote_foreground},
      {"remote_peek",   1, 2, FEARG_1,      NULL,
                        ret_number,         f_remote_peek},
***************
*** 1390,1404 ****
                        ret_string,         f_remote_read},
      {"remote_send",   2, 3, FEARG_1,      NULL,
                        ret_string,         f_remote_send},
!     {"remote_startserver", 1, 1, FEARG_1,   NULL,
                        ret_void,           f_remote_startserver},
      {"remove",                2, 3, FEARG_1,      NULL,
                        ret_remove,         f_remove},
!     {"rename",                2, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_rename},
      {"repeat",                2, 2, FEARG_1,      NULL,
                        ret_first_arg,      f_repeat},
!     {"resolve",               1, 1, FEARG_1,      NULL,
                        ret_string,         f_resolve},
      {"reverse",               1, 1, FEARG_1,      NULL,
                        ret_first_arg,      f_reverse},
--- 1437,1451 ----
                        ret_string,         f_remote_read},
      {"remote_send",   2, 3, FEARG_1,      NULL,
                        ret_string,         f_remote_send},
!     {"remote_startserver", 1, 1, FEARG_1,   arg1_string,
                        ret_void,           f_remote_startserver},
      {"remove",                2, 3, FEARG_1,      NULL,
                        ret_remove,         f_remove},
!     {"rename",                2, 2, FEARG_1,      arg2_string,
                        ret_number_bool,    f_rename},
      {"repeat",                2, 2, FEARG_1,      NULL,
                        ret_first_arg,      f_repeat},
!     {"resolve",               1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_resolve},
      {"reverse",               1, 1, FEARG_1,      NULL,
                        ret_first_arg,      f_reverse},
***************
*** 1420,1426 ****
                        ret_list_number,    f_screenchars},
      {"screencol",     0, 0, 0,            NULL,
                        ret_number,         f_screencol},
!     {"screenpos",     3, 3, FEARG_1,      NULL,
                        ret_dict_number,    f_screenpos},
      {"screenrow",     0, 0, 0,            NULL,
                        ret_number,         f_screenrow},
--- 1467,1473 ----
                        ret_list_number,    f_screenchars},
      {"screencol",     0, 0, 0,            NULL,
                        ret_number,         f_screencol},
!     {"screenpos",     3, 3, FEARG_1,      arg3_number,
                        ret_dict_number,    f_screenpos},
      {"screenrow",     0, 0, 0,            NULL,
                        ret_number,         f_screenrow},
***************
*** 1428,1434 ****
                        ret_string,         f_screenstring},
      {"search",                1, 5, FEARG_1,      NULL,
                        ret_number,         f_search},
!     {"searchcount",   0, 1, FEARG_1,      NULL,
                        ret_dict_any,       f_searchcount},
      {"searchdecl",    1, 3, FEARG_1,      NULL,
                        ret_number_bool,    f_searchdecl},
--- 1475,1481 ----
                        ret_string,         f_screenstring},
      {"search",                1, 5, FEARG_1,      NULL,
                        ret_number,         f_search},
!     {"searchcount",   0, 1, FEARG_1,      arg1_dict,
                        ret_dict_any,       f_searchcount},
      {"searchdecl",    1, 3, FEARG_1,      NULL,
                        ret_number_bool,    f_searchdecl},
***************
*** 1450,1456 ****
                        ret_void,           f_setcellwidths},
      {"setcharpos",    2, 2, FEARG_2,      NULL,
                        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},
--- 1497,1503 ----
                        ret_void,           f_setcellwidths},
      {"setcharpos",    2, 2, FEARG_2,      NULL,
                        ret_number_bool,    f_setcharpos},
!     {"setcharsearch", 1, 1, FEARG_1,      arg1_dict,
                        ret_void,           f_setcharsearch},
      {"setcmdpos",     1, 1, FEARG_1,      arg1_number,
                        ret_number_bool,    f_setcmdpos},
***************
*** 1458,1464 ****
                        ret_number_bool,    f_setcursorcharpos},
      {"setenv",                2, 2, FEARG_2,      NULL,
                        ret_void,           f_setenv},
!     {"setfperm",      2, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_setfperm},
      {"setline",               2, 2, FEARG_2,      NULL,
                        ret_number_bool,    f_setline},
--- 1505,1511 ----
                        ret_number_bool,    f_setcursorcharpos},
      {"setenv",                2, 2, FEARG_2,      NULL,
                        ret_void,           f_setenv},
!     {"setfperm",      2, 2, FEARG_1,      arg2_string,
                        ret_number_bool,    f_setfperm},
      {"setline",               2, 2, FEARG_2,      NULL,
                        ret_number_bool,    f_setline},
***************
*** 1480,1486 ****
                        ret_number_bool,    f_settagstack},
      {"setwinvar",     3, 3, FEARG_3,      NULL,
                        ret_void,           f_setwinvar},
!     {"sha256",                1, 1, FEARG_1,      NULL,
                        ret_string,
  #ifdef FEAT_CRYPT
            f_sha256
--- 1527,1533 ----
                        ret_number_bool,    f_settagstack},
      {"setwinvar",     3, 3, FEARG_3,      NULL,
                        ret_void,           f_setwinvar},
!     {"sha256",                1, 1, FEARG_1,      arg1_string,
                        ret_string,
  #ifdef FEAT_CRYPT
            f_sha256
***************
*** 1510,1516 ****
                        ret_number_bool,    SIGN_FUNC(f_sign_unplace)},
      {"sign_unplacelist", 1, 2, FEARG_1,           NULL,
                        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)},
--- 1557,1563 ----
                        ret_number_bool,    SIGN_FUNC(f_sign_unplace)},
      {"sign_unplacelist", 1, 2, FEARG_1,           NULL,
                        ret_list_number,    SIGN_FUNC(f_sign_unplacelist)},
!     {"simplify",      1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_simplify},
      {"sin",           1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_sin)},
***************
*** 1526,1536 ****
                        ret_number,         SOUND_FUNC(f_sound_playevent)},
      {"sound_playfile",        1, 2, FEARG_1,      NULL,
                        ret_number,         SOUND_FUNC(f_sound_playfile)},
!     {"sound_stop",    1, 1, FEARG_1,      NULL,
                        ret_void,           SOUND_FUNC(f_sound_stop)},
!     {"soundfold",     1, 1, FEARG_1,      NULL,
                        ret_string,         f_soundfold},
!     {"spellbadword",  0, 1, FEARG_1,      NULL,
                        ret_list_string,    f_spellbadword},
      {"spellsuggest",  1, 3, FEARG_1,      NULL,
                        ret_list_string,    f_spellsuggest},
--- 1573,1583 ----
                        ret_number,         SOUND_FUNC(f_sound_playevent)},
      {"sound_playfile",        1, 2, FEARG_1,      NULL,
                        ret_number,         SOUND_FUNC(f_sound_playfile)},
!     {"sound_stop",    1, 1, FEARG_1,      arg1_number,
                        ret_void,           SOUND_FUNC(f_sound_stop)},
!     {"soundfold",     1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_soundfold},
!     {"spellbadword",  0, 1, FEARG_1,      arg1_string,
                        ret_list_string,    f_spellbadword},
      {"spellsuggest",  1, 3, FEARG_1,      NULL,
                        ret_list_string,    f_spellsuggest},
***************
*** 1538,1546 ****
                        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},
!     {"state",         0, 1, FEARG_1,      NULL,
                        ret_string,         f_state},
      {"str2float",     1, 1, FEARG_1,      arg1_string,
                        ret_float,          FLOAT_FUNC(f_str2float)},
--- 1585,1593 ----
                        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,      arg1_number,
                        ret_list_number,    f_srand},
!     {"state",         0, 1, FEARG_1,      arg1_string,
                        ret_string,         f_state},
      {"str2float",     1, 1, FEARG_1,      arg1_string,
                        ret_float,          FLOAT_FUNC(f_str2float)},
***************
*** 1570,1580 ****
                        ret_number,         f_stridx},
      {"string",                1, 1, FEARG_1,      NULL,
                        ret_string,         f_string},
!     {"strlen",                1, 1, FEARG_1,      NULL,
                        ret_number,         f_strlen},
      {"strpart",               2, 4, FEARG_1,      NULL,
                        ret_string,         f_strpart},
!     {"strptime",      2, 2, FEARG_1,      NULL,
                        ret_number,
  #ifdef HAVE_STRPTIME
            f_strptime
--- 1617,1627 ----
                        ret_number,         f_stridx},
      {"string",                1, 1, FEARG_1,      NULL,
                        ret_string,         f_string},
!     {"strlen",                1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number,         f_strlen},
      {"strpart",               2, 4, FEARG_1,      NULL,
                        ret_string,         f_strpart},
!     {"strptime",      2, 2, FEARG_1,      arg2_string,
                        ret_number,
  #ifdef HAVE_STRPTIME
            f_strptime
***************
*** 1584,1606 ****
                        },
      {"strridx",               2, 3, FEARG_1,      NULL,
                        ret_number,         f_strridx},
!     {"strtrans",      1, 1, FEARG_1,      NULL,
                        ret_string,         f_strtrans},
!     {"strwidth",      1, 1, FEARG_1,      NULL,
                        ret_number,         f_strwidth},
      {"submatch",      1, 2, FEARG_1,      NULL,
                        ret_string,         f_submatch},
      {"substitute",    4, 4, FEARG_1,      NULL,
                        ret_string,         f_substitute},
!     {"swapinfo",      1, 1, FEARG_1,      NULL,
                        ret_dict_any,       f_swapinfo},
!     {"swapname",      1, 1, FEARG_1,      NULL,
                        ret_string,         f_swapname},
      {"synID",         3, 3, 0,            NULL,
                        ret_number,         f_synID},
      {"synIDattr",     2, 3, FEARG_1,      NULL,
                        ret_string,         f_synIDattr},
!     {"synIDtrans",    1, 1, FEARG_1,      NULL,
                        ret_number,         f_synIDtrans},
      {"synconcealed",  2, 2, 0,            NULL,
                        ret_list_any,       f_synconcealed},
--- 1631,1653 ----
                        },
      {"strridx",               2, 3, FEARG_1,      NULL,
                        ret_number,         f_strridx},
!     {"strtrans",      1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_strtrans},
!     {"strwidth",      1, 1, FEARG_1,      arg1_string,
                        ret_number,         f_strwidth},
      {"submatch",      1, 2, FEARG_1,      NULL,
                        ret_string,         f_submatch},
      {"substitute",    4, 4, FEARG_1,      NULL,
                        ret_string,         f_substitute},
!     {"swapinfo",      1, 1, FEARG_1,      arg1_string,
                        ret_dict_any,       f_swapinfo},
!     {"swapname",      1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_string,         f_swapname},
      {"synID",         3, 3, 0,            NULL,
                        ret_number,         f_synID},
      {"synIDattr",     2, 3, FEARG_1,      NULL,
                        ret_string,         f_synIDattr},
!     {"synIDtrans",    1, 1, FEARG_1,      arg1_number,
                        ret_number,         f_synIDtrans},
      {"synconcealed",  2, 2, 0,            NULL,
                        ret_list_any,       f_synconcealed},
***************
*** 1610,1618 ****
                        ret_string,         f_system},
      {"systemlist",    1, 2, FEARG_1,      NULL,
                        ret_list_string,    f_systemlist},
!     {"tabpagebuflist",        0, 1, FEARG_1,      NULL,
                        ret_list_number,    f_tabpagebuflist},
!     {"tabpagenr",     0, 1, 0,            NULL,
                        ret_number,         f_tabpagenr},
      {"tabpagewinnr",  1, 2, FEARG_1,      NULL,
                        ret_number,         f_tabpagewinnr},
--- 1657,1665 ----
                        ret_string,         f_system},
      {"systemlist",    1, 2, FEARG_1,      NULL,
                        ret_list_string,    f_systemlist},
!     {"tabpagebuflist",        0, 1, FEARG_1,      arg1_number,
                        ret_list_number,    f_tabpagebuflist},
!     {"tabpagenr",     0, 1, 0,            arg1_string,
                        ret_number,         f_tabpagenr},
      {"tabpagewinnr",  1, 2, FEARG_1,      NULL,
                        ret_number,         f_tabpagewinnr},
***************
*** 1746,1758 ****
                        ret_any,            f_test_unknown},
      {"test_void",     0, 0, 0,            NULL,
                        ret_void,           f_test_void},
!     {"timer_info",    0, 1, FEARG_1,      NULL,
                        ret_list_dict_any,  TIMER_FUNC(f_timer_info)},
      {"timer_pause",   2, 2, FEARG_1,      NULL,
                        ret_void,           TIMER_FUNC(f_timer_pause)},
      {"timer_start",   2, 3, FEARG_1,      NULL,
                        ret_number,         TIMER_FUNC(f_timer_start)},
!     {"timer_stop",    1, 1, FEARG_1,      NULL,
                        ret_void,           TIMER_FUNC(f_timer_stop)},
      {"timer_stopall", 0, 0, 0,            NULL,
                        ret_void,           TIMER_FUNC(f_timer_stopall)},
--- 1793,1805 ----
                        ret_any,            f_test_unknown},
      {"test_void",     0, 0, 0,            NULL,
                        ret_void,           f_test_void},
!     {"timer_info",    0, 1, FEARG_1,      arg1_number,
                        ret_list_dict_any,  TIMER_FUNC(f_timer_info)},
      {"timer_pause",   2, 2, FEARG_1,      NULL,
                        ret_void,           TIMER_FUNC(f_timer_pause)},
      {"timer_start",   2, 3, FEARG_1,      NULL,
                        ret_number,         TIMER_FUNC(f_timer_start)},
!     {"timer_stop",    1, 1, FEARG_1,      arg1_number,
                        ret_void,           TIMER_FUNC(f_timer_stop)},
      {"timer_stopall", 0, 0, 0,            NULL,
                        ret_void,           TIMER_FUNC(f_timer_stopall)},
***************
*** 1770,1782 ****
                        ret_number,         f_type},
      {"typename",      1, 1, FEARG_1,      NULL,
                        ret_string,         f_typename},
!     {"undofile",      1, 1, FEARG_1,      NULL,
                        ret_string,         f_undofile},
      {"undotree",      0, 0, 0,            NULL,
                        ret_dict_any,       f_undotree},
      {"uniq",          1, 3, FEARG_1,      NULL,
                        ret_list_any,       f_uniq},
!     {"values",                1, 1, FEARG_1,      NULL,
                        ret_list_any,       f_values},
      {"virtcol",               1, 1, FEARG_1,      NULL,
                        ret_number,         f_virtcol},
--- 1817,1829 ----
                        ret_number,         f_type},
      {"typename",      1, 1, FEARG_1,      NULL,
                        ret_string,         f_typename},
!     {"undofile",      1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_undofile},
      {"undotree",      0, 0, 0,            NULL,
                        ret_dict_any,       f_undotree},
      {"uniq",          1, 3, FEARG_1,      NULL,
                        ret_list_any,       f_uniq},
!     {"values",                1, 1, FEARG_1,      arg1_dict,
                        ret_list_any,       f_values},
      {"virtcol",               1, 1, FEARG_1,      NULL,
                        ret_number,         f_virtcol},
***************
*** 1786,1794 ****
                        ret_number,         f_wildmenumode},
      {"win_execute",   2, 3, FEARG_2,      NULL,
                        ret_string,         f_win_execute},
!     {"win_findbuf",   1, 1, FEARG_1,      NULL,
                        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},
--- 1833,1841 ----
                        ret_number,         f_wildmenumode},
      {"win_execute",   2, 3, FEARG_2,      NULL,
                        ret_string,         f_win_execute},
!     {"win_findbuf",   1, 1, FEARG_1,      arg1_number,
                        ret_list_number,    f_win_findbuf},
!     {"win_getid",     0, 2, FEARG_1,      arg2_number,
                        ret_number,         f_win_getid},
      {"win_gettype",   0, 1, FEARG_1,      arg1_number,
                        ret_string,         f_win_gettype},
***************
*** 1814,1824 ****
                        ret_list_any,       f_winlayout},
      {"winline",               0, 0, 0,            NULL,
                        ret_number,         f_winline},
!     {"winnr",         0, 1, FEARG_1,      NULL,
                        ret_number,         f_winnr},
      {"winrestcmd",    0, 0, 0,            NULL,
                        ret_string,         f_winrestcmd},
!     {"winrestview",   1, 1, FEARG_1,      NULL,
                        ret_void,           f_winrestview},
      {"winsaveview",   0, 0, 0,            NULL,
                        ret_dict_number,    f_winsaveview},
--- 1861,1871 ----
                        ret_list_any,       f_winlayout},
      {"winline",               0, 0, 0,            NULL,
                        ret_number,         f_winline},
!     {"winnr",         0, 1, FEARG_1,      arg1_string,
                        ret_number,         f_winnr},
      {"winrestcmd",    0, 0, 0,            NULL,
                        ret_string,         f_winrestcmd},
!     {"winrestview",   1, 1, FEARG_1,      arg1_dict,
                        ret_void,           f_winrestview},
      {"winsaveview",   0, 0, 0,            NULL,
                        ret_dict_number,    f_winsaveview},
*** ../vim-8.2.3083/src/testdir/test_functions.vim      2021-07-02 
20:19:27.964669621 +0200
--- src/testdir/test_functions.vim      2021-07-03 11:53:01.558586873 +0200
***************
*** 169,175 ****
  
    if has('float')
      call assert_equal(3, strwidth(1.2))
!     call CheckDefExecAndScriptFailure(['echo strwidth(1.2)'], 'E806:')
    endif
  
    set ambiwidth&
--- 169,176 ----
  
    if has('float')
      call assert_equal(3, strwidth(1.2))
!     call CheckDefFailure(['echo strwidth(1.2)'], 'E1013:')
!     call CheckScriptFailure(['vim9script', 'echo strwidth(1.2)'], 'E806:')
    endif
  
    set ambiwidth&
***************
*** 236,242 ****
    call assert_fails('call str2nr({->2})', 'E729:')
    if has('float')
      call assert_equal(1, str2nr(1.2))
!     call CheckDefExecFailure(['echo str2nr(1.2)'], 'E1013:')
      call CheckScriptFailure(['vim9script', 'echo str2nr(1.2)'], 'E806:')
    endif
    call assert_fails('call str2nr(10, [])', 'E745:')
--- 237,243 ----
    call assert_fails('call str2nr({->2})', 'E729:')
    if has('float')
      call assert_equal(1, str2nr(1.2))
!     call CheckDefFailure(['echo str2nr(1.2)'], 'E1013:')
      call CheckScriptFailure(['vim9script', 'echo str2nr(1.2)'], 'E806:')
    endif
    call assert_fails('call str2nr(10, [])', 'E745:')
***************
*** 499,505 ****
    call assert_fails('call simplify({})', 'E731:')
    if has('float')
      call assert_equal('1.2', simplify(1.2))
!     call CheckDefExecAndScriptFailure(['echo simplify(1.2)'], 'E806:')
    endif
  endfunc
  
--- 500,507 ----
    call assert_fails('call simplify({})', 'E731:')
    if has('float')
      call assert_equal('1.2', simplify(1.2))
!     call CheckDefFailure(['echo simplify(1.2)'], 'E1013:')
!     call CheckScriptFailure(['vim9script', 'echo simplify(1.2)'], 'E806:')
    endif
  endfunc
  
*** ../vim-8.2.3083/src/testdir/test_glob2regpat.vim    2021-06-06 
14:14:35.352774336 +0200
--- src/testdir/test_glob2regpat.vim    2021-07-03 11:53:01.558586873 +0200
***************
*** 5,11 ****
  func Test_glob2regpat_invalid()
    if has('float')
      call assert_equal('^1\.33$', glob2regpat(1.33))
!     call CheckDefExecAndScriptFailure(['echo glob2regpat(1.33)'], 'E806:')
    endif
    call assert_fails('call glob2regpat("}")', 'E219:')
    call assert_fails('call glob2regpat("{")', 'E220:')
--- 5,12 ----
  func Test_glob2regpat_invalid()
    if has('float')
      call assert_equal('^1\.33$', glob2regpat(1.33))
!     call CheckDefFailure(['echo glob2regpat(1.2)'], 'E1013:')
!     call CheckScriptFailure(['vim9script', 'echo glob2regpat(1.2)'], 'E806:')
    endif
    call assert_fails('call glob2regpat("}")', 'E219:')
    call assert_fails('call glob2regpat("{")', 'E220:')
*** ../vim-8.2.3083/src/testdir/test_vim9_builtin.vim   2021-06-22 
19:52:23.901800877 +0200
--- src/testdir/test_vim9_builtin.vim   2021-07-03 11:53:01.558586873 +0200
***************
*** 180,191 ****
--- 180,193 ----
    CheckGui
    CheckFeature balloon_eval
  
+   assert_fails('balloon_show(10)', 'E1174:')
    assert_fails('balloon_show(true)', 'E1174:')
  enddef
  
  def Test_balloon_split()
    CheckFeature balloon_eval_term
  
+   assert_fails('balloon_split([])', 'E1174:')
    assert_fails('balloon_split(true)', 'E1174:')
  enddef
  
***************
*** 206,219 ****
    CheckDefExecAndScriptFailure(lines, 'E1174: String required for argument 4')
  enddef
  
  def Test_bufexists()
!   assert_fails('bufexists(true)', 'E1174')
  enddef
  
  def Test_buflisted()
    var res: bool = buflisted('asdf')
    assert_equal(false, res)
!   assert_fails('buflisted(true)', 'E1174')
  enddef
  
  def Test_bufname()
--- 208,235 ----
    CheckDefExecAndScriptFailure(lines, 'E1174: String required for argument 4')
  enddef
  
+ def Test_bufadd()
+   assert_fails('bufadd([])', 'E730:')
+ enddef
+ 
  def Test_bufexists()
!   assert_fails('bufexists(true)', 'E1174:')
  enddef
  
  def Test_buflisted()
    var res: bool = buflisted('asdf')
    assert_equal(false, res)
!   assert_fails('buflisted(true)', 'E1174:')
!   assert_fails('buflisted([])', 'E1174:')
! enddef
! 
! def Test_bufload()
!   assert_fails('bufload([])', 'E730:')
! enddef
! 
! def Test_bufloaded()
!   assert_fails('bufloaded(true)', 'E1174:')
!   assert_fails('bufloaded([])', 'E1174:')
  enddef
  
  def Test_bufname()
***************
*** 222,227 ****
--- 238,245 ----
    edit OtherFile
    bufname('#')->assert_equal('SomeFile')
    close
+   assert_fails('bufname(true)', 'E1138:')
+   assert_fails('bufname([])', 'E745:')
  enddef
  
  def Test_bufnr()
***************
*** 246,252 ****
    bwipe SomeFile
    bwipe OtherFile
  
!   assert_fails('bufwinid(true)', 'E1138')
  enddef
  
  def Test_call_call()
--- 264,282 ----
    bwipe SomeFile
    bwipe OtherFile
  
!   assert_fails('bufwinid(true)', 'E1138:')
!   assert_fails('bufwinid([])', 'E745:')
! enddef
! 
! def Test_bufwinnr()
!   assert_fails('bufwinnr(true)', 'E1138:')
!   assert_fails('bufwinnr([])', 'E745:')
! enddef
! 
! def Test_byte2line()
!   CheckDefFailure(['byte2line("1")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['byte2line([])'], 'E1013: Argument 1: type mismatch, 
expected number but got list<unknown>')
!   assert_equal(-1, byte2line(0))
  enddef
  
  def Test_call_call()
***************
*** 259,280 ****
    if !has('channel')
      CheckFeature channel
    endif
!   assert_fails('ch_logfile(true)', 'E1174')
!   assert_fails('ch_logfile("foo", true)', 'E1174')
  enddef
  
  def Test_char2nr()
    char2nr('あ', true)->assert_equal(12354)
  
!   assert_fails('char2nr(true)', 'E1174')
  enddef
  
  def Test_charclass()
!   assert_fails('charclass(true)', 'E1174')
  enddef
  
  def Test_chdir()
!   assert_fails('chdir(true)', 'E1174')
  enddef
  
  def Test_clearmatches()
--- 289,317 ----
    if !has('channel')
      CheckFeature channel
    endif
!   assert_fails('ch_logfile(true)', 'E1174:')
!   assert_fails('ch_logfile("foo", true)', 'E1174:')
  enddef
  
  def Test_char2nr()
    char2nr('あ', true)->assert_equal(12354)
  
!   assert_fails('char2nr(true)', 'E1174:')
  enddef
  
  def Test_charclass()
!   assert_fails('charclass(true)', 'E1174:')
  enddef
  
  def Test_chdir()
!   assert_fails('chdir(true)', 'E1174:')
! enddef
! 
! def Test_cindent()
!   CheckDefFailure(['cindent([])'], 'E1013: Argument 1: type mismatch, 
expected string but got list<unknown>')
!   CheckDefFailure(['cindent(null)'], 'E1013: Argument 1: type mismatch, 
expected string but got special')
!   assert_equal(-1, cindent(0))
!   assert_equal(0, cindent('.'))
  enddef
  
  def Test_clearmatches()
***************
*** 286,292 ****
    setline(1, 'asdf')
    col([1, '$'])->assert_equal(5)
  
!   assert_fails('col(true)', 'E1174')
  enddef
  
  def Test_confirm()
--- 323,329 ----
    setline(1, 'asdf')
    col([1, '$'])->assert_equal(5)
  
!   assert_fails('col(true)', 'E1174:')
  enddef
  
  def Test_confirm()
***************
*** 294,302 ****
      CheckFeature dialog_con
    endif
  
!   assert_fails('confirm(true)', 'E1174')
!   assert_fails('confirm("yes", true)', 'E1174')
!   assert_fails('confirm("yes", "maybe", 2, true)', 'E1174')
  enddef
  
  def Test_copy_return_type()
--- 331,346 ----
      CheckFeature dialog_con
    endif
  
!   assert_fails('confirm(true)', 'E1174:')
!   assert_fails('confirm("yes", true)', 'E1174:')
!   assert_fails('confirm("yes", "maybe", 2, true)', 'E1174:')
! enddef
! 
! def Test_complete_info()
!   CheckDefFailure(['complete_info("")'], 'E1013: Argument 1: type mismatch, 
expected list<string> but got string')
!   CheckDefFailure(['complete_info({})'], 'E1013: Argument 1: type mismatch, 
expected list<string> but got dict<unknown>')
!   assert_equal({'pum_visible': 0, 'mode': '', 'selected': -1, 'items': []}, 
complete_info())
!   assert_equal({'mode': '', 'items': []}, complete_info(['mode', 'items']))
  enddef
  
  def Test_copy_return_type()
***************
*** 346,357 ****
    assert_equal(true, res)
  enddef
  
  def Test_executable()
    assert_false(executable(""))
    assert_false(executable(test_null_string()))
  
!   CheckDefExecFailure(['echo executable(123)'], 'E1174:')
!   CheckDefExecFailure(['echo executable(true)'], 'E1174:')
  enddef
  
  def Test_execute()
--- 390,421 ----
    assert_equal(true, res)
  enddef
  
+ def Test_diff_filler()
+   CheckDefFailure(['diff_filler([])'], 'E1013: Argument 1: type mismatch, 
expected string but got list<unknown>')
+   CheckDefFailure(['diff_filler(true)'], 'E1013: Argument 1: type mismatch, 
expected string but got bool')
+   assert_equal(0, diff_filler(1))
+   assert_equal(0, diff_filler('.'))
+ enddef
+ 
+ def Test_escape()
+   CheckDefFailure(['escape("a", 10)'], 'E1013: Argument 2: type mismatch, 
expected string but got number')
+   CheckDefFailure(['escape(10, " ")'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   CheckDefFailure(['escape(true, false)'], 'E1013: Argument 1: type mismatch, 
expected string but got bool')
+   assert_equal('a\:b', escape("a:b", ":"))
+ enddef
+ 
+ def Test_eval()
+   CheckDefFailure(['eval(10)'], 'E1013: Argument 1: type mismatch, expected 
string but got number')
+   CheckDefFailure(['eval(null)'], 'E1013: Argument 1: type mismatch, expected 
string but got special')
+   assert_equal(2, eval('1 + 1'))
+ enddef
+ 
  def Test_executable()
    assert_false(executable(""))
    assert_false(executable(test_null_string()))
  
!   CheckDefExecFailure(['echo executable(123)'], 'E1013:')
!   CheckDefExecFailure(['echo executable(true)'], 'E1013:')
  enddef
  
  def Test_execute()
***************
*** 367,377 ****
  enddef
  
  def Test_exepath()
!   CheckDefExecFailure(['echo exepath(true)'], 'E1174:')
!   CheckDefExecFailure(['echo exepath(v:null)'], 'E1174:')
    CheckDefExecFailure(['echo exepath("")'], 'E1175:')
  enddef
  
  def Test_expand()
    split SomeFile
    expand('%', true, true)->assert_equal(['SomeFile'])
--- 431,446 ----
  enddef
  
  def Test_exepath()
!   CheckDefExecFailure(['echo exepath(true)'], 'E1013:')
!   CheckDefExecFailure(['echo exepath(v:null)'], 'E1013:')
    CheckDefExecFailure(['echo exepath("")'], 'E1175:')
  enddef
  
+ def Test_exists()
+   CheckDefFailure(['exists(10)'], 'E1013: Argument 1: type mismatch, expected 
string but got number')
+   call assert_equal(1, exists('&tabstop'))
+ enddef
+ 
  def Test_expand()
    split SomeFile
    expand('%', true, true)->assert_equal(['SomeFile'])
***************
*** 507,512 ****
--- 576,591 ----
    CheckScriptFailure(lines, 'E1001: Variable not found: m')
  enddef
  
+ def Test_feedkeys()
+   CheckDefFailure(['feedkeys(10)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   CheckDefFailure(['feedkeys("x", 10)'], 'E1013: Argument 2: type mismatch, 
expected string but got number')
+   CheckDefFailure(['feedkeys([], {})'], 'E1013: Argument 1: type mismatch, 
expected string but got list<unknown>')
+   g:TestVar = 1
+   feedkeys(":g:TestVar = 789\n", 'xt')
+   assert_equal(789, g:TestVar)
+   unlet g:TestVar
+ enddef
+ 
  def Test_job_info_return_type()
    if has('job')
      job_start(&shell)
***************
*** 521,536 ****
    assert_false(filereadable(""))
    assert_false(filereadable(test_null_string()))
  
!   CheckDefExecFailure(['echo filereadable(123)'], 'E1174:')
!   CheckDefExecFailure(['echo filereadable(true)'], 'E1174:')
  enddef
  
  def Test_filewritable()
    assert_false(filewritable(""))
    assert_false(filewritable(test_null_string()))
  
!   CheckDefExecFailure(['echo filewritable(123)'], 'E1174:')
!   CheckDefExecFailure(['echo filewritable(true)'], 'E1174:')
  enddef
  
  def Test_finddir()
--- 600,615 ----
    assert_false(filereadable(""))
    assert_false(filereadable(test_null_string()))
  
!   CheckDefExecFailure(['echo filereadable(123)'], 'E1013:')
!   CheckDefExecFailure(['echo filereadable(true)'], 'E1013:')
  enddef
  
  def Test_filewritable()
    assert_false(filewritable(""))
    assert_false(filewritable(test_null_string()))
  
!   CheckDefExecFailure(['echo filewritable(123)'], 'E1013:')
!   CheckDefExecFailure(['echo filewritable(true)'], 'E1013:')
  enddef
  
  def Test_finddir()
***************
*** 620,634 ****
    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")'])
    CheckDefSuccess(['echo fnamemodify("file", test_null_string())'])
    CheckDefSuccess(['echo fnamemodify("file", "")'])
  
!   CheckDefExecFailure(['echo fnamemodify(true, ":p")'], 'E1174: String 
required for argument 1')
!   CheckDefExecFailure(['echo fnamemodify(v:null, ":p")'], 'E1174: String 
required for argument 1')
!   CheckDefExecFailure(['echo fnamemodify("file", true)'], 'E1174: String 
required for argument 2')
  enddef
  
  def Wrong_dict_key_type(items: list<number>): list<number>
--- 699,718 ----
    CheckDefFailure(['echo trunc("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
+ def Test_fnameescape()
+   CheckDefFailure(['fnameescape(10)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   assert_equal('\+a\%b\|', fnameescape('+a%b|'))
+ enddef
+ 
  def Test_fnamemodify()
    CheckDefSuccess(['echo fnamemodify(test_null_string(), ":p")'])
    CheckDefSuccess(['echo fnamemodify("", ":p")'])
    CheckDefSuccess(['echo fnamemodify("file", test_null_string())'])
    CheckDefSuccess(['echo fnamemodify("file", "")'])
  
!   CheckDefExecFailure(['echo fnamemodify(true, ":p")'], 'E1013: Argument 1: 
type mismatch, expected string but got bool')
!   CheckDefExecFailure(['echo fnamemodify(v:null, ":p")'], 'E1013: Argument 1: 
type mismatch, expected string but got special')
!   CheckDefExecFailure(['echo fnamemodify("file", true)'],  'E1013: Argument 
2: type mismatch, expected string but got bool')
  enddef
  
  def Wrong_dict_key_type(items: list<number>): list<number>
***************
*** 654,659 ****
--- 738,767 ----
    res->assert_equal({aa: [1], ac: [3]})
  enddef
  
+ def Test_foldclosed()
+   CheckDefFailure(['foldclosed(function("min"))'], 'E1013: Argument 1: type 
mismatch, expected string but got func(...): any')
+   assert_equal(-1, foldclosed(1))
+   assert_equal(-1, foldclosed('$'))
+ enddef
+ 
+ def Test_foldclosedend()
+   CheckDefFailure(['foldclosedend(true)'], 'E1013: Argument 1: type mismatch, 
expected string but got bool')
+   assert_equal(-1, foldclosedend(1))
+   assert_equal(-1, foldclosedend('w0'))
+ enddef
+ 
+ def Test_foldlevel()
+   CheckDefFailure(['foldlevel(0z10)'], 'E1013: Argument 1: type mismatch, 
expected string but got blob')
+   assert_equal(0, foldlevel(1))
+   assert_equal(0, foldlevel('.'))
+ enddef
+ 
+ def Test_foldtextresult()
+   CheckDefFailure(['foldtextresult(1.1)'], 'E1013: Argument 1: type mismatch, 
expected string but got float')
+   assert_equal('', foldtextresult(1))
+   assert_equal('', foldtextresult('.'))
+ enddef
+ 
  def Test_fullcommand()
    assert_equal('next', fullcommand('n'))
    assert_equal('noremap', fullcommand('no'))
***************
*** 762,797 ****
    d->assert_equal({items: []})
  enddef
  
  def Test_getfperm()
    assert_equal('', getfperm(""))
    assert_equal('', getfperm(test_null_string()))
  
!   CheckDefExecFailure(['echo getfperm(true)'], 'E1174:')
!   CheckDefExecFailure(['echo getfperm(v:null)'], 'E1174:')
  enddef
  
  def Test_getfsize()
    assert_equal(-1, getfsize(""))
    assert_equal(-1, getfsize(test_null_string()))
  
!   CheckDefExecFailure(['echo getfsize(true)'], 'E1174:')
!   CheckDefExecFailure(['echo getfsize(v:null)'], 'E1174:')
  enddef
  
  def Test_getftime()
    assert_equal(-1, getftime(""))
    assert_equal(-1, getftime(test_null_string()))
  
!   CheckDefExecFailure(['echo getftime(true)'], 'E1174:')
!   CheckDefExecFailure(['echo getftime(v:null)'], 'E1174:')
  enddef
  
  def Test_getftype()
    assert_equal('', getftype(""))
    assert_equal('', getftype(test_null_string()))
  
!   CheckDefExecFailure(['echo getftype(true)'], 'E1174:')
!   CheckDefExecFailure(['echo getftype(v:null)'], 'E1174:')
  enddef
  
  def Test_getjumplist()
--- 870,909 ----
    d->assert_equal({items: []})
  enddef
  
+ def Test_getfontname()
+   CheckDefFailure(['getfontname(10)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+ enddef
+ 
  def Test_getfperm()
    assert_equal('', getfperm(""))
    assert_equal('', getfperm(test_null_string()))
  
!   CheckDefExecFailure(['echo getfperm(true)'], 'E1013:')
!   CheckDefExecFailure(['echo getfperm(v:null)'], 'E1013:')
  enddef
  
  def Test_getfsize()
    assert_equal(-1, getfsize(""))
    assert_equal(-1, getfsize(test_null_string()))
  
!   CheckDefExecFailure(['echo getfsize(true)'], 'E1013:')
!   CheckDefExecFailure(['echo getfsize(v:null)'], 'E1013:')
  enddef
  
  def Test_getftime()
    assert_equal(-1, getftime(""))
    assert_equal(-1, getftime(test_null_string()))
  
!   CheckDefExecFailure(['echo getftime(true)'], 'E1013:')
!   CheckDefExecFailure(['echo getftime(v:null)'], 'E1013:')
  enddef
  
  def Test_getftype()
    assert_equal('', getftype(""))
    assert_equal('', getftype(test_null_string()))
  
!   CheckDefExecFailure(['echo getftype(true)'], 'E1013:')
!   CheckDefExecFailure(['echo getftype(v:null)'], 'E1013:')
  enddef
  
  def Test_getjumplist()
***************
*** 800,809 ****
--- 912,938 ----
    CheckDefFailure(['echo getjumplist(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
  enddef
  
+ def Test_getmarklist()
+   CheckDefFailure(['getmarklist([])'], 'E1013: Argument 1: type mismatch, 
expected string but got list<unknown>')
+   assert_equal([], getmarklist(10000))
+   assert_fails('getmarklist("a%b@#")', 'E94:')
+ enddef
+ 
  def Test_getmatches()
    CheckDefFailure(['echo getmatches("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
+ def Test_getpos()
+   CheckDefFailure(['getpos(10)'], 'E1013: Argument 1: type mismatch, expected 
string but got number')
+   assert_equal([0, 1, 1, 0], getpos('.'))
+   assert_equal([0, 0, 0, 0], getpos('a'))
+ enddef
+ 
+ def Test_getqflist()
+   CheckDefFailure(['getqflist([])'], 'E1013: Argument 1: type mismatch, 
expected dict<any> but got list<unknown>')
+   call assert_equal({}, getqflist({}))
+ enddef
+ 
  def Test_getqflist_return_type()
    var l = getqflist()
    l->assert_equal([])
***************
*** 847,852 ****
--- 976,986 ----
    CheckDefFailure(['echo gettagstack("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
+ def Test_gettext()
+   CheckDefFailure(['gettext(10)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   assert_equal('abc', gettext("abc"))
+ enddef
+ 
  def Test_getwininfo()
    CheckDefFailure(['echo getwininfo("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
***************
*** 859,864 ****
--- 993,1003 ----
    glob('runtest.vim', true, true, true)->assert_equal(['runtest.vim'])
  enddef
  
+ def Test_glob2regpat()
+   CheckDefFailure(['glob2regpat(null)'], 'E1013: Argument 1: type mismatch, 
expected string but got special')
+   assert_equal('^$', glob2regpat(''))
+ enddef
+ 
  def Test_globpath()
    globpath('.', 'runtest.vim', true, true, 
true)->assert_equal(['./runtest.vim'])
  enddef
***************
*** 880,889 ****
--- 1019,1074 ----
    iunabbrev foo
  enddef
  
+ def Test_histadd()
+   CheckDefFailure(['histadd(1, "x")'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   CheckDefFailure(['histadd(":", 10)'], 'E1013: Argument 2: type mismatch, 
expected string but got number')
+   histadd("search", 'skyblue')
+   assert_equal('skyblue', histget('/', -1))
+ enddef
+ 
+ def Test_histnr()
+   CheckDefFailure(['histnr(10)'], 'E1013: Argument 1: type mismatch, expected 
string but got number')
+   assert_equal(-1, histnr('abc'))
+ enddef
+ 
+ def Test_hlID()
+   CheckDefFailure(['hlID(10)'], 'E1013: Argument 1: type mismatch, expected 
string but got number')
+   assert_equal(0, hlID('NonExistingHighlight'))
+ enddef
+ 
+ def Test_hlexists()
+   CheckDefFailure(['hlexists([])'], 'E1013: Argument 1: type mismatch, 
expected string but got list<unknown>')
+   assert_equal(0, hlexists('NonExistingHighlight'))
+ enddef
+ 
+ def Test_iconv()
+   CheckDefFailure(['iconv(1, "from", "to")'], 'E1013: Argument 1: type 
mismatch, expected string but got number')
+   CheckDefFailure(['iconv("abc", 10, "to")'], 'E1013: Argument 2: type 
mismatch, expected string but got number')
+   CheckDefFailure(['iconv("abc", "from", 20)'], 'E1013: Argument 3: type 
mismatch, expected string but got number')
+   assert_equal('abc', iconv('abc', 'fromenc', 'toenc'))
+ enddef
+ 
  def Test_index()
    index(['a', 'b', 'a', 'B'], 'b', 2, true)->assert_equal(3)
  enddef
  
+ def Test_inputlist()
+   CheckDefFailure(['inputlist(10)'], 'E1013: Argument 1: type mismatch, 
expected list<string> but got number')
+   CheckDefFailure(['inputlist("abc")'], 'E1013: Argument 1: type mismatch, 
expected list<string> but got string')
+   CheckDefFailure(['inputlist([1, 2, 3])'], 'E1013: Argument 1: type 
mismatch, expected list<string> but got list<number>')
+   feedkeys("2\<CR>", 't')
+   var r: number = inputlist(['a', 'b', 'c'])
+   assert_equal(2, r)
+ enddef
+ 
+ def Test_inputsecret()
+   CheckDefFailure(['inputsecret(10)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   CheckDefFailure(['inputsecret("Pass:", 20)'], 'E1013: Argument 2: type 
mismatch, expected string but got number')
+   feedkeys("\<CR>", 't')
+   var ans: string = inputsecret('Pass:', '123')
+   assert_equal('123', ans)
+ enddef
+ 
  let s:number_one = 1
  let s:number_two = 2
  let s:string_keep = 'keep'
***************
*** 928,940 ****
    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'])
  enddef
  
  def Test_line()
!   assert_fails('line(true)', 'E1174')
  enddef
  
  def Test_list2str_str2list_utf8()
--- 1113,1163 ----
    CheckDefFailure(['echo invert("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
+ def Test_isdirectory()
+   CheckDefFailure(['isdirectory(1.1)'], 'E1013: Argument 1: type mismatch, 
expected string but got float')
+   assert_false(isdirectory('NonExistingDir'))
+ enddef
+ 
+ def Test_items()
+   CheckDefFailure(['[]->items()'], 'E1013: Argument 1: type mismatch, 
expected dict<any> but got list<unknown>')
+   assert_equal([['a', 10], ['b', 20]], {'a': 10, 'b': 20}->items())
+   assert_equal([], {}->items())
+ enddef
+ 
+ def Test_js_decode()
+   CheckDefFailure(['js_decode(10)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   assert_equal([1, 2], js_decode('[1,2]'))
+ enddef
+ 
+ def Test_json_decode()
+   CheckDefFailure(['json_decode(true)'], 'E1013: Argument 1: type mismatch, 
expected string but got bool')
+   assert_equal(1.0, json_decode('1.0'))
+ enddef
+ 
+ def Test_keys()
+   CheckDefFailure(['keys([])'], 'E1013: Argument 1: type mismatch, expected 
dict<any> but got list<unknown>')
+   assert_equal(['a'], {a: 'v'}->keys())
+   assert_equal([], {}->keys())
+ enddef
+ 
  def Test_keys_return_type()
    const var: list<string> = {a: 1, b: 2}->keys()
    var->assert_equal(['a', 'b'])
  enddef
  
  def Test_line()
!   assert_fails('line(true)', 'E1174:')
! enddef
! 
! def Test_line2byte()
!   CheckDefFailure(['line2byte(true)'], 'E1013: Argument 1: type mismatch, 
expected string but got bool')
!   assert_equal(-1, line2byte(1))
!   assert_equal(-1, line2byte(10000))
! enddef
! 
! def Test_lispindent()
!   CheckDefFailure(['lispindent({})'], 'E1013: Argument 1: type mismatch, 
expected string but got dict<unknown>')
!   assert_equal(0, lispindent(1))
  enddef
  
  def Test_list2str_str2list_utf8()
***************
*** 1080,1085 ****
--- 1303,1315 ----
    assert_equal([4, 5], l2)
  enddef
  
+ def Test_menu_info()
+   CheckDefFailure(['menu_info(10)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   CheckDefFailure(['menu_info(10, "n")'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   CheckDefFailure(['menu_info("File", 10)'], 'E1013: Argument 2: type 
mismatch, expected string but got number')
+   assert_equal({}, menu_info('aMenu'))
+ enddef
+ 
  def Test_min()
    g:flag = true
    var l1: list<number> = g:flag
***************
*** 1094,1099 ****
--- 1324,1334 ----
    assert_equal([4, 5], l2)
  enddef
  
+ def Test_nextnonblank()
+   CheckDefFailure(['nextnonblank(null)'], 'E1013: Argument 1: type mismatch, 
expected string but got special')
+   assert_equal(0, nextnonblank(1))
+ enddef
+ 
  def Test_nr2char()
    nr2char(97, true)->assert_equal('a')
  enddef
***************
*** 1103,1108 ****
--- 1338,1360 ----
    CheckDefFailure(['echo or(0x1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
  enddef
  
+ def Test_prevnonblank()
+   CheckDefFailure(['prevnonblank(null)'], 'E1013: Argument 1: type mismatch, 
expected string but got special')
+   assert_equal(0, prevnonblank(1))
+ enddef
+ 
+ def Test_prompt_getprompt()
+   CheckDefFailure(['prompt_getprompt([])'], 'E1013: Argument 1: type 
mismatch, expected string but got list<unknown>')
+   assert_equal('', prompt_getprompt('NonExistingBuf'))
+ enddef
+ 
+ def Test_rand()
+   CheckDefFailure(['rand(10)'], 'E1013: Argument 1: type mismatch, expected 
list<number> but got number')
+   CheckDefFailure(['rand(["a"])'], 'E1013: Argument 1: type mismatch, 
expected list<number> but got list<string>')
+   assert_true(rand() >= 0)
+   assert_true(rand(srand()) >= 0)
+ enddef
+ 
  def Test_readdir()
     eval expand('sautest')->readdir((e) => e[0] !=# '.')
     eval expand('sautest')->readdirex((e) => e.name[0] !=# '.')
***************
*** 1134,1139 ****
--- 1386,1426 ----
    delete('Xreadfile')
  enddef
  
+ def Test_reltime()
+   CheckDefFailure(['reltime("x")'], 'E1013: Argument 1: type mismatch, 
expected list<number> but got string')
+   CheckDefFailure(['reltime(["x", "y"])'], 'E1013: Argument 1: type mismatch, 
expected list<number> but got list<string>')
+   CheckDefFailure(['reltime([1, 2], 10)'], 'E1013: Argument 2: type mismatch, 
expected list<number> but got number')
+   CheckDefFailure(['reltime([1, 2], ["a", "b"])'], 'E1013: Argument 2: type 
mismatch, expected list<number> but got list<string>')
+   var start: list<any> = reltime()
+   assert_true(type(reltime(start)) == v:t_list)
+   var end: list<any> = reltime()
+   assert_true(type(reltime(start, end)) == v:t_list)
+ enddef
+ 
+ def Test_reltimefloat()
+   CheckDefFailure(['reltimefloat("x")'], 'E1013: Argument 1: type mismatch, 
expected list<number> but got string')
+   CheckDefFailure(['reltimefloat([1.1])'], 'E1013: Argument 1: type mismatch, 
expected list<number> but got list<float>')
+   assert_true(type(reltimefloat(reltime())) == v:t_float)
+ enddef
+ 
+ def Test_reltimestr()
+   CheckDefFailure(['reltimestr(true)'], 'E1013: Argument 1: type mismatch, 
expected list<number> but got bool')
+   CheckDefFailure(['reltimestr([true])'], 'E1013: Argument 1: type mismatch, 
expected list<number> but got list<bool>')
+   assert_true(type(reltimestr(reltime())) == v:t_string)
+ enddef
+ 
+ def Test_remote_foreground()
+   CheckFeature clientserver
+   # remote_foreground() doesn't fail on MS-Windows
+   CheckNotMSWindows
+   CheckDefFailure(['remote_foreground(10)'], 'E1013: Argument 1: type 
mismatch, expected string but got number')
+   assert_fails('remote_foreground("NonExistingServer")', 'E241:')
+ enddef
+ 
+ def Test_remote_startserver()
+   CheckDefFailure(['remote_startserver({})'], 'E1013: Argument 1: type 
mismatch, expected string but got dict<unknown>')
+ enddef
+ 
  def Test_remove_return_type()
    var l = remove({one: [1, 2], two: [3, 4]}, 'one')
    var res = 0
***************
*** 1143,1148 ****
--- 1430,1445 ----
    res->assert_equal(3)
  enddef
  
+ def Test_rename()
+   CheckDefFailure(['rename(1, "b")'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   CheckDefFailure(['rename("a", 2)'], 'E1013: Argument 2: type mismatch, 
expected string but got number')
+ enddef
+ 
+ def Test_resolve()
+   CheckDefFailure(['resolve([])'], 'E1013: Argument 1: type mismatch, 
expected string but got list<unknown>')
+   assert_equal('SomeFile', resolve('SomeFile'))
+ enddef
+ 
  def Test_reverse_return_type()
    var l = reverse([1, 2, 3])
    var res = 0
***************
*** 1167,1172 ****
--- 1464,1476 ----
    CheckDefFailure(['echo screenchars(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
  enddef
  
+ def Test_screenpos()
+   CheckDefFailure(['screenpos("a", 1, 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
+   CheckDefFailure(['screenpos(1, "b", 1)'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
+   CheckDefFailure(['screenpos(1, 1, "c")'], 'E1013: Argument 3: type 
mismatch, expected number but got string')
+   assert_equal({col: 1, row: 1, endcol: 1, curscol: 1}, screenpos(1, 1, 1))
+ 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')
***************
*** 1334,1343 ****
--- 1638,1660 ----
    getbufvar('%', 'myvar')->assert_equal(123)
  enddef
  
+ def Test_setcharsearch()
+   CheckDefFailure(['setcharsearch("x")'], 'E1013: Argument 1: type mismatch, 
expected dict<any> but got string')
+   CheckDefFailure(['setcharsearch([])'], 'E1013: Argument 1: type mismatch, 
expected dict<any> but got list<unknown>')
+   var d: dict<any> = {char: 'x', forward: 1, until: 1}
+   setcharsearch(d)
+   assert_equal(d, getcharsearch())
+ enddef
+ 
  def Test_setcmdpos()
    CheckDefFailure(['echo setcmdpos("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
+ def Test_setfperm()
+   CheckDefFailure(['setfperm(1, "b")'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   CheckDefFailure(['setfperm("a", 0z10)'], 'E1013: Argument 2: type mismatch, 
expected string but got blob')
+ enddef
+ 
  def Test_setloclist()
    var items = [{filename: '/tmp/file', lnum: 1, valid: true}]
    var what = {items: items}
***************
*** 1353,1362 ****
--- 1670,1690 ----
    assert_fails('setreg("ab", 0)', 'E1162:')
  enddef 
  
+ def Test_sha256()
+   CheckDefFailure(['sha256(100)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   CheckDefFailure(['sha256(0zABCD)'], 'E1013: Argument 1: type mismatch, 
expected string but got blob')
+   
assert_equal('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad',
 sha256('abc'))
+ enddef
+ 
  def Test_shiftwidth()
    CheckDefFailure(['echo shiftwidth("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
+ def Test_simplify()
+   CheckDefFailure(['simplify(100)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   call assert_equal('NonExistingFile', simplify('NonExistingFile'))
+ enddef
+ 
  def Test_slice()
    assert_equal('12345', slice('012345', 1))
    assert_equal('123', slice('012345', 1, 4))
***************
*** 1388,1393 ****
--- 1716,1731 ----
    endif
  enddef
  
+ def Test_sound_stop()
+   CheckFeature sound
+   CheckDefFailure(['sound_stop("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+ enddef
+ 
+ def Test_soundfold()
+   CheckDefFailure(['soundfold(20)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   assert_equal('abc', soundfold('abc'))
+ enddef
+ 
  def Test_sort_return_type()
    var res: list<number>
    res = [1, 2, 3]->sort()
***************
*** 1408,1417 ****
--- 1746,1770 ----
    CheckDefAndScriptSuccess(lines)
  enddef
  
+ def Test_spellbadword()
+   CheckDefFailure(['spellbadword(100)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   spellbadword('good')->assert_equal(['', ''])
+ enddef
+ 
  def Test_split()
    split('  aa  bb  ', '\W\+', true)->assert_equal(['', 'aa', 'bb', ''])
  enddef
  
+ def Test_srand()
+   CheckDefFailure(['srand("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
+   type(srand(100))->assert_equal(v:t_list)
+ enddef
+ 
+ def Test_state()
+   CheckDefFailure(['state({})'], 'E1013: Argument 1: type mismatch, expected 
string but got dict<unknown>')
+   assert_equal('', state('a'))
+ enddef
+ 
  def Run_str2float()
    if !has('float')
      MissingFeature 'float'
***************
*** 1439,1444 ****
--- 1792,1824 ----
    strchars("A\u20dd", true)->assert_equal(1)
  enddef
  
+ def Test_strlen()
+   CheckDefFailure(['strlen([])'], 'E1013: Argument 1: type mismatch, expected 
string but got list<unknown>')
+   "abc"->strlen()->assert_equal(3)
+   strlen(99)->assert_equal(2)
+ enddef
+ 
+ def Test_strptime()
+   CheckFunction strptime
+   CheckDefFailure(['strptime(10, "2021")'], 'E1013: Argument 1: type 
mismatch, expected string but got number')
+   CheckDefFailure(['strptime("%Y", 2021)'], 'E1013: Argument 2: type 
mismatch, expected string but got number')
+   # BUG: Directly calling strptime() in this function gives an "E117: Unknown
+   # function" error on MS-Windows even with the above CheckFunction call for
+   # strptime().
+   #assert_true(strptime('%Y', '2021') != 0)
+ enddef
+ 
+ def Test_strtrans()
+   CheckDefFailure(['strtrans(20)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   assert_equal('abc', strtrans('abc'))
+ enddef
+ 
+ def Test_strwidth()
+   CheckDefFailure(['strwidth(10)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   CheckScriptFailure(['vim9script', 'echo strwidth(10)'], 'E1024:')
+   assert_equal(4, strwidth('abcd'))
+ enddef
+ 
  def Test_submatch()
    var pat = 'A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)'
    var Rep = () => range(10)->mapnew((_, v) => submatch(v, true))->string()
***************
*** 1457,1462 ****
--- 1837,1852 ----
    endif
  enddef
  
+ def Test_swapinfo()
+   CheckDefFailure(['swapinfo({})'], 'E1013: Argument 1: type mismatch, 
expected string but got dict<unknown>')
+   call assert_equal({error: 'Cannot open file'}, swapinfo('x'))
+ enddef
+ 
+ def Test_swapname()
+   CheckDefFailure(['swapname([])'], 'E1013: Argument 1: type mismatch, 
expected string but got list<unknown>')
+   assert_fails('swapname("NonExistingBuf")', 'E94:')
+ enddef
+ 
  def Test_synID()
    new
    setline(1, "text")
***************
*** 1464,1469 ****
--- 1854,1875 ----
    bwipe!
  enddef
  
+ def Test_synIDtrans()
+   CheckDefFailure(['synIDtrans("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+ enddef
+ 
+ def Test_tabpagebuflist()
+   CheckDefFailure(['tabpagebuflist("t")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   assert_equal([bufnr('')], tabpagebuflist())
+   assert_equal([bufnr('')], tabpagebuflist(1))
+ enddef
+ 
+ def Test_tabpagenr()
+   CheckDefFailure(['tabpagenr(1)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   assert_equal(1, tabpagenr('$'))
+   assert_equal(1, tabpagenr())
+ enddef
+ 
  def Test_term_gettty()
    if !has('terminal')
      MissingFeature 'terminal'
***************
*** 1486,1491 ****
--- 1892,1903 ----
    endif
  enddef
  
+ def Test_timer_info()
+   CheckDefFailure(['timer_info("id")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   assert_equal([], timer_info(100))
+   assert_equal([], timer_info())
+ enddef
+ 
  def Test_timer_paused()
    var id = timer_start(50, () => 0)
    timer_pause(id, true)
***************
*** 1494,1499 ****
--- 1906,1916 ----
    timer_stop(id)
  enddef
  
+ def Test_timer_stop()
+   CheckDefFailure(['timer_stop("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   assert_equal(0, timer_stop(100))
+ enddef
+ 
  def Test_tolower()
    CheckDefFailure(['echo tolower(1)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
  enddef
***************
*** 1508,1524 ****
--- 1925,1970 ----
    CheckDefFailure(['echo tr("a", "a", 1)'], 'E1013: Argument 3: type 
mismatch, expected string but got number')
  enddef
  
+ def Test_undofile()
+   CheckDefFailure(['undofile(10)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   assert_equal('.abc.un~', fnamemodify(undofile('abc'), ':t'))
+ enddef
+ 
+ def Test_values()
+   CheckDefFailure(['values([])'], 'E1013: Argument 1: type mismatch, expected 
dict<any> but got list<unknown>')
+   assert_equal([], {}->values())
+   assert_equal(['sun'], {star: 'sun'}->values())
+ enddef
+ 
  def Test_win_execute()
    assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()'))
    assert_equal('', win_execute(342343, 'echo winnr()'))
  enddef
  
+ def Test_win_findbuf()
+   CheckDefFailure(['win_findbuf("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   assert_equal([], win_findbuf(1000))
+   assert_equal([win_getid()], win_findbuf(bufnr('')))
+ enddef
+ 
+ def Test_win_getid()
+   CheckDefFailure(['win_getid(".")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
+   CheckDefFailure(['win_getid(1, ".")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
+   assert_equal(win_getid(), win_getid(1, 1))
+ enddef
+ 
  def Test_win_splitmove()
    split
    win_splitmove(1, 2, {vertical: true, rightbelow: true})
    close
  enddef
  
+ def Test_winnr()
+   CheckDefFailure(['winnr([])'], 'E1013: Argument 1: type mismatch, expected 
string but got list<unknown>')
+   assert_equal(1, winnr())
+   assert_equal(1, winnr('$'))
+ enddef
+ 
  def Test_winrestcmd()
    split
    var cmd = winrestcmd()
***************
*** 1528,1533 ****
--- 1974,1987 ----
    close
  enddef
  
+ def Test_winrestview()
+   CheckDefFailure(['winrestview([])'], 'E1013: Argument 1: type mismatch, 
expected dict<any> but got list<unknown>')
+   :%d _
+   setline(1, 'Hello World')
+   winrestview({lnum: 1, col: 6})
+   assert_equal([1, 7], [line('.'), col('.')])
+ enddef
+ 
  def Test_winsaveview()
    var view: dict<number> = winsaveview()
  
*** ../vim-8.2.3083/src/testdir/test_vim9_expr.vim      2021-06-19 
20:45:07.353511358 +0200
--- src/testdir/test_vim9_expr.vim      2021-07-03 11:53:01.558586873 +0200
***************
*** 2973,2985 ****
    lines =<< trim END
      def RetVoid()
      enddef
-     RetVoid()->byte2line()
-   END
-   CheckDefExecAndScriptFailure(lines, 'E1031:')
- 
-   lines =<< trim END
-     def RetVoid()
-     enddef
      RetVoid()->byteidx(3)
    END
    CheckDefExecAndScriptFailure(lines, 'E1031:')
--- 2973,2978 ----
*** ../vim-8.2.3083/src/version.c       2021-07-02 20:19:27.964669621 +0200
--- src/version.c       2021-07-03 11:54:33.754359104 +0200
***************
*** 757,758 ****
--- 757,760 ----
  {   /* Add new patch number below this line */
+ /**/
+     3084,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
75. You start wondering whether you could actually upgrade your brain
    with a Pentium Pro microprocessor 80.  The upgrade works just fine.

 /// 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/202107031000.163A01pD2220770%40masaka.moolenaar.net.

Raspunde prin e-mail lui