Patch 8.2.3135
Problem:    Vim9: builtin function arguments not checked at compile time.
Solution:   Add more type checks. (Yegappan Lakshmanan, closes #8539)
Files:      src/channel.c, src/errors.h, src/evalfunc.c, src/proto/typval.pro,
            src/terminal.c, src/testdir/test_search.vim,
            src/testdir/test_textprop.vim, src/testdir/test_vim9_builtin.vim,
            src/testing.c, src/textprop.c, src/typval.c


*** ../vim-8.2.3134/src/channel.c       2021-07-01 22:11:24.671619362 +0200
--- src/channel.c       2021-07-10 13:06:33.147172214 +0200
***************
*** 1311,1316 ****
--- 1311,1321 ----
      jobopt_T    opt;
      channel_T *channel = NULL;
  
+     if (in_vim9script()
+           && (check_for_string_arg(argvars, 0) == FAIL
+               || check_for_dict_arg(argvars, 1) == FAIL))
+       return NULL;
+ 
      address = tv_get_string(&argvars[0]);
      if (argvars[1].v_type != VAR_UNKNOWN
         && (argvars[1].v_type != VAR_DICT || argvars[1].vval.v_dict == NULL))
*** ../vim-8.2.3134/src/errors.h        2021-07-08 16:40:01.073808495 +0200
--- src/errors.h        2021-07-10 13:06:33.147172214 +0200
***************
*** 492,494 ****
--- 492,496 ----
        INIT(= N_("E1204: No Number allowed after .: '\\%%%c'"));
  EXTERN char e_no_white_space_allowed_between_option_and[]
        INIT(= N_("E1205: No white space allowed between option and"));
+ EXTERN char e_dict_required_for_argument_nr[]
+       INIT(= N_("E1206: Dictionary required for argument %d"));
*** ../vim-8.2.3134/src/evalfunc.c      2021-07-07 22:13:05.136799313 +0200
--- src/evalfunc.c      2021-07-10 13:06:33.151172215 +0200
***************
*** 375,380 ****
--- 375,392 ----
  }
  
  /*
+  * Check "type" is a channel or a job.
+  */
+     static int
+ arg_chan_or_job(type_T *type, argcontext_T *context)
+ {
+     if (type->tt_type == VAR_CHANNEL || type->tt_type == VAR_JOB)
+       return OK;
+     arg_type_mismatch(&t_channel, type, context->arg_idx + 1);
+     return FAIL;
+ }
+ 
+ /*
   * Check "type" is the same type as the previous argument.
   * Must not be used for the first argcheck_T entry.
   */
***************
*** 444,458 ****
  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};
--- 456,474 ----
  argcheck_T arg1_string[] = {arg_string};
  argcheck_T arg1_number[] = {arg_number};
  argcheck_T arg1_dict[] = {arg_dict_any};
! argcheck_T arg1_list_nr[] = {arg_list_number};
! argcheck_T arg1_list_string[] = {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 arg1_list_or_blob[] = {arg_list_or_blob};
+ argcheck_T arg1_chan_or_job[] = {arg_chan_or_job};
  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_nr[] = {arg_list_number, arg_list_number};
! argcheck_T arg2_dict_string[] = {arg_dict_any, arg_string};
! argcheck_T arg2_string_dict[] = {arg_string, arg_dict_any};
  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};
***************
*** 460,465 ****
--- 476,482 ----
  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_string_string_nr[] = {arg_string, arg_string, arg_number};
  argcheck_T arg3_insert[] = {arg_list_or_blob, arg_item_of_prev, arg_number};
  
  /*
***************
*** 750,758 ****
                        ret_number_bool,    f_assert_beeps},
      {"assert_equal",  2, 3, FEARG_2,      NULL,
                        ret_number_bool,    f_assert_equal},
!     {"assert_equalfile", 2, 3, FEARG_1,           NULL,
                        ret_number_bool,    f_assert_equalfile},
!     {"assert_exception", 1, 2, 0,         NULL,
                        ret_number_bool,    f_assert_exception},
      {"assert_fails",  1, 5, FEARG_1,      NULL,
                        ret_number_bool,    f_assert_fails},
--- 767,775 ----
                        ret_number_bool,    f_assert_beeps},
      {"assert_equal",  2, 3, FEARG_2,      NULL,
                        ret_number_bool,    f_assert_equal},
!     {"assert_equalfile", 2, 3, FEARG_1,           arg3_string,
                        ret_number_bool,    f_assert_equalfile},
!     {"assert_exception", 1, 2, 0,         arg2_string,
                        ret_number_bool,    f_assert_exception},
      {"assert_fails",  1, 5, FEARG_1,      NULL,
                        ret_number_bool,    f_assert_fails},
***************
*** 760,772 ****
                        ret_number_bool,    f_assert_false},
      {"assert_inrange",        3, 4, FEARG_3,      NULL,
                        ret_number_bool,    f_assert_inrange},
!     {"assert_match",  2, 3, FEARG_2,      NULL,
                        ret_number_bool,    f_assert_match},
      {"assert_nobeep", 1, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_assert_nobeep},
      {"assert_notequal",       2, 3, FEARG_2,      NULL,
                        ret_number_bool,    f_assert_notequal},
!     {"assert_notmatch",       2, 3, FEARG_2,      NULL,
                        ret_number_bool,    f_assert_notmatch},
      {"assert_report", 1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_assert_report},
--- 777,789 ----
                        ret_number_bool,    f_assert_false},
      {"assert_inrange",        3, 4, FEARG_3,      NULL,
                        ret_number_bool,    f_assert_inrange},
!     {"assert_match",  2, 3, FEARG_2,      arg3_string,
                        ret_number_bool,    f_assert_match},
      {"assert_nobeep", 1, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_assert_nobeep},
      {"assert_notequal",       2, 3, FEARG_2,      NULL,
                        ret_number_bool,    f_assert_notequal},
!     {"assert_notmatch",       2, 3, FEARG_2,      arg3_string,
                        ret_number_bool,    f_assert_notmatch},
      {"assert_report", 1, 1, FEARG_1,      NULL,
                        ret_number_bool,    f_assert_report},
***************
*** 802,808 ****
                        },
      {"browse",                4, 4, 0,            NULL,
                        ret_string,         f_browse},
!     {"browsedir",     2, 2, 0,            NULL,
                        ret_string,         f_browsedir},
      {"bufadd",                1, 1, FEARG_1,      arg1_string,
                        ret_number,         f_bufadd},
--- 819,825 ----
                        },
      {"browse",                4, 4, 0,            NULL,
                        ret_string,         f_browse},
!     {"browsedir",     2, 2, 0,            arg2_string,
                        ret_string,         f_browsedir},
      {"bufadd",                1, 1, FEARG_1,      arg1_string,
                        ret_number,         f_bufadd},
***************
*** 838,848 ****
                        ret_any,            f_call},
      {"ceil",          1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_ceil)},
!     {"ch_canread",    1, 1, FEARG_1,      NULL,
                        ret_number_bool,    JOB_FUNC(f_ch_canread)},
!     {"ch_close",      1, 1, FEARG_1,      NULL,
                        ret_void,           JOB_FUNC(f_ch_close)},
!     {"ch_close_in",   1, 1, FEARG_1,      NULL,
                        ret_void,           JOB_FUNC(f_ch_close_in)},
      {"ch_evalexpr",   2, 3, FEARG_1,      NULL,
                        ret_any,            JOB_FUNC(f_ch_evalexpr)},
--- 855,865 ----
                        ret_any,            f_call},
      {"ceil",          1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_ceil)},
!     {"ch_canread",    1, 1, FEARG_1,      arg1_chan_or_job,
                        ret_number_bool,    JOB_FUNC(f_ch_canread)},
!     {"ch_close",      1, 1, FEARG_1,      arg1_chan_or_job,
                        ret_void,           JOB_FUNC(f_ch_close)},
!     {"ch_close_in",   1, 1, FEARG_1,      arg1_chan_or_job,
                        ret_void,           JOB_FUNC(f_ch_close_in)},
      {"ch_evalexpr",   2, 3, FEARG_1,      NULL,
                        ret_any,            JOB_FUNC(f_ch_evalexpr)},
***************
*** 852,864 ****
                        ret_number,         JOB_FUNC(f_ch_getbufnr)},
      {"ch_getjob",     1, 1, FEARG_1,      NULL,
                        ret_job,            JOB_FUNC(f_ch_getjob)},
!     {"ch_info",               1, 1, FEARG_1,      NULL,
                        ret_dict_any,       JOB_FUNC(f_ch_info)},
      {"ch_log",                1, 2, FEARG_1,      NULL,
                        ret_void,           JOB_FUNC(f_ch_log)},
!     {"ch_logfile",    1, 2, FEARG_1,      NULL,
                        ret_void,           JOB_FUNC(f_ch_logfile)},
!     {"ch_open",               1, 2, FEARG_1,      NULL,
                        ret_channel,        JOB_FUNC(f_ch_open)},
      {"ch_read",               1, 2, FEARG_1,      NULL,
                        ret_string,         JOB_FUNC(f_ch_read)},
--- 869,881 ----
                        ret_number,         JOB_FUNC(f_ch_getbufnr)},
      {"ch_getjob",     1, 1, FEARG_1,      NULL,
                        ret_job,            JOB_FUNC(f_ch_getjob)},
!     {"ch_info",               1, 1, FEARG_1,      arg1_chan_or_job,
                        ret_dict_any,       JOB_FUNC(f_ch_info)},
      {"ch_log",                1, 2, FEARG_1,      NULL,
                        ret_void,           JOB_FUNC(f_ch_log)},
!     {"ch_logfile",    1, 2, FEARG_1,      arg2_string,
                        ret_void,           JOB_FUNC(f_ch_logfile)},
!     {"ch_open",               1, 2, FEARG_1,      arg2_string_dict,
                        ret_channel,        JOB_FUNC(f_ch_open)},
      {"ch_read",               1, 2, FEARG_1,      NULL,
                        ret_string,         JOB_FUNC(f_ch_read)},
***************
*** 880,888 ****
                        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},
--- 897,905 ----
                        ret_number,         f_char2nr},
      {"charclass",     1, 1, FEARG_1,      arg1_string,
                        ret_number,         f_charclass},
!     {"charcol",               1, 1, FEARG_1,      arg1_string_or_list,
                        ret_number,         f_charcol},
!     {"charidx",               2, 3, FEARG_1,      arg3_string_nr_bool,
                        ret_number,         f_charidx},
      {"chdir",         1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_chdir},
***************
*** 890,896 ****
                        ret_number,         f_cindent},
      {"clearmatches",  0, 1, FEARG_1,      arg1_number,
                        ret_void,           f_clearmatches},
!     {"col",           1, 1, FEARG_1,      NULL,
                        ret_number,         f_col},
      {"complete",      2, 2, FEARG_2,      NULL,
                        ret_void,           f_complete},
--- 907,913 ----
                        ret_number,         f_cindent},
      {"clearmatches",  0, 1, FEARG_1,      arg1_number,
                        ret_void,           f_clearmatches},
!     {"col",           1, 1, FEARG_1,      arg1_string_or_list,
                        ret_number,         f_col},
      {"complete",      2, 2, FEARG_2,      NULL,
                        ret_void,           f_complete},
***************
*** 898,904 ****
                        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},
--- 915,921 ----
                        ret_number,         f_complete_add},
      {"complete_check",        0, 0, 0,            NULL,
                        ret_number_bool,    f_complete_check},
!     {"complete_info", 0, 1, FEARG_1,      arg1_list_string,
                        ret_dict_any,       f_complete_info},
      {"confirm",               1, 4, FEARG_1,      NULL,
                        ret_number,         f_confirm},
***************
*** 924,930 ****
                        },
      {"deepcopy",      1, 2, FEARG_1,      NULL,
                        ret_first_arg,      f_deepcopy},
!     {"delete",                1, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_delete},
      {"deletebufline", 2, 3, FEARG_1,      NULL,
                        ret_number_bool,    f_deletebufline},
--- 941,947 ----
                        },
      {"deepcopy",      1, 2, FEARG_1,      NULL,
                        ret_first_arg,      f_deepcopy},
!     {"delete",                1, 2, FEARG_1,      arg2_string,
                        ret_number_bool,    f_delete},
      {"deletebufline", 2, 3, FEARG_1,      NULL,
                        ret_number_bool,    f_deletebufline},
***************
*** 974,982 ****
                        ret_number,         f_filewritable},
      {"filter",                2, 2, FEARG_1,      NULL,
                        ret_first_arg,      f_filter},
!     {"finddir",               1, 3, FEARG_1,      NULL,
                        ret_string,         f_finddir},
!     {"findfile",      1, 3, FEARG_1,      NULL,
                        ret_string,         f_findfile},
      {"flatten",               1, 2, FEARG_1,      NULL,
                        ret_list_any,       f_flatten},
--- 991,999 ----
                        ret_number,         f_filewritable},
      {"filter",                2, 2, FEARG_1,      NULL,
                        ret_first_arg,      f_filter},
!     {"finddir",               1, 3, FEARG_1,      arg3_string_string_nr,
                        ret_string,         f_finddir},
!     {"findfile",      1, 3, FEARG_1,      arg3_string_string_nr,
                        ret_string,         f_findfile},
      {"flatten",               1, 2, FEARG_1,      NULL,
                        ret_list_any,       f_flatten},
***************
*** 1114,1120 ****
                        ret_any,            f_globpath},
      {"has",           1, 2, 0,            NULL,
                        ret_number_bool,    f_has},
!     {"has_key",               2, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_has_key},
      {"haslocaldir",   0, 2, FEARG_1,      arg2_number,
                        ret_number,         f_haslocaldir},
--- 1131,1137 ----
                        ret_any,            f_globpath},
      {"has",           1, 2, 0,            NULL,
                        ret_number_bool,    f_has},
!     {"has_key",               2, 2, FEARG_1,      arg2_dict_string,
                        ret_number_bool,    f_has_key},
      {"haslocaldir",   0, 2, FEARG_1,      arg2_number,
                        ret_number,         f_haslocaldir},
***************
*** 1140,1154 ****
                        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},
      {"index",         2, 4, FEARG_1,      NULL,
                        ret_number,         f_index},
!     {"input",         1, 3, FEARG_1,      NULL,
                        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},
--- 1157,1171 ----
                        ret_string,         f_hostname},
      {"iconv",         3, 3, FEARG_1,      arg3_string,
                        ret_string,         f_iconv},
!     {"indent",                1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_number,         f_indent},
      {"index",         2, 4, FEARG_1,      NULL,
                        ret_number,         f_index},
!     {"input",         1, 3, FEARG_1,      arg3_string,
                        ret_string,         f_input},
!     {"inputdialog",   1, 3, FEARG_1,      arg3_string,
                        ret_string,         f_inputdialog},
!     {"inputlist",     1, 1, FEARG_1,      arg1_list_string,
                        ret_number,         f_inputlist},
      {"inputrestore",  0, 0, 0,            NULL,
                        ret_number_bool,    f_inputrestore},
***************
*** 1196,1202 ****
                        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},
      {"len",           1, 1, FEARG_1,      NULL,
                        ret_number,         f_len},
--- 1213,1219 ----
                        ret_string,         f_json_encode},
      {"keys",          1, 1, FEARG_1,      arg1_dict,
                        ret_list_string,    f_keys},
!     {"last_buffer_nr",        0, 0, 0,            arg1_string_or_nr,  // 
obsolete
                        ret_number,         f_last_buffer_nr},
      {"len",           1, 1, FEARG_1,      NULL,
                        ret_number,         f_len},
***************
*** 1214,1220 ****
                        ret_string,         f_list2str},
      {"listener_add",  1, 2, FEARG_2,      NULL,
                        ret_number,         f_listener_add},
!     {"listener_flush",        0, 1, FEARG_1,      NULL,
                        ret_void,           f_listener_flush},
      {"listener_remove",       1, 1, FEARG_1,      arg1_number,
                        ret_number_bool,    f_listener_remove},
--- 1231,1237 ----
                        ret_string,         f_list2str},
      {"listener_add",  1, 2, FEARG_2,      NULL,
                        ret_number,         f_listener_add},
!     {"listener_flush",        0, 1, FEARG_1,      arg1_string_or_nr,
                        ret_void,           f_listener_flush},
      {"listener_remove",       1, 1, FEARG_1,      arg1_number,
                        ret_number_bool,    f_listener_remove},
***************
*** 1276,1282 ****
                        },
      {"min",           1, 1, FEARG_1,      NULL,
                        ret_number,         f_min},
!     {"mkdir",         1, 3, FEARG_1,      NULL,
                        ret_number_bool,    f_mkdir},
      {"mode",          0, 1, FEARG_1,      NULL,
                        ret_string,         f_mode},
--- 1293,1299 ----
                        },
      {"min",           1, 1, FEARG_1,      NULL,
                        ret_number,         f_min},
!     {"mkdir",         1, 3, FEARG_1,      arg3_string_string_nr,
                        ret_number_bool,    f_mkdir},
      {"mode",          0, 1, FEARG_1,      NULL,
                        ret_string,         f_mode},
***************
*** 1332,1338 ****
                        ret_void,           PROP_FUNC(f_popup_hide)},
      {"popup_list",    0, 0, 0,            NULL,
                        ret_list_number,    PROP_FUNC(f_popup_list)},
!     {"popup_locate",  2, 2, 0,            NULL,
                        ret_number,         PROP_FUNC(f_popup_locate)},
      {"popup_menu",    2, 2, FEARG_1,      NULL,
                        ret_number,         PROP_FUNC(f_popup_menu)},
--- 1349,1355 ----
                        ret_void,           PROP_FUNC(f_popup_hide)},
      {"popup_list",    0, 0, 0,            NULL,
                        ret_list_number,    PROP_FUNC(f_popup_list)},
!     {"popup_locate",  2, 2, 0,            arg2_number,
                        ret_number,         PROP_FUNC(f_popup_locate)},
      {"popup_menu",    2, 2, FEARG_1,      NULL,
                        ret_number,         PROP_FUNC(f_popup_menu)},
***************
*** 1364,1382 ****
                        ret_void,           PROP_FUNC(f_prop_add)},
      {"prop_clear",    1, 3, FEARG_1,      NULL,
                        ret_void,           PROP_FUNC(f_prop_clear)},
!     {"prop_find",     1, 2, FEARG_1,      NULL,
                        ret_dict_any,       PROP_FUNC(f_prop_find)},
      {"prop_list",     1, 2, FEARG_1,      NULL,
                        ret_list_dict_any,  PROP_FUNC(f_prop_list)},
      {"prop_remove",   1, 3, FEARG_1,      NULL,
                        ret_number,         PROP_FUNC(f_prop_remove)},
!     {"prop_type_add", 2, 2, FEARG_1,      NULL,
                        ret_void,           PROP_FUNC(f_prop_type_add)},
!     {"prop_type_change", 2, 2, FEARG_1,           NULL,
                        ret_void,           PROP_FUNC(f_prop_type_change)},
!     {"prop_type_delete", 1, 2, FEARG_1,           NULL,
                        ret_void,           PROP_FUNC(f_prop_type_delete)},
!     {"prop_type_get", 1, 2, FEARG_1,      NULL,
                        ret_dict_any,       PROP_FUNC(f_prop_type_get)},
      {"prop_type_list",        0, 1, FEARG_1,      NULL,
                        ret_list_string,    PROP_FUNC(f_prop_type_list)},
--- 1381,1399 ----
                        ret_void,           PROP_FUNC(f_prop_add)},
      {"prop_clear",    1, 3, FEARG_1,      NULL,
                        ret_void,           PROP_FUNC(f_prop_clear)},
!     {"prop_find",     1, 2, FEARG_1,      arg2_dict_string,
                        ret_dict_any,       PROP_FUNC(f_prop_find)},
      {"prop_list",     1, 2, FEARG_1,      NULL,
                        ret_list_dict_any,  PROP_FUNC(f_prop_list)},
      {"prop_remove",   1, 3, FEARG_1,      NULL,
                        ret_number,         PROP_FUNC(f_prop_remove)},
!     {"prop_type_add", 2, 2, FEARG_1,      arg2_string_dict,
                        ret_void,           PROP_FUNC(f_prop_type_add)},
!     {"prop_type_change", 2, 2, FEARG_1,           arg2_string_dict,
                        ret_void,           PROP_FUNC(f_prop_type_change)},
!     {"prop_type_delete", 1, 2, FEARG_1,           arg2_string_dict,
                        ret_void,           PROP_FUNC(f_prop_type_delete)},
!     {"prop_type_get", 1, 2, FEARG_1,      arg2_string_dict,
                        ret_dict_any,       PROP_FUNC(f_prop_type_get)},
      {"prop_type_list",        0, 1, FEARG_1,      NULL,
                        ret_list_string,    PROP_FUNC(f_prop_type_list)},
***************
*** 1408,1416 ****
            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},
--- 1425,1433 ----
            NULL
  #endif
                        },
!     {"rand",          0, 1, FEARG_1,      arg1_list_nr,
                        ret_number,         f_rand},
!     {"range",         1, 3, FEARG_1,      arg3_number,
                        ret_list_number,    f_range},
      {"readblob",      1, 1, FEARG_1,      arg1_string,
                        ret_blob,           f_readblob},
***************
*** 1418,1424 ****
                        ret_list_string,    f_readdir},
      {"readdirex",     1, 3, FEARG_1,      NULL,
                        ret_list_dict_any,  f_readdirex},
!     {"readfile",      1, 3, FEARG_1,      NULL,
                        ret_list_string,    f_readfile},
      {"reduce",                2, 3, FEARG_1,      NULL,
                        ret_any,            f_reduce},
--- 1435,1441 ----
                        ret_list_string,    f_readdir},
      {"readdirex",     1, 3, FEARG_1,      NULL,
                        ret_list_dict_any,  f_readdirex},
!     {"readfile",      1, 3, FEARG_1,      arg3_string_string_nr,
                        ret_list_string,    f_readfile},
      {"reduce",                2, 3, FEARG_1,      NULL,
                        ret_any,            f_reduce},
***************
*** 1426,1442 ****
                        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},
      {"remote_read",   1, 2, FEARG_1,      NULL,
                        ret_string,         f_remote_read},
--- 1443,1459 ----
                        ret_string,         f_reg_executing},
      {"reg_recording", 0, 0, 0,            NULL,
                        ret_string,         f_reg_recording},
!     {"reltime",               0, 2, FEARG_1,      arg2_list_nr,
                        ret_list_any,       f_reltime},
!     {"reltimefloat",  1, 1, FEARG_1,      arg1_list_nr,
                        ret_float,          FLOAT_FUNC(f_reltimefloat)},
!     {"reltimestr",    1, 1, FEARG_1,      arg1_list_nr,
                        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,      arg2_string,
                        ret_number,         f_remote_peek},
      {"remote_read",   1, 2, FEARG_1,      NULL,
                        ret_string,         f_remote_read},
***************
*** 1452,1458 ****
                        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},
      {"round",         1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_round)},
--- 1469,1475 ----
                        ret_first_arg,      f_repeat},
      {"resolve",               1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_resolve},
!     {"reverse",               1, 1, FEARG_1,      arg1_list_or_blob,
                        ret_first_arg,      f_reverse},
      {"round",         1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_round)},
***************
*** 1490,1496 ****
                        ret_list_number,    f_searchpairpos},
      {"searchpos",     1, 5, FEARG_1,      NULL,
                        ret_list_number,    f_searchpos},
!     {"server2client", 2, 2, FEARG_1,      NULL,
                        ret_number_bool,    f_server2client},
      {"serverlist",    0, 0, 0,            NULL,
                        ret_string,         f_serverlist},
--- 1507,1513 ----
                        ret_list_number,    f_searchpairpos},
      {"searchpos",     1, 5, FEARG_1,      NULL,
                        ret_list_number,    f_searchpos},
!     {"server2client", 2, 2, FEARG_1,      arg2_string,
                        ret_number_bool,    f_server2client},
      {"serverlist",    0, 0, 0,            NULL,
                        ret_string,         f_serverlist},
***************
*** 1544,1550 ****
                        ret_string,         f_shellescape},
      {"shiftwidth",    0, 1, FEARG_1,      arg1_number,
                        ret_number,         f_shiftwidth},
!     {"sign_define",   1, 2, FEARG_1,      NULL,
                        ret_any,            SIGN_FUNC(f_sign_define)},
      {"sign_getdefined",       0, 1, FEARG_1,      NULL,
                        ret_list_dict_any,  SIGN_FUNC(f_sign_getdefined)},
--- 1561,1567 ----
                        ret_string,         f_shellescape},
      {"shiftwidth",    0, 1, FEARG_1,      arg1_number,
                        ret_number,         f_shiftwidth},
!     {"sign_define",   1, 2, FEARG_1,      arg2_string_dict,
                        ret_any,            SIGN_FUNC(f_sign_define)},
      {"sign_getdefined",       0, 1, FEARG_1,      NULL,
                        ret_list_dict_any,  SIGN_FUNC(f_sign_getdefined)},
***************
*** 1556,1564 ****
                        ret_number,         SIGN_FUNC(f_sign_place)},
      {"sign_placelist",        1, 1, FEARG_1,      NULL,
                        ret_list_number,    SIGN_FUNC(f_sign_placelist)},
!     {"sign_undefine", 0, 1, FEARG_1,      NULL,
                        ret_number_bool,    SIGN_FUNC(f_sign_undefine)},
!     {"sign_unplace",  1, 2, FEARG_1,      NULL,
                        ret_number_bool,    SIGN_FUNC(f_sign_unplace)},
      {"sign_unplacelist", 1, 2, FEARG_1,           NULL,
                        ret_list_number,    SIGN_FUNC(f_sign_unplacelist)},
--- 1573,1581 ----
                        ret_number,         SIGN_FUNC(f_sign_place)},
      {"sign_placelist",        1, 1, FEARG_1,      NULL,
                        ret_list_number,    SIGN_FUNC(f_sign_placelist)},
!     {"sign_undefine", 0, 1, FEARG_1,      arg1_string_or_list,
                        ret_number_bool,    SIGN_FUNC(f_sign_undefine)},
!     {"sign_unplace",  1, 2, FEARG_1,      arg2_string_dict,
                        ret_number_bool,    SIGN_FUNC(f_sign_unplace)},
      {"sign_unplacelist", 1, 2, FEARG_1,           NULL,
                        ret_list_number,    SIGN_FUNC(f_sign_unplacelist)},
***************
*** 1618,1624 ****
                        },
      {"strgetchar",    2, 2, FEARG_1,      NULL,
                        ret_number,         f_strgetchar},
!     {"stridx",                2, 3, FEARG_1,      NULL,
                        ret_number,         f_stridx},
      {"string",                1, 1, FEARG_1,      NULL,
                        ret_string,         f_string},
--- 1635,1641 ----
                        },
      {"strgetchar",    2, 2, FEARG_1,      NULL,
                        ret_number,         f_strgetchar},
!     {"stridx",                2, 3, FEARG_1,      arg3_string_string_nr,
                        ret_number,         f_stridx},
      {"string",                1, 1, FEARG_1,      NULL,
                        ret_string,         f_string},
***************
*** 1634,1640 ****
            NULL
  #endif
                        },
!     {"strridx",               2, 3, FEARG_1,      NULL,
                        ret_number,         f_strridx},
      {"strtrans",      1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_strtrans},
--- 1651,1657 ----
            NULL
  #endif
                        },
!     {"strridx",               2, 3, FEARG_1,      arg3_string_string_nr,
                        ret_number,         f_strridx},
      {"strtrans",      1, 1, FEARG_1,      arg1_string,
                        ret_string,         f_strtrans},
***************
*** 1670,1676 ****
                        ret_number,         f_tabpagewinnr},
      {"tagfiles",      0, 0, 0,            NULL,
                        ret_list_string,    f_tagfiles},
!     {"taglist",               1, 2, FEARG_1,      NULL,
                        ret_list_dict_any,  f_taglist},
      {"tan",           1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_tan)},
--- 1687,1693 ----
                        ret_number,         f_tabpagewinnr},
      {"tagfiles",      0, 0, 0,            NULL,
                        ret_list_string,    f_tagfiles},
!     {"taglist",               1, 2, FEARG_1,      arg2_string,
                        ret_list_dict_any,  f_taglist},
      {"tan",           1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_tan)},
***************
*** 1680,1692 ****
                        ret_string,         f_tempname},
      {"term_dumpdiff", 2, 3, FEARG_1,      NULL,
                        ret_number,         TERM_FUNC(f_term_dumpdiff)},
!     {"term_dumpload", 1, 2, FEARG_1,      NULL,
                        ret_number,         TERM_FUNC(f_term_dumpload)},
      {"term_dumpwrite",        2, 3, FEARG_2,      NULL,
                        ret_void,           TERM_FUNC(f_term_dumpwrite)},
!     {"term_getaltscreen", 1, 1, FEARG_1,    NULL,
                        ret_number,         TERM_FUNC(f_term_getaltscreen)},
!     {"term_getansicolors", 1, 1, FEARG_1,   NULL,
                        ret_list_string,
  #if defined(FEAT_TERMINAL) && (defined(FEAT_GUI) || 
defined(FEAT_TERMGUICOLORS))
            f_term_getansicolors
--- 1697,1709 ----
                        ret_string,         f_tempname},
      {"term_dumpdiff", 2, 3, FEARG_1,      NULL,
                        ret_number,         TERM_FUNC(f_term_dumpdiff)},
!     {"term_dumpload", 1, 2, FEARG_1,      arg2_string_dict,
                        ret_number,         TERM_FUNC(f_term_dumpload)},
      {"term_dumpwrite",        2, 3, FEARG_2,      NULL,
                        ret_void,           TERM_FUNC(f_term_dumpwrite)},
!     {"term_getaltscreen", 1, 1, FEARG_1,    arg1_string_or_nr,
                        ret_number,         TERM_FUNC(f_term_getaltscreen)},
!     {"term_getansicolors", 1, 1, FEARG_1,   arg1_string_or_nr,
                        ret_list_string,
  #if defined(FEAT_TERMINAL) && (defined(FEAT_GUI) || 
defined(FEAT_TERMGUICOLORS))
            f_term_getansicolors
***************
*** 1696,1714 ****
                        },
      {"term_getattr",  2, 2, FEARG_1,      NULL,
                        ret_number,         TERM_FUNC(f_term_getattr)},
!     {"term_getcursor",        1, 1, FEARG_1,      NULL,
                        ret_list_any,       TERM_FUNC(f_term_getcursor)},
!     {"term_getjob",   1, 1, FEARG_1,      NULL,
                        ret_job,            TERM_FUNC(f_term_getjob)},
      {"term_getline",  2, 2, FEARG_1,      NULL,
                        ret_string,         TERM_FUNC(f_term_getline)},
!     {"term_getscrolled", 1, 1, FEARG_1,           NULL,
                        ret_number,         TERM_FUNC(f_term_getscrolled)},
!     {"term_getsize",  1, 1, FEARG_1,      NULL,
                        ret_list_number,    TERM_FUNC(f_term_getsize)},
!     {"term_getstatus",        1, 1, FEARG_1,      NULL,
                        ret_string,         TERM_FUNC(f_term_getstatus)},
!     {"term_gettitle", 1, 1, FEARG_1,      NULL,
                        ret_string,         TERM_FUNC(f_term_gettitle)},
      {"term_gettty",   1, 2, FEARG_1,      NULL,
                        ret_string,         TERM_FUNC(f_term_gettty)},
--- 1713,1731 ----
                        },
      {"term_getattr",  2, 2, FEARG_1,      NULL,
                        ret_number,         TERM_FUNC(f_term_getattr)},
!     {"term_getcursor",        1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_list_any,       TERM_FUNC(f_term_getcursor)},
!     {"term_getjob",   1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_job,            TERM_FUNC(f_term_getjob)},
      {"term_getline",  2, 2, FEARG_1,      NULL,
                        ret_string,         TERM_FUNC(f_term_getline)},
!     {"term_getscrolled", 1, 1, FEARG_1,           arg1_string_or_nr,
                        ret_number,         TERM_FUNC(f_term_getscrolled)},
!     {"term_getsize",  1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_list_number,    TERM_FUNC(f_term_getsize)},
!     {"term_getstatus",        1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_string,         TERM_FUNC(f_term_getstatus)},
!     {"term_gettitle", 1, 1, FEARG_1,      arg1_string_or_nr,
                        ret_string,         TERM_FUNC(f_term_gettitle)},
      {"term_gettty",   1, 2, FEARG_1,      NULL,
                        ret_string,         TERM_FUNC(f_term_gettty)},
***************
*** 1740,1762 ****
                        ret_void,           TERM_FUNC(f_term_wait)},
      {"terminalprops", 0, 0, 0,            NULL,
                        ret_dict_string,    f_terminalprops},
!     {"test_alloc_fail",       3, 3, FEARG_1,      NULL,
                        ret_void,           f_test_alloc_fail},
      {"test_autochdir",        0, 0, 0,            NULL,
                        ret_void,           f_test_autochdir},
!     {"test_feedinput",        1, 1, FEARG_1,      NULL,
                        ret_void,           f_test_feedinput},
      {"test_garbagecollect_now",       0, 0, 0,    NULL,
                        ret_void,           f_test_garbagecollect_now},
      {"test_garbagecollect_soon", 0, 0, 0,   NULL,
                        ret_void,           f_test_garbagecollect_soon},
!     {"test_getvalue", 1, 1, FEARG_1,      NULL,
                        ret_number,         f_test_getvalue},
      {"test_gui_drop_files",   4, 4, 0,            NULL,
                        ret_void,           f_test_gui_drop_files},
      {"test_gui_mouse_event",  5, 5, 0,            NULL,
                        ret_void,           f_test_gui_mouse_event},
!     {"test_ignore_error", 1, 1, FEARG_1,    NULL,
                        ret_void,           f_test_ignore_error},
      {"test_null_blob",        0, 0, 0,            NULL,
                        ret_blob,           f_test_null_blob},
--- 1757,1779 ----
                        ret_void,           TERM_FUNC(f_term_wait)},
      {"terminalprops", 0, 0, 0,            NULL,
                        ret_dict_string,    f_terminalprops},
!     {"test_alloc_fail",       3, 3, FEARG_1,      arg3_number,
                        ret_void,           f_test_alloc_fail},
      {"test_autochdir",        0, 0, 0,            NULL,
                        ret_void,           f_test_autochdir},
!     {"test_feedinput",        1, 1, FEARG_1,      arg1_string,
                        ret_void,           f_test_feedinput},
      {"test_garbagecollect_now",       0, 0, 0,    NULL,
                        ret_void,           f_test_garbagecollect_now},
      {"test_garbagecollect_soon", 0, 0, 0,   NULL,
                        ret_void,           f_test_garbagecollect_soon},
!     {"test_getvalue", 1, 1, FEARG_1,      arg1_string,
                        ret_number,         f_test_getvalue},
      {"test_gui_drop_files",   4, 4, 0,            NULL,
                        ret_void,           f_test_gui_drop_files},
      {"test_gui_mouse_event",  5, 5, 0,            NULL,
                        ret_void,           f_test_gui_mouse_event},
!     {"test_ignore_error", 1, 1, FEARG_1,    arg1_string,
                        ret_void,           f_test_ignore_error},
      {"test_null_blob",        0, 0, 0,            NULL,
                        ret_blob,           f_test_null_blob},
***************
*** 1774,1780 ****
                        ret_func_any,       f_test_null_partial},
      {"test_null_string", 0, 0, 0,         NULL,
                        ret_string,         f_test_null_string},
!     {"test_option_not_set", 1, 1, FEARG_1,  NULL,
                        ret_void,           f_test_option_not_set},
      {"test_override", 2, 2, FEARG_2,      NULL,
                        ret_void,           f_test_override},
--- 1791,1797 ----
                        ret_func_any,       f_test_null_partial},
      {"test_null_string", 0, 0, 0,         NULL,
                        ret_string,         f_test_null_string},
!     {"test_option_not_set", 1, 1, FEARG_1,  arg1_string,
                        ret_void,           f_test_option_not_set},
      {"test_override", 2, 2, FEARG_2,      NULL,
                        ret_void,           f_test_override},
***************
*** 1788,1798 ****
        NULL
  #endif
                        },
!     {"test_setmouse", 2, 2, 0,            NULL,
                        ret_void,           f_test_setmouse},
!     {"test_settime",  1, 1, FEARG_1,      NULL,
                        ret_void,           f_test_settime},
!     {"test_srand_seed",       0, 1, FEARG_1,      NULL,
                        ret_void,           f_test_srand_seed},
      {"test_unknown",  0, 0, 0,            NULL,
                        ret_any,            f_test_unknown},
--- 1805,1815 ----
        NULL
  #endif
                        },
!     {"test_setmouse", 2, 2, 0,            arg2_number,
                        ret_void,           f_test_setmouse},
!     {"test_settime",  1, 1, FEARG_1,      arg1_number,
                        ret_void,           f_test_settime},
!     {"test_srand_seed",       0, 1, FEARG_1,      arg1_number,
                        ret_void,           f_test_srand_seed},
      {"test_unknown",  0, 0, 0,            NULL,
                        ret_any,            f_test_unknown},
***************
*** 1814,1820 ****
                        ret_string,         f_toupper},
      {"tr",            3, 3, FEARG_1,      arg3_string,
                        ret_string,         f_tr},
!     {"trim",          1, 3, FEARG_1,      NULL,
                        ret_string,         f_trim},
      {"trunc",         1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_trunc)},
--- 1831,1837 ----
                        ret_string,         f_toupper},
      {"tr",            3, 3, FEARG_1,      arg3_string,
                        ret_string,         f_tr},
!     {"trim",          1, 3, FEARG_1,      arg3_string_string_nr,
                        ret_string,         f_trim},
      {"trunc",         1, 1, FEARG_1,      arg1_float_or_nr,
                        ret_float,          FLOAT_FUNC(f_trunc)},
***************
*** 1830,1836 ****
                        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},
      {"visualmode",    0, 1, 0,            NULL,
                        ret_string,         f_visualmode},
--- 1847,1853 ----
                        ret_list_any,       f_uniq},
      {"values",                1, 1, FEARG_1,      arg1_dict,
                        ret_list_any,       f_values},
!     {"virtcol",               1, 1, FEARG_1,      arg1_string_or_list,
                        ret_number,         f_virtcol},
      {"visualmode",    0, 1, 0,            NULL,
                        ret_string,         f_visualmode},
***************
*** 2552,2558 ****
  
      if (argvars[0].v_type != VAR_STRING || argvars[1].v_type != VAR_NUMBER
            || (argvars[2].v_type != VAR_UNKNOWN
!                                          && argvars[2].v_type != VAR_NUMBER))
      {
        emsg(_(e_invarg));
        return;
--- 2569,2576 ----
  
      if (argvars[0].v_type != VAR_STRING || argvars[1].v_type != VAR_NUMBER
            || (argvars[2].v_type != VAR_UNKNOWN
!                                          && argvars[2].v_type != VAR_NUMBER
!                                          && argvars[2].v_type != VAR_BOOL))
      {
        emsg(_(e_invarg));
        return;
***************
*** 9763,9768 ****
--- 9781,9792 ----
      if (head == NULL)
        return;
  
+     if (argvars[1].v_type != VAR_UNKNOWN && argvars[1].v_type != VAR_STRING)
+     {
+       semsg(_(e_invarg2), tv_get_string(&argvars[1]));
+       return;
+     }
+ 
      if (argvars[1].v_type == VAR_STRING)
      {
        mask = tv_get_string_buf_chk(&argvars[1], buf2);
*** ../vim-8.2.3134/src/proto/typval.pro        2021-03-27 18:59:21.863043173 
+0100
--- src/proto/typval.pro        2021-07-10 13:06:33.151172215 +0200
***************
*** 11,16 ****
--- 11,17 ----
  float_T tv_get_float(typval_T *varp);
  int check_for_string_arg(typval_T *args, int idx);
  int check_for_nonempty_string_arg(typval_T *args, int idx);
+ int check_for_dict_arg(typval_T *args, int idx);
  char_u *tv_get_string(typval_T *varp);
  char_u *tv_get_string_strict(typval_T *varp);
  char_u *tv_get_string_buf(typval_T *varp, char_u *buf);
*** ../vim-8.2.3134/src/terminal.c      2021-06-02 13:28:11.439120443 +0200
--- src/terminal.c      2021-07-10 13:06:33.151172215 +0200
***************
*** 5276,5281 ****
--- 5276,5286 ----
      FILE      *fd2 = NULL;
      char_u    *textline = NULL;
  
+     if (in_vim9script()
+           && (check_for_string_arg(argvars, 0) == FAIL
+               || check_for_dict_arg(argvars, 1) == FAIL))
+       return;
+ 
      // First open the files.  If this fails bail out.
      fname1 = tv_get_string_buf_chk(&argvars[0], buf1);
      if (do_diff)
*** ../vim-8.2.3134/src/testdir/test_search.vim 2021-05-30 16:42:53.642691771 
+0200
--- src/testdir/test_search.vim 2021-07-10 13:06:33.151172215 +0200
***************
*** 373,381 ****
  endfunc
  
  func Test_searchpair_errors()
!   call assert_fails("call searchpair([0], 'middle', 'end', 'bW', 'skip', 99, 
100)", 'E730: using List as a String')
!   call assert_fails("call searchpair('start', {-> 0}, 'end', 'bW', 'skip', 
99, 100)", 'E729: using Funcref as a String')
!   call assert_fails("call searchpair('start', 'middle', {'one': 1}, 'bW', 
'skip', 99, 100)", 'E731: using Dictionary as a String')
    call assert_fails("call searchpair('start', 'middle', 'end', 'flags', 
'skip', 99, 100)", 'E475: Invalid argument: flags')
    call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 'func', 
-99, 100)", 'E475: Invalid argument: -99')
    call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 'func', 
99, -100)", 'E475: Invalid argument: -100')
--- 373,381 ----
  endfunc
  
  func Test_searchpair_errors()
!   call assert_fails("call searchpair([0], 'middle', 'end', 'bW', 'skip', 99, 
100)", 'E730: Using a List as a String')
!   call assert_fails("call searchpair('start', {-> 0}, 'end', 'bW', 'skip', 
99, 100)", 'E729: Using a Funcref as a String')
!   call assert_fails("call searchpair('start', 'middle', {'one': 1}, 'bW', 
'skip', 99, 100)", 'E731: Using a Dictionary as a String')
    call assert_fails("call searchpair('start', 'middle', 'end', 'flags', 
'skip', 99, 100)", 'E475: Invalid argument: flags')
    call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 'func', 
-99, 100)", 'E475: Invalid argument: -99')
    call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 'func', 
99, -100)", 'E475: Invalid argument: -100')
***************
*** 384,392 ****
  endfunc
  
  func Test_searchpairpos_errors()
!   call assert_fails("call searchpairpos([0], 'middle', 'end', 'bW', 'skip', 
99, 100)", 'E730: using List as a String')
!   call assert_fails("call searchpairpos('start', {-> 0}, 'end', 'bW', 'skip', 
99, 100)", 'E729: using Funcref as a String')
!   call assert_fails("call searchpairpos('start', 'middle', {'one': 1}, 'bW', 
'skip', 99, 100)", 'E731: using Dictionary as a String')
    call assert_fails("call searchpairpos('start', 'middle', 'end', 'flags', 
'skip', 99, 100)", 'E475: Invalid argument: flags')
    call assert_fails("call searchpairpos('start', 'middle', 'end', 'bW', 
'func', -99, 100)", 'E475: Invalid argument: -99')
    call assert_fails("call searchpairpos('start', 'middle', 'end', 'bW', 
'func', 99, -100)", 'E475: Invalid argument: -100')
--- 384,392 ----
  endfunc
  
  func Test_searchpairpos_errors()
!   call assert_fails("call searchpairpos([0], 'middle', 'end', 'bW', 'skip', 
99, 100)", 'E730: Using a List as a String')
!   call assert_fails("call searchpairpos('start', {-> 0}, 'end', 'bW', 'skip', 
99, 100)", 'E729: Using a Funcref as a String')
!   call assert_fails("call searchpairpos('start', 'middle', {'one': 1}, 'bW', 
'skip', 99, 100)", 'E731: Using a Dictionary as a String')
    call assert_fails("call searchpairpos('start', 'middle', 'end', 'flags', 
'skip', 99, 100)", 'E475: Invalid argument: flags')
    call assert_fails("call searchpairpos('start', 'middle', 'end', 'bW', 
'func', -99, 100)", 'E475: Invalid argument: -99')
    call assert_fails("call searchpairpos('start', 'middle', 'end', 'bW', 
'func', 99, -100)", 'E475: Invalid argument: -100')
*** ../vim-8.2.3134/src/testdir/test_textprop.vim       2021-06-27 
13:03:55.990467766 +0200
--- src/testdir/test_textprop.vim       2021-07-10 13:06:33.151172215 +0200
***************
*** 1340,1346 ****
  func Test_prop_func_invalid_args()
    call assert_fails('call prop_clear(1, 2, [])', 'E715:')
    call assert_fails('call prop_clear(-1, 2)', 'E16:')
!   call assert_fails('call prop_find(test_null_dict())', 'E474:')
    call assert_fails('call prop_find({"bufnr" : []})', 'E730:')
    call assert_fails('call prop_find({})', 'E968:')
    call assert_fails('call prop_find({}, "x")', 'E474:')
--- 1340,1346 ----
  func Test_prop_func_invalid_args()
    call assert_fails('call prop_clear(1, 2, [])', 'E715:')
    call assert_fails('call prop_clear(-1, 2)', 'E16:')
!   call assert_fails('call prop_find(test_null_dict())', 'E715:')
    call assert_fails('call prop_find({"bufnr" : []})', 'E730:')
    call assert_fails('call prop_find({})', 'E968:')
    call assert_fails('call prop_find({}, "x")', 'E474:')
*** ../vim-8.2.3134/src/testdir/test_vim9_builtin.vim   2021-07-09 
19:53:51.590271249 +0200
--- src/testdir/test_vim9_builtin.vim   2021-07-10 13:06:33.151172215 +0200
***************
*** 156,163 ****
  enddef
  
  def Test_and()
!   CheckDefFailure(['echo and("x", 0x2)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['echo and(0x1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
  enddef
  
  def Test_append()
--- 156,163 ----
  enddef
  
  def Test_and()
!   CheckDefAndScriptFailure2(['and("x", 0x2)'], 'E1013: Argument 1: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
!   CheckDefAndScriptFailure2(['and(0x1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
  enddef
  
  def Test_append()
***************
*** 175,193 ****
  enddef
  
  def Test_argc()
!   CheckDefFailure(['echo argc("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_arglistid()
!   CheckDefFailure(['echo arglistid("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['echo arglistid(1, "y")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
!   CheckDefFailure(['echo arglistid("x", "y")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_argv()
!   CheckDefFailure(['echo argv("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['echo argv(1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
!   CheckDefFailure(['echo argv("x", "y")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_balloon_show()
--- 175,216 ----
  enddef
  
  def Test_argc()
!   CheckDefFailure(['argc("x")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
  enddef
  
  def Test_arglistid()
!   CheckDefFailure(['arglistid("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['arglistid(1, "y")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
!   CheckDefFailure(['arglistid("x", "y")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_argv()
!   CheckDefFailure(['argv("x")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
!   CheckDefFailure(['argv(1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
!   CheckDefFailure(['argv("x", "y")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
! enddef
! 
! def Test_assert_equalfile()
!   CheckDefFailure(['assert_equalfile(1, "f2")'], 'E1013: Argument 1: type 
mismatch, expected string but got number')
!   CheckDefFailure(['assert_equalfile("f1", true)'], 'E1013: Argument 2: type 
mismatch, expected string but got bool')
!   CheckDefFailure(['assert_equalfile("f1", "f2", ["a"])'], 'E1013: Argument 
3: type mismatch, expected string but got list<string>')
! enddef
! 
! def Test_assert_exception()
!   CheckDefFailure(['assert_exception({})'], 'E1013: Argument 1: type 
mismatch, expected string but got dict<unknown>')
!   CheckDefFailure(['assert_exception("E1:", v:null)'], 'E1013: Argument 2: 
type mismatch, expected string but got special')
! enddef
! 
! def Test_assert_match()
!   CheckDefFailure(['assert_match({}, "b")'], 'E1013: Argument 1: type 
mismatch, expected string but got dict<unknown>')
!   CheckDefFailure(['assert_match("a", 1)'], 'E1013: Argument 2: type 
mismatch, expected string but got number')
!   CheckDefFailure(['assert_match("a", "b", null)'], 'E1013: Argument 3: type 
mismatch, expected string but got special')
! enddef
! 
! def Test_assert_notmatch()
!   CheckDefFailure(['assert_notmatch({}, "b")'], 'E1013: Argument 1: type 
mismatch, expected string but got dict<unknown>')
!   CheckDefFailure(['assert_notmatch("a", 1)'], 'E1013: Argument 2: type 
mismatch, expected string but got number')
!   CheckDefFailure(['assert_notmatch("a", "b", null)'], 'E1013: Argument 3: 
type mismatch, expected string but got special')
  enddef
  
  def Test_balloon_show()
***************
*** 222,227 ****
--- 245,255 ----
    CheckDefExecAndScriptFailure(lines, 'E1174: String required for argument 4')
  enddef
  
+ def Test_browsedir()
+   CheckDefFailure(['browsedir({}, "b")'], 'E1013: Argument 1: type mismatch, 
expected string but got dict<unknown>')
+   CheckDefFailure(['browsedir("a", [])'], 'E1013: Argument 2: type mismatch, 
expected string but got list<unknown>')
+ enddef
+ 
  def Test_bufadd()
    assert_fails('bufadd([])', 'E730:')
  enddef
***************
*** 299,310 ****
--- 327,377 ----
    l->assert_equal([1, 2, 3])
  enddef
  
+ def Test_ch_canread()
+   if !has('channel')
+     CheckFeature channel
+   endif
+   CheckDefFailure(['ch_canread(10)'], 'E1013: Argument 1: type mismatch, 
expected channel but got number')
+ enddef
+ 
+ def Test_ch_close()
+   if !has('channel')
+     CheckFeature channel
+   endif
+   CheckDefFailure(['ch_close("c")'], 'E1013: Argument 1: type mismatch, 
expected channel but got string')
+ enddef
+ 
+ def Test_ch_close_in()
+   if !has('channel')
+     CheckFeature channel
+   endif
+   CheckDefFailure(['ch_close_in(true)'], 'E1013: Argument 1: type mismatch, 
expected channel but got bool')
+ enddef
+ 
+ def Test_ch_info()
+   if !has('channel')
+     CheckFeature channel
+   endif
+   CheckDefFailure(['ch_info([1])'], 'E1013: Argument 1: type mismatch, 
expected channel but got list<number>')
+ enddef
+ 
  def Test_ch_logfile()
    if !has('channel')
      CheckFeature channel
    endif
    assert_fails('ch_logfile(true)', 'E1174:')
    assert_fails('ch_logfile("foo", true)', 'E1174:')
+ 
+   CheckDefAndScriptFailure2(['ch_logfile(1)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E1174: String required for argument 
1')
+   CheckDefAndScriptFailure2(['ch_logfile("a", true)'], 'E1013: Argument 2: 
type mismatch, expected string but got bool', 'E1174: String required for 
argument 2')
+ enddef
+ 
+ def Test_ch_open()
+   if !has('channel')
+     CheckFeature channel
+   endif
+   CheckDefAndScriptFailure2(['ch_open({"a": 10}, "a")'], 'E1013: Argument 1: 
type mismatch, expected string but got dict<number>', 'E1174: String required 
for argument 1')
+   CheckDefAndScriptFailure2(['ch_open("a", [1])'], 'E1013: Argument 2: type 
mismatch, expected dict<any> but got list<number>', 'E1206: Dictionary required 
for argument 2')
  enddef
  
  def Test_char2nr()
***************
*** 317,322 ****
--- 384,400 ----
    assert_fails('charclass(true)', 'E1174:')
  enddef
  
+ def Test_charcol()
+   CheckDefFailure(['charcol(10)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   CheckDefFailure(['charcol({a: 10})'], 'E1013: Argument 1: type mismatch, 
expected string but got dict<number>')
+ enddef
+ 
+ def Test_charidx()
+   CheckDefFailure(['charidx("a", "b")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
+   CheckDefFailure(['charidx(0z10, 1)'], 'E1013: Argument 1: type mismatch, 
expected string but got blob')
+   CheckDefFailure(['charidx("a", 1, "")'], 'E1013: Argument 3: type mismatch, 
expected bool but got string')
+ enddef
+ 
  def Test_chdir()
    assert_fails('chdir(true)', 'E1174:')
  enddef
***************
*** 329,335 ****
  enddef
  
  def Test_clearmatches()
!   CheckDefFailure(['echo clearmatches("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_col()
--- 407,413 ----
  enddef
  
  def Test_clearmatches()
!   CheckDefFailure(['clearmatches("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_col()
***************
*** 338,343 ****
--- 416,426 ----
    col([1, '$'])->assert_equal(5)
  
    assert_fails('col(true)', 'E1174:')
+ 
+   CheckDefFailure(['col(10)'], 'E1013: Argument 1: type mismatch, expected 
string but got number')
+   CheckDefFailure(['col({a: 10})'], 'E1013: Argument 1: type mismatch, 
expected string but got dict<number>')
+   CheckDefFailure(['col(true)'], 'E1013: Argument 1: type mismatch, expected 
string but got bool')
+   bw!
  enddef
  
  def Test_confirm()
***************
*** 396,407 ****
  
  def Test_debugbreak()
    CheckMSWindows
!   CheckDefFailure(['echo debugbreak("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_delete()
    var res: bool = delete('doesnotexist')
    assert_equal(true, res)
  enddef
  
  def Test_diff_filler()
--- 479,493 ----
  
  def Test_debugbreak()
    CheckMSWindows
!   CheckDefFailure(['debugbreak("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_delete()
    var res: bool = delete('doesnotexist')
    assert_equal(true, res)
+ 
+   CheckDefFailure(['delete(10)'], 'E1013: Argument 1: type mismatch, expected 
string but got number')
+   CheckDefFailure(['delete("a", 10)'], 'E1013: Argument 2: type mismatch, 
expected string but got number')
  enddef
  
  def Test_diff_filler()
***************
*** 438,447 ****
    res = execute(["echo 'here'", "echo 'there'"])
    assert_equal("\nhere\nthere", res)
  
!   CheckDefFailure(['echo execute(123)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
!   CheckDefFailure(['echo execute([123])'], 'E1013: Argument 1: type mismatch, 
expected list<string> but got list<number>')
    CheckDefExecFailure(['echo execute(["xx", 123])'], 'E492')
!   CheckDefFailure(['echo execute("xx", 123)'], 'E1013: Argument 2: type 
mismatch, expected string but got number')
  enddef
  
  def Test_exepath()
--- 524,533 ----
    res = execute(["echo 'here'", "echo 'there'"])
    assert_equal("\nhere\nthere", res)
  
!   CheckDefFailure(['execute(123)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
!   CheckDefFailure(['execute([123])'], 'E1013: Argument 1: type mismatch, 
expected list<string> but got list<number>')
    CheckDefExecFailure(['echo execute(["xx", 123])'], 'E492')
!   CheckDefFailure(['execute("xx", 123)'], 'E1013: Argument 2: type mismatch, 
expected string but got number')
  enddef
  
  def Test_exepath()
***************
*** 600,605 ****
--- 686,711 ----
    unlet g:TestVar
  enddef
  
+ def Test_indent()
+   CheckDefAndScriptFailure2(['indent([1])'], 'E1013: Argument 1: type 
mismatch, expected string but got list<number>', 'E745: Using a List as a 
Number')
+   CheckDefAndScriptFailure2(['indent(true)'], 'E1013: Argument 1: type 
mismatch, expected string but got bool', 'E1138: Using a Bool as a Number')
+   assert_equal(0, indent(1))
+ enddef
+ 
+ def Test_input()
+   CheckDefFailure(['input(5)'], 'E1013: Argument 1: type mismatch, expected 
string but got number')
+   CheckDefAndScriptFailure2(['input(["a"])'], 'E1013: Argument 1: type 
mismatch, expected string but got list<string>', 'E730: Using a List as a 
String')
+   CheckDefFailure(['input("p", 10)'], 'E1013: Argument 2: type mismatch, 
expected string but got number')
+   CheckDefAndScriptFailure2(['input("p", "q", 20)'], 'E1013: Argument 3: type 
mismatch, expected string but got number', 'E180: Invalid complete value')
+ enddef
+ 
+ def Test_inputdialog()
+   CheckDefFailure(['inputdialog(5)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
+   CheckDefAndScriptFailure2(['inputdialog(["a"])'], 'E1013: Argument 1: type 
mismatch, expected string but got list<string>', 'E730: Using a List as a 
String')
+   CheckDefFailure(['inputdialog("p", 10)'], 'E1013: Argument 2: type 
mismatch, expected string but got number')
+   CheckDefFailure(['inputdialog("p", "q", 20)'], 'E1013: Argument 3: type 
mismatch, expected string but got number')
+ enddef
+ 
  def Test_job_info_return_type()
    if has('job')
      job_start(&shell)
***************
*** 627,641 ****
  enddef
  
  def Test_finddir()
!   CheckDefExecFailure(['echo finddir(true)'], 'E1174:')
!   CheckDefExecFailure(['echo finddir(v:null)'], 'E1174:')
    CheckDefExecFailure(['echo finddir("")'], 'E1175:')
  enddef
  
  def Test_findfile()
!   CheckDefExecFailure(['echo findfile(true)'], 'E1174:')
!   CheckDefExecFailure(['echo findfile(v:null)'], 'E1174:')
!   CheckDefExecFailure(['echo findfile("")'], 'E1175:')
  enddef
  
  def Test_flattennew()
--- 733,751 ----
  enddef
  
  def Test_finddir()
!   CheckDefAndScriptFailure2(['finddir(true)'], 'E1013: Argument 1: type 
mismatch, expected string but got bool', 'E1174: String required for argument 
1')
!   CheckDefAndScriptFailure2(['finddir(v:null)'], 'E1013: Argument 1: type 
mismatch, expected string but got special', 'E1174: String required for 
argument 1')
    CheckDefExecFailure(['echo finddir("")'], 'E1175:')
+   CheckDefAndScriptFailure2(['finddir("a", [])'], 'E1013: Argument 2: type 
mismatch, expected string but got list<unknown>', 'E730: Using a List as a 
String')
+   CheckDefAndScriptFailure2(['finddir("a", "b", "c")'], 'E1013: Argument 3: 
type mismatch, expected number but got string', 'E1030: Using a String as a 
Number')
  enddef
  
  def Test_findfile()
!   CheckDefExecFailure(['findfile(true)'], 'E1013: Argument 1: type mismatch, 
expected string but got bool')
!   CheckDefExecFailure(['findfile(v:null)'], 'E1013: Argument 1: type 
mismatch, expected string but got special')
!   CheckDefExecFailure(['findfile("")'], 'E1175:')
!   CheckDefAndScriptFailure2(['findfile("a", [])'], 'E1013: Argument 2: type 
mismatch, expected string but got list<unknown>', 'E730: Using a List as a 
String')
!   CheckDefAndScriptFailure2(['findfile("a", "b", "c")'], 'E1013: Argument 3: 
type mismatch, expected number but got string', 'E1030: Using a String as a 
Number')
  enddef
  
  def Test_flattennew()
***************
*** 660,716 ****
    CheckFeature float
  
    # acos()
!   CheckDefFailure(['echo acos("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # asin()
!   CheckDefFailure(['echo asin("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # atan()
!   CheckDefFailure(['echo atan("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # atan2()
!   CheckDefFailure(['echo atan2("a", 1.1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
!   CheckDefFailure(['echo atan2(1.2, "a")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
!   CheckDefFailure(['echo atan2(1.2)'], 'E119:')
    # ceil()
!   CheckDefFailure(['echo ceil("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # cos()
!   CheckDefFailure(['echo cos("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # cosh()
!   CheckDefFailure(['echo cosh("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # exp()
!   CheckDefFailure(['echo exp("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # float2nr()
!   CheckDefFailure(['echo float2nr("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # floor()
!   CheckDefFailure(['echo floor("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # fmod()
!   CheckDefFailure(['echo fmod(1.1, "a")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
!   CheckDefFailure(['echo fmod("a", 1.1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['echo fmod(1.1)'], 'E119:')
    # isinf()
!   CheckDefFailure(['echo isinf("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # isnan()
!   CheckDefFailure(['echo isnan("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # log()
!   CheckDefFailure(['echo log("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # log10()
!   CheckDefFailure(['echo log10("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # pow()
!   CheckDefFailure(['echo pow("a", 1.1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['echo pow(1.1, "a")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
!   CheckDefFailure(['echo pow(1.1)'], 'E119:')
    # round()
!   CheckDefFailure(['echo round("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # sin()
!   CheckDefFailure(['echo sin("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # sinh()
!   CheckDefFailure(['echo sinh("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # sqrt()
!   CheckDefFailure(['echo sqrt("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # tan()
!   CheckDefFailure(['echo tan("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # tanh()
!   CheckDefFailure(['echo tanh("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # trunc()
!   CheckDefFailure(['echo trunc("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_fnameescape()
--- 770,826 ----
    CheckFeature float
  
    # acos()
!   CheckDefFailure(['acos("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # asin()
!   CheckDefFailure(['asin("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # atan()
!   CheckDefFailure(['atan("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # atan2()
!   CheckDefFailure(['atan2("a", 1.1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['atan2(1.2, "a")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
!   CheckDefFailure(['atan2(1.2)'], 'E119:')
    # ceil()
!   CheckDefFailure(['ceil("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # cos()
!   CheckDefFailure(['cos("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # cosh()
!   CheckDefFailure(['cosh("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # exp()
!   CheckDefFailure(['exp("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # float2nr()
!   CheckDefFailure(['float2nr("a")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    # floor()
!   CheckDefFailure(['floor("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # fmod()
!   CheckDefFailure(['fmod(1.1, "a")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
!   CheckDefFailure(['fmod("a", 1.1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['fmod(1.1)'], 'E119:')
    # isinf()
!   CheckDefFailure(['isinf("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # isnan()
!   CheckDefFailure(['isnan("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # log()
!   CheckDefFailure(['log("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # log10()
!   CheckDefFailure(['log10("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # pow()
!   CheckDefFailure(['pow("a", 1.1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['pow(1.1, "a")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
!   CheckDefFailure(['pow(1.1)'], 'E119:')
    # round()
!   CheckDefFailure(['round("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # sin()
!   CheckDefFailure(['sin("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # sinh()
!   CheckDefFailure(['sinh("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # sqrt()
!   CheckDefFailure(['sqrt("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # tan()
!   CheckDefFailure(['tan("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # tanh()
!   CheckDefFailure(['tanh("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
    # trunc()
!   CheckDefFailure(['trunc("a")'], 'E1013: Argument 1: type mismatch, expected 
number but got string')
  enddef
  
  def Test_fnameescape()
***************
*** 863,879 ****
  enddef
  
  def Test_getcurpos()
!   CheckDefFailure(['echo getcursorcharpos("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_getcursorcharpos()
!   CheckDefFailure(['echo getcursorcharpos("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_getcwd()
!   CheckDefFailure(['echo getcwd("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['echo getcwd("x", 1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['echo getcwd(1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
  enddef
  
  def Test_getloclist_return_type()
--- 973,989 ----
  enddef
  
  def Test_getcurpos()
!   CheckDefFailure(['getcursorcharpos("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_getcursorcharpos()
!   CheckDefFailure(['getcursorcharpos("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_getcwd()
!   CheckDefFailure(['getcwd("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['getcwd("x", 1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['getcwd(1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
  enddef
  
  def Test_getloclist_return_type()
***************
*** 921,929 ****
  enddef
  
  def Test_getjumplist()
!   CheckDefFailure(['echo getjumplist("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
!   CheckDefFailure(['echo getjumplist("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
!   CheckDefFailure(['echo getjumplist(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
  enddef
  
  def Test_getmarklist()
--- 1031,1039 ----
  enddef
  
  def Test_getjumplist()
!   CheckDefFailure(['getjumplist("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['getjumplist("x", 1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['getjumplist(1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
  enddef
  
  def Test_getmarklist()
***************
*** 933,939 ****
  enddef
  
  def Test_getmatches()
!   CheckDefFailure(['echo getmatches("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_getpos()
--- 1043,1049 ----
  enddef
  
  def Test_getmatches()
!   CheckDefFailure(['getmatches("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_getpos()
***************
*** 983,993 ****
  enddef
  
  def Test_gettabinfo()
!   CheckDefFailure(['echo gettabinfo("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_gettagstack()
!   CheckDefFailure(['echo gettagstack("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_gettext()
--- 1093,1103 ----
  enddef
  
  def Test_gettabinfo()
!   CheckDefFailure(['gettabinfo("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_gettagstack()
!   CheckDefFailure(['gettagstack("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_gettext()
***************
*** 996,1006 ****
  enddef
  
  def Test_getwininfo()
!   CheckDefFailure(['echo getwininfo("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_getwinpos()
!   CheckDefFailure(['echo getwinpos("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_glob()
--- 1106,1116 ----
  enddef
  
  def Test_getwininfo()
!   CheckDefFailure(['getwininfo("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_getwinpos()
!   CheckDefFailure(['getwinpos("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_glob()
***************
*** 1020,1029 ****
    has('eval', true)->assert_equal(1)
  enddef
  
  def Test_haslocaldir()
!   CheckDefFailure(['echo haslocaldir("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
!   CheckDefFailure(['echo haslocaldir("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
!   CheckDefFailure(['echo haslocaldir(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
  enddef
  
  def Test_hasmapto()
--- 1130,1144 ----
    has('eval', true)->assert_equal(1)
  enddef
  
+ def Test_has_key()
+   CheckDefAndScriptFailure2(['has_key([1, 2], "k")'], 'E1013: Argument 1: 
type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary 
required')
+   CheckDefAndScriptFailure2(['has_key({"a": 10}, ["a"])'], 'E1013: Argument 
2: type mismatch, expected string but got list<string>', 'E730: Using a List as 
a String')
+ enddef
+ 
  def Test_haslocaldir()
!   CheckDefFailure(['haslocaldir("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['haslocaldir("x", 1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['haslocaldir(1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
  enddef
  
  def Test_hasmapto()
***************
*** 1124,1130 ****
  enddef
  
  def Test_invert()
!   CheckDefFailure(['echo invert("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_isdirectory()
--- 1239,1245 ----
  enddef
  
  def Test_invert()
!   CheckDefFailure(['invert("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_isdirectory()
***************
*** 1187,1194 ****
            ->str2nr()
  enddef
  
  def Test_listener_remove()
!   CheckDefFailure(['echo listener_remove("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_map_function_arg()
--- 1302,1313 ----
            ->str2nr()
  enddef
  
+ def Test_listener_flush()
+   CheckDefAndScriptFailure2(['listener_flush([1])'], 'E1013: Argument 1: type 
mismatch, expected string but got list<number>', 'E730: Using a List as a 
String')
+ enddef
+ 
  def Test_listener_remove()
!   CheckDefAndScriptFailure2(['listener_remove("x")'], 'E1013: Argument 1: 
type mismatch, expected number but got string', 'E1030: Using a String as a 
Number')
  enddef
  
  def Test_map_function_arg()
***************
*** 1294,1306 ****
  enddef
  
  def Test_matcharg()
!   CheckDefFailure(['echo matcharg("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_matchdelete()
!   CheckDefFailure(['echo matchdelete("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
!   CheckDefFailure(['echo matchdelete("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
!   CheckDefFailure(['echo matchdelete(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
  enddef
  
  def Test_max()
--- 1413,1425 ----
  enddef
  
  def Test_matcharg()
!   CheckDefFailure(['matcharg("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_matchdelete()
!   CheckDefFailure(['matchdelete("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['matchdelete("x", 1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['matchdelete(1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
  enddef
  
  def Test_max()
***************
*** 1338,1343 ****
--- 1457,1469 ----
    assert_equal([4, 5], l2)
  enddef
  
+ def Test_mkdir()
+   CheckDefAndScriptFailure2(['mkdir(["a"])'], 'E1013: Argument 1: type 
mismatch, expected string but got list<string>', 'E730: Using a List as a 
String')
+   CheckDefAndScriptFailure2(['mkdir("a", {})'], 'E1013: Argument 2: type 
mismatch, expected string but got dict<unknown>', 'E731: Using a Dictionary as 
a String')
+   CheckDefAndScriptFailure2(['mkdir("a", "b", "c")'], 'E1013: Argument 3: 
type mismatch, expected number but got string', 'E1030: Using a String as a 
Number')
+   delete('a', 'rf')
+ enddef
+ 
  def Test_nextnonblank()
    CheckDefFailure(['nextnonblank(null)'], 'E1013: Argument 1: type mismatch, 
expected string but got special')
    assert_equal(0, nextnonblank(1))
***************
*** 1348,1355 ****
  enddef
  
  def Test_or()
!   CheckDefFailure(['echo or("x", 0x2)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['echo or(0x1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
  enddef
  
  def Test_prevnonblank()
--- 1474,1486 ----
  enddef
  
  def Test_or()
!   CheckDefFailure(['or("x", 0x2)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['or(0x1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
! enddef
! 
! def Test_popup_locate()
!   CheckDefAndScriptFailure2(['popup_locate("a", 20)'], 'E1013: Argument 1: 
type mismatch, expected number but got string', 'E1030: Using a String as a 
Number')
!   CheckDefAndScriptFailure2(['popup_locate(10, "b")'], 'E1013: Argument 2: 
type mismatch, expected number but got string', 'E1030: Using a String as a 
Number')
  enddef
  
  def Test_prevnonblank()
***************
*** 1364,1369 ****
--- 1495,1528 ----
    endif
  enddef
  
+ def Test_prop_find()
+   CheckDefAndScriptFailure2(['prop_find([1, 2])'], 'E1013: Argument 1: type 
mismatch, expected dict<any> but got list<number>', 'E715: Dictionary required')
+   CheckDefAndScriptFailure2(['prop_find([1, 2], "k")'], 'E1013: Argument 1: 
type mismatch, expected dict<any> but got list<number>', 'E715: Dictionary 
required')
+   CheckDefAndScriptFailure2(['prop_find({"a": 10}, ["a"])'], 'E1013: Argument 
2: type mismatch, expected string but got list<string>', 'E730: Using a List as 
a String')
+ enddef
+ 
+ def Test_prop_type_add()
+   CheckDefAndScriptFailure2(['prop_type_add({"a": 10}, "b")'], 'E1013: 
Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using 
a Dictionary as a String')
+   CheckDefAndScriptFailure2(['prop_type_add("a", "b")'], 'E1013: Argument 2: 
type mismatch, expected dict<any> but got string', 'E715: Dictionary required')
+ enddef
+ 
+ def Test_prop_type_change()
+   CheckDefAndScriptFailure2(['prop_type_change({"a": 10}, "b")'], 'E1013: 
Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using 
a Dictionary as a String')
+   CheckDefAndScriptFailure2(['prop_type_change("a", "b")'], 'E1013: Argument 
2: type mismatch, expected dict<any> but got string', 'E715: Dictionary 
required')
+ enddef
+ 
+ def Test_prop_type_delete()
+   CheckDefAndScriptFailure2(['prop_type_delete({"a": 10})'], 'E1013: Argument 
1: type mismatch, expected string but got dict<number>', 'E731: Using a 
Dictionary as a String')
+   CheckDefAndScriptFailure2(['prop_type_delete({"a": 10}, "b")'], 'E1013: 
Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using 
a Dictionary as a String')
+   CheckDefAndScriptFailure2(['prop_type_delete("a", "b")'], 'E1013: Argument 
2: type mismatch, expected dict<any> but got string', 'E715: Dictionary 
required')
+ enddef
+ 
+ def Test_prop_type_get()
+   CheckDefAndScriptFailure2(['prop_type_get({"a": 10})'], 'E1013: Argument 1: 
type mismatch, expected string but got dict<number>', 'E731: Using a Dictionary 
as a String')
+   CheckDefAndScriptFailure2(['prop_type_get({"a": 10}, "b")'], 'E1013: 
Argument 1: type mismatch, expected string but got dict<number>', 'E731: Using 
a Dictionary as a String')
+   CheckDefAndScriptFailure2(['prop_type_get("a", "b")'], 'E1013: Argument 2: 
type mismatch, expected dict<any> but got string', 'E715: Dictionary required')
+ 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>')
***************
*** 1371,1376 ****
--- 1530,1541 ----
    assert_true(rand(srand()) >= 0)
  enddef
  
+ def Test_range()
+   CheckDefAndScriptFailure2(['range("a")'], 'E1013: Argument 1: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
+   CheckDefAndScriptFailure2(['range(10, "b")'], 'E1013: Argument 2: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
+   CheckDefAndScriptFailure2(['range(10, 20, "c")'], 'E1013: Argument 3: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
+ enddef
+ 
  def Test_readdir()
     eval expand('sautest')->readdir((e) => e[0] !=# '.')
     eval expand('sautest')->readdirex((e) => e.name[0] !=# '.')
***************
*** 1400,1405 ****
--- 1565,1573 ----
    END
    CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected 
dict<string> but got list<string>', 1)
    delete('Xreadfile')
+ 
+   CheckDefAndScriptFailure2(['readfile("a", 0z10)'], 'E1013: Argument 2: type 
mismatch, expected string but got blob', 'E976: Using a Blob as a String')
+   CheckDefAndScriptFailure2(['readfile("a", "b", "c")'], 'E1013: Argument 3: 
type mismatch, expected number but got string', 'E1030: Using a String as a 
Number')
  enddef
  
  def Test_reltime()
***************
*** 1435,1441 ****
--- 1603,1618 ----
    assert_fails('remote_foreground("NonExistingServer")', 'E241:')
  enddef
  
+ def Test_remote_peek()
+   CheckFeature clientserver
+   CheckEnv DISPLAY
+   CheckDefAndScriptFailure2(['remote_peek(0z10)'], 'E1013: Argument 1: type 
mismatch, expected string but got blob', 'E976: Using a Blob as a String')
+   CheckDefAndScriptFailure2(['remote_peek("a5b6c7", [1])'], 'E1013: Argument 
2: type mismatch, expected string but got list<number>', 'E573: Invalid server 
id used')
+ enddef
+ 
  def Test_remote_startserver()
+   CheckFeature clientserver
+   CheckEnv DISPLAY
    CheckDefFailure(['remote_startserver({})'], 'E1013: Argument 1: type 
mismatch, expected string but got dict<unknown>')
  enddef
  
***************
*** 1458,1463 ****
--- 1635,1645 ----
    assert_equal('SomeFile', resolve('SomeFile'))
  enddef
  
+ def Test_reverse()
+   CheckDefAndScriptFailure2(['reverse(10)'], 'E1013: Argument 1: type 
mismatch, expected list<any> but got number', 'E899: Argument of reverse() must 
be a List or Blob')
+   CheckDefAndScriptFailure2(['reverse("abc")'], 'E1013: Argument 1: type 
mismatch, expected list<any> but got string', 'E899: Argument of reverse() must 
be a List or Blob')
+ enddef
+ 
  def Test_reverse_return_type()
    var l = reverse([1, 2, 3])
    var res = 0
***************
*** 1468,1485 ****
  enddef
  
  def Test_screenattr()
!   CheckDefFailure(['echo screenattr("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
!   CheckDefFailure(['echo screenattr(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
  enddef
  
  def Test_screenchar()
!   CheckDefFailure(['echo screenchar("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
!   CheckDefFailure(['echo screenchar(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
  enddef
  
  def Test_screenchars()
!   CheckDefFailure(['echo screenchars("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
!   CheckDefFailure(['echo screenchars(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
  enddef
  
  def Test_screenpos()
--- 1650,1667 ----
  enddef
  
  def Test_screenattr()
!   CheckDefFailure(['screenattr("x", 1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['screenattr(1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
  enddef
  
  def Test_screenchar()
!   CheckDefFailure(['screenchar("x", 1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['screenchar(1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
  enddef
  
  def Test_screenchars()
!   CheckDefFailure(['screenchars("x", 1)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['screenchars(1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
  enddef
  
  def Test_screenpos()
***************
*** 1490,1497 ****
  enddef
  
  def Test_screenstring()
!   CheckDefFailure(['echo screenstring("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
!   CheckDefFailure(['echo screenstring(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
  enddef
  
  def Test_search()
--- 1672,1679 ----
  enddef
  
  def Test_screenstring()
!   CheckDefFailure(['screenstring("x", 1)'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
!   CheckDefFailure(['screenstring(1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string')
  enddef
  
  def Test_search()
***************
*** 1577,1582 ****
--- 1759,1771 ----
    bwipe!
  enddef
  
+ def Test_server2client()
+   CheckFeature clientserver
+   CheckEnv DISPLAY
+   CheckDefAndScriptFailure2(['server2client(10, "b")'], 'E1013: Argument 1: 
type mismatch, expected string but got number', 'E573: Invalid server id used:')
+   CheckDefAndScriptFailure2(['server2client("a", 10)'], 'E1013: Argument 2: 
type mismatch, expected string but got number', 'E573: Invalid server id used:')
+ enddef
+ 
  def Test_set_get_bufline()
    # similar to Test_setbufline_getbufline()
    var lines =<< trim END
***************
*** 1665,1671 ****
  enddef
  
  def Test_setcmdpos()
!   CheckDefFailure(['echo setcmdpos("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_setfperm()
--- 1854,1860 ----
  enddef
  
  def Test_setcmdpos()
!   CheckDefFailure(['setcmdpos("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_setfperm()
***************
*** 1695,1701 ****
  enddef
  
  def Test_shiftwidth()
!   CheckDefFailure(['echo shiftwidth("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_simplify()
--- 1884,1907 ----
  enddef
  
  def Test_shiftwidth()
!   CheckDefFailure(['shiftwidth("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
! enddef
! 
! def Test_sign_define()
!   CheckDefAndScriptFailure2(['sign_define({"a": 10})'], 'E1013: Argument 1: 
type mismatch, expected string but got dict<number>', 'E731: Using a Dictionary 
as a String')
!   CheckDefAndScriptFailure2(['sign_define({"a": 10}, "b")'], 'E1013: Argument 
1: type mismatch, expected string but got dict<number>', 'E731: Using a 
Dictionary as a String')
!   CheckDefAndScriptFailure2(['sign_define("a", ["b"])'], 'E1013: Argument 2: 
type mismatch, expected dict<any> but got list<string>', 'E715: Dictionary 
required')
! enddef
! 
! def Test_sign_undefine()
!   CheckDefAndScriptFailure2(['sign_undefine({})'], 'E1013: Argument 1: type 
mismatch, expected string but got dict<unknown>', 'E731: Using a Dictionary as 
a String')
!   CheckDefAndScriptFailure2(['sign_undefine([1])'], 'E1013: Argument 1: type 
mismatch, expected list<string> but got list<number>', 'E155: Unknown sign:')
! enddef
! 
! def Test_sign_unplace()
!   CheckDefAndScriptFailure2(['sign_unplace({"a": 10})'], 'E1013: Argument 1: 
type mismatch, expected string but got dict<number>', 'E474: Invalid argument')
!   CheckDefAndScriptFailure2(['sign_unplace({"a": 10}, "b")'], 'E1013: 
Argument 1: type mismatch, expected string but got dict<number>', 'E474: 
Invalid argument')
!   CheckDefAndScriptFailure2(['sign_unplace("a", ["b"])'], 'E1013: Argument 2: 
type mismatch, expected dict<any> but got list<string>', 'E715: Dictionary 
required')
  enddef
  
  def Test_simplify()
***************
*** 1790,1796 ****
      str2float("1.00")->assert_equal(1.00)
      str2float("2e-2")->assert_equal(0.02)
  
!     CheckDefFailure(['echo str2float(123)'], 'E1013:')
      CheckScriptFailure(['vim9script', 'echo str2float(123)'], 'E1024:')
    endif
  enddef
--- 1996,2002 ----
      str2float("1.00")->assert_equal(1.00)
      str2float("2e-2")->assert_equal(0.02)
  
!     CheckDefFailure(['str2float(123)'], 'E1013:')
      CheckScriptFailure(['vim9script', 'echo str2float(123)'], 'E1024:')
    endif
  enddef
***************
*** 1798,1808 ****
  def Test_str2nr()
    str2nr("1'000'000", 10, true)->assert_equal(1000000)
  
!   CheckDefFailure(['echo str2nr(123)'], 'E1013:')
    CheckScriptFailure(['vim9script', 'echo str2nr(123)'], 'E1024:')
!   CheckDefFailure(['echo str2nr("123", "x")'], 'E1013:')
    CheckScriptFailure(['vim9script', 'echo str2nr("123", "x")'], 'E1030:')
!   CheckDefFailure(['echo str2nr("123", 10, "x")'], 'E1013:')
    CheckScriptFailure(['vim9script', 'echo str2nr("123", 10, "x")'], 'E1135:')
  enddef
  
--- 2004,2014 ----
  def Test_str2nr()
    str2nr("1'000'000", 10, true)->assert_equal(1000000)
  
!   CheckDefFailure(['str2nr(123)'], 'E1013:')
    CheckScriptFailure(['vim9script', 'echo str2nr(123)'], 'E1024:')
!   CheckDefFailure(['str2nr("123", "x")'], 'E1013:')
    CheckScriptFailure(['vim9script', 'echo str2nr("123", "x")'], 'E1030:')
!   CheckDefFailure(['str2nr("123", 10, "x")'], 'E1013:')
    CheckScriptFailure(['vim9script', 'echo str2nr("123", 10, "x")'], 'E1135:')
  enddef
  
***************
*** 1810,1815 ****
--- 2016,2027 ----
    strchars("A\u20dd", true)->assert_equal(1)
  enddef
  
+ def Test_stridx()
+   CheckDefAndScriptFailure2(['stridx([1], "b")'], 'E1013: Argument 1: type 
mismatch, expected string but got list<number>', 'E730: Using a List as a 
String')
+   CheckDefAndScriptFailure2(['stridx("a", {})'], 'E1013: Argument 2: type 
mismatch, expected string but got dict<unknown>', 'E731: Using a Dictionary as 
a String')
+   CheckDefAndScriptFailure2(['stridx("a", "b", "c")'], 'E1013: Argument 3: 
type mismatch, expected number but got string', 'E1030: Using a String as a 
Number')
+ enddef
+ 
  def Test_strlen()
    CheckDefFailure(['strlen([])'], 'E1013: Argument 1: type mismatch, expected 
string but got list<unknown>')
    "abc"->strlen()->assert_equal(3)
***************
*** 1826,1831 ****
--- 2038,2049 ----
    #assert_true(strptime('%Y', '2021') != 0)
  enddef
  
+ def Test_strridx()
+   CheckDefAndScriptFailure2(['strridx([1], "b")'], 'E1013: Argument 1: type 
mismatch, expected string but got list<number>', 'E730: Using a List as a 
String')
+   CheckDefAndScriptFailure2(['strridx("a", {})'], 'E1013: Argument 2: type 
mismatch, expected string but got dict<unknown>', 'E731: Using a Dictionary as 
a String')
+   CheckDefAndScriptFailure2(['strridx("a", "b", "c")'], 'E1013: Argument 3: 
type mismatch, expected number but got string', 'E1030: Using a String as a 
Number')
+ enddef
+ 
  def Test_strtrans()
    CheckDefFailure(['strtrans(20)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
    assert_equal('abc', strtrans('abc'))
***************
*** 1883,1893 ****
  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'
--- 2101,2163 ----
  enddef
  
  def Test_tabpagenr()
!   CheckDefAndScriptFailure2(['tabpagenr(1)'], 'E1013: Argument 1: type 
mismatch, expected string but got number', 'E15: Invalid expression:')
    assert_equal(1, tabpagenr('$'))
    assert_equal(1, tabpagenr())
  enddef
  
+ def Test_taglist()
+   CheckDefAndScriptFailure2(['taglist([1])'], 'E1013: Argument 1: type 
mismatch, expected string but got list<number>', 'E730: Using a List as a 
String')
+   CheckDefAndScriptFailure2(['taglist("a", [2])'], 'E1013: Argument 2: type 
mismatch, expected string but got list<number>', 'E730: Using a List as a 
String')
+ enddef
+ 
+ def Test_term_dumpload()
+   CheckRunVimInTerminal
+   CheckDefAndScriptFailure2(['term_dumpload({"a": 10})'], 'E1013: Argument 1: 
type mismatch, expected string but got dict<number>', 'E1174: String required 
for argument 1')
+   CheckDefAndScriptFailure2(['term_dumpload({"a": 10}, "b")'], 'E1013: 
Argument 1: type mismatch, expected string but got dict<number>', 'E1174: 
String required for argument 1')
+   CheckDefAndScriptFailure2(['term_dumpload("a", ["b"])'], 'E1013: Argument 
2: type mismatch, expected dict<any> but got list<string>', 'E1206: Dictionary 
required for argument 2')
+ enddef
+ 
+ def Test_term_getaltscreen()
+   CheckRunVimInTerminal
+   CheckDefAndScriptFailure2(['term_getaltscreen(true)'], 'E1013: Argument 1: 
type mismatch, expected string but got bool', 'E1138: Using a Bool as a Number')
+ enddef
+ 
+ def Test_term_getansicolors()
+   CheckRunVimInTerminal
+   CheckDefAndScriptFailure2(['term_getansicolors(["a"])'], 'E1013: Argument 
1: type mismatch, expected string but got list<string>', 'E745: Using a List as 
a Number')
+ enddef
+ 
+ def Test_term_getcursor()
+   CheckRunVimInTerminal
+   CheckDefAndScriptFailure2(['term_getcursor({"a": 10})'], 'E1013: Argument 
1: type mismatch, expected string but got dict<number>', 'E728: Using a 
Dictionary as a Number')
+ enddef
+ 
+ def Test_term_getjob()
+   CheckRunVimInTerminal
+   CheckDefAndScriptFailure2(['term_getjob(0z10)'], 'E1013: Argument 1: type 
mismatch, expected string but got blob', 'E974: Using a Blob as a Number')
+ enddef
+ 
+ def Test_term_getscrolled()
+   CheckRunVimInTerminal
+   CheckDefAndScriptFailure2(['term_getscrolled(1.1)'], 'E1013: Argument 1: 
type mismatch, expected string but got float', 'E805: Using a Float as a 
Number')
+ enddef
+ 
+ def Test_term_getsize()
+   CheckRunVimInTerminal
+   CheckDefAndScriptFailure2(['term_getsize(1.1)'], 'E1013: Argument 1: type 
mismatch, expected string but got float', 'E805: Using a Float as a Number')
+ enddef
+ 
+ def Test_term_getstatus()
+   CheckRunVimInTerminal
+   CheckDefAndScriptFailure2(['term_getstatus(1.1)'], 'E1013: Argument 1: type 
mismatch, expected string but got float', 'E805: Using a Float as a Number')
+ enddef
+ 
+ def Test_term_gettitle()
+   CheckRunVimInTerminal
+   CheckDefAndScriptFailure2(['term_gettitle(1.1)'], 'E1013: Argument 1: type 
mismatch, expected string but got float', 'E805: Using a Float as a Number')
+ enddef
+ 
  def Test_term_gettty()
    if !has('terminal')
      MissingFeature 'terminal'
***************
*** 1910,1915 ****
--- 2180,2223 ----
    endif
  enddef
  
+ def Test_test_alloc_fail()
+   CheckDefAndScriptFailure2(['test_alloc_fail("a", 10, 20)'], 'E1013: 
Argument 1: type mismatch, expected number but got string', 'E474: Invalid 
argument')
+   CheckDefAndScriptFailure2(['test_alloc_fail(10, "b", 20)'], 'E1013: 
Argument 2: type mismatch, expected number but got string', 'E474: Invalid 
argument')
+   CheckDefAndScriptFailure2(['test_alloc_fail(10, 20, "c")'], 'E1013: 
Argument 3: type mismatch, expected number but got string', 'E474: Invalid 
argument')
+ enddef
+ 
+ def Test_test_feedinput()
+   CheckDefAndScriptFailure2(['test_feedinput(test_void())'], 'E1013: Argument 
1: type mismatch, expected string but got void', 'E1031: Cannot use void value')
+   CheckDefAndScriptFailure2(['test_feedinput(["a"])'], 'E1013: Argument 1: 
type mismatch, expected string but got list<string>', 'E730: Using a List as a 
String')
+ enddef
+ 
+ def Test_test_getvalue()
+   CheckDefAndScriptFailure2(['test_getvalue(1.1)'], 'E1013: Argument 1: type 
mismatch, expected string but got float', 'E474: Invalid argument')
+ enddef
+ 
+ def Test_test_ignore_error()
+   CheckDefAndScriptFailure2(['test_ignore_error([])'], 'E1013: Argument 1: 
type mismatch, expected string but got list<unknown>', 'E474: Invalid argument')
+   test_ignore_error('RESET')
+ enddef
+ 
+ def Test_test_option_not_set()
+   CheckDefAndScriptFailure2(['test_option_not_set([])'], 'E1013: Argument 1: 
type mismatch, expected string but got list<unknown>', 'E474: Invalid argument')
+ enddef
+ 
+ def Test_test_setmouse()
+   CheckDefAndScriptFailure2(['test_setmouse("a", 10)'], 'E1013: Argument 1: 
type mismatch, expected number but got string', 'E474: Invalid argument')
+   CheckDefAndScriptFailure2(['test_setmouse(10, "b")'], 'E1013: Argument 2: 
type mismatch, expected number but got string', 'E474: Invalid argument')
+ enddef
+ 
+ def Test_test_settime()
+   CheckDefAndScriptFailure2(['test_settime([1])'], 'E1013: Argument 1: type 
mismatch, expected number but got list<number>', 'E745: Using a List as a 
Number')
+ enddef
+ 
+ def Test_test_srand_seed()
+   CheckDefAndScriptFailure2(['test_srand_seed([1])'], 'E1013: Argument 1: 
type mismatch, expected number but got list<number>', 'E745: Using a List as a 
Number')
+   CheckDefAndScriptFailure2(['test_srand_seed("10")'], 'E1013: Argument 1: 
type mismatch, expected number but got string', 'E1030: Using a String as a 
Number')
+ enddef
+ 
  def Test_timer_info()
    CheckDefFailure(['timer_info("id")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
    assert_equal([], timer_info(100))
***************
*** 1930,1946 ****
  enddef
  
  def Test_tolower()
!   CheckDefFailure(['echo tolower(1)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
  enddef
  
  def Test_toupper()
!   CheckDefFailure(['echo toupper(1)'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
  enddef
  
  def Test_tr()
!   CheckDefFailure(['echo tr(1, "a", "b")'], 'E1013: Argument 1: type 
mismatch, expected string but got number')
!   CheckDefFailure(['echo tr("a", 1, "b")'], 'E1013: Argument 2: type 
mismatch, expected string but got number')
!   CheckDefFailure(['echo tr("a", "a", 1)'], 'E1013: Argument 3: type 
mismatch, expected string but got number')
  enddef
  
  def Test_typename()
--- 2238,2260 ----
  enddef
  
  def Test_tolower()
!   CheckDefFailure(['tolower(1)'], 'E1013: Argument 1: type mismatch, expected 
string but got number')
  enddef
  
  def Test_toupper()
!   CheckDefFailure(['toupper(1)'], 'E1013: Argument 1: type mismatch, expected 
string but got number')
  enddef
  
  def Test_tr()
!   CheckDefFailure(['tr(1, "a", "b")'], 'E1013: Argument 1: type mismatch, 
expected string but got number')
!   CheckDefFailure(['tr("a", 1, "b")'], 'E1013: Argument 2: type mismatch, 
expected string but got number')
!   CheckDefFailure(['tr("a", "a", 1)'], 'E1013: Argument 3: type mismatch, 
expected string but got number')
! enddef
! 
! def Test_trim()
!   CheckDefAndScriptFailure2(['trim(["a"])'], 'E1013: Argument 1: type 
mismatch, expected string but got list<string>', 'E730: Using a List as a 
String')
!   CheckDefAndScriptFailure2(['trim("a", ["b"])'], 'E1013: Argument 2: type 
mismatch, expected string but got list<string>', 'E730: Using a List as a 
String')
!   CheckDefAndScriptFailure2(['trim("a", "b", "c")'], 'E1013: Argument 3: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
  enddef
  
  def Test_typename()
***************
*** 1960,1965 ****
--- 2274,2283 ----
    assert_equal(['sun'], {star: 'sun'}->values())
  enddef
  
+ def Test_virtcol()
+   CheckDefAndScriptFailure2(['virtcol(1.1)'], 'E1013: Argument 1: type 
mismatch, expected string but got float', 'E1174: String required for argument 
1')
+ enddef
+ 
  def Test_win_execute()
    assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()'))
    assert_equal('', win_execute(342343, 'echo winnr()'))
***************
*** 2016,2059 ****
  enddef
  
  def Test_win_gettype()
!   CheckDefFailure(['echo win_gettype("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_win_gotoid()
!   CheckDefFailure(['echo win_gotoid("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_win_id2tabwin()
!   CheckDefFailure(['echo win_id2tabwin("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_win_id2win()
!   CheckDefFailure(['echo win_id2win("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_win_screenpos()
!   CheckDefFailure(['echo win_screenpos("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string')
  enddef
  
  def Test_winbufnr()
!   CheckDefFailure(['echo winbufnr("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_winheight()
!   CheckDefFailure(['echo winheight("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_winlayout()
!   CheckDefFailure(['echo winlayout("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_winwidth()
!   CheckDefFailure(['echo winwidth("x")'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
  enddef
  
  def Test_xor()
!   CheckDefFailure(['echo xor("x", 0x2)'], 'E1013: Argument 1: type mismatch, 
expected number but got string')
!   CheckDefFailure(['echo xor(0x1, "x")'], 'E1013: Argument 2: type mismatch, 
expected number but got string')
  enddef
  
  " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
--- 2334,2377 ----
  enddef
  
  def Test_win_gettype()
!   CheckDefAndScriptFailure2(['win_gettype("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
  enddef
  
  def Test_win_gotoid()
!   CheckDefAndScriptFailure2(['win_gotoid("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
  enddef
  
  def Test_win_id2tabwin()
!   CheckDefAndScriptFailure2(['win_id2tabwin("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
  enddef
  
  def Test_win_id2win()
!   CheckDefAndScriptFailure2(['win_id2win("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
  enddef
  
  def Test_win_screenpos()
!   CheckDefAndScriptFailure2(['win_screenpos("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
  enddef
  
  def Test_winbufnr()
!   CheckDefAndScriptFailure2(['winbufnr("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
  enddef
  
  def Test_winheight()
!   CheckDefAndScriptFailure2(['winheight("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
  enddef
  
  def Test_winlayout()
!   CheckDefAndScriptFailure2(['winlayout("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
  enddef
  
  def Test_winwidth()
!   CheckDefAndScriptFailure2(['winwidth("x")'], 'E1013: Argument 1: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
  enddef
  
  def Test_xor()
!   CheckDefAndScriptFailure2(['xor("x", 0x2)'], 'E1013: Argument 1: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
!   CheckDefAndScriptFailure2(['xor(0x1, "x")'], 'E1013: Argument 2: type 
mismatch, expected number but got string', 'E1030: Using a String as a Number')
  enddef
  
  " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
*** ../vim-8.2.3134/src/testing.c       2021-06-27 19:02:48.985931140 +0200
--- src/testing.c       2021-07-10 13:06:33.151172215 +0200
***************
*** 1096,1102 ****
      void
  f_test_ignore_error(typval_T *argvars, typval_T *rettv UNUSED)
  {
!      ignore_error_for_testing(tv_get_string(&argvars[0]));
  }
  
      void
--- 1096,1105 ----
      void
  f_test_ignore_error(typval_T *argvars, typval_T *rettv UNUSED)
  {
!     if (argvars[0].v_type != VAR_STRING)
!       emsg(_(e_invarg));
!     else
!       ignore_error_for_testing(tv_get_string(&argvars[0]));
  }
  
      void
*** ../vim-8.2.3134/src/textprop.c      2021-06-27 22:03:28.645707721 +0200
--- src/textprop.c      2021-07-10 13:06:33.151172215 +0200
***************
*** 605,611 ****
  
      if (argvars[0].v_type != VAR_DICT || argvars[0].vval.v_dict == NULL)
      {
!       emsg(_(e_invarg));
        return;
      }
      dict = argvars[0].vval.v_dict;
--- 605,611 ----
  
      if (argvars[0].v_type != VAR_DICT || argvars[0].vval.v_dict == NULL)
      {
!       emsg(_(e_dictreq));
        return;
      }
      dict = argvars[0].vval.v_dict;
*** ../vim-8.2.3134/src/typval.c        2021-06-27 22:03:28.649707714 +0200
--- src/typval.c        2021-07-10 13:06:33.155172219 +0200
***************
*** 385,390 ****
--- 385,407 ----
  }
  
  /*
+  * Give an error and return FAIL unless "tv" is a dict.
+  */
+     int
+ check_for_dict_arg(typval_T *args, int idx)
+ {
+     if (args[idx].v_type != VAR_DICT)
+     {
+       if (idx >= 0)
+           semsg(_(e_dict_required_for_argument_nr), idx + 1);
+       else
+           emsg(_(e_dictreq));
+       return FAIL;
+     }
+     return OK;
+ }
+ 
+ /*
   * Get the string value of a variable.
   * If it is a Number variable, the number is converted into a string.
   * tv_get_string() uses a single, static buffer.  YOU CAN ONLY USE IT ONCE!
***************
*** 456,468 ****
            return buf;
        case VAR_FUNC:
        case VAR_PARTIAL:
!           emsg(_("E729: using Funcref as a String"));
            break;
        case VAR_LIST:
!           emsg(_("E730: using List as a String"));
            break;
        case VAR_DICT:
!           emsg(_("E731: using Dictionary as a String"));
            break;
        case VAR_FLOAT:
  #ifdef FEAT_FLOAT
--- 473,485 ----
            return buf;
        case VAR_FUNC:
        case VAR_PARTIAL:
!           emsg(_("E729: Using a Funcref as a String"));
            break;
        case VAR_LIST:
!           emsg(_("E730: Using a List as a String"));
            break;
        case VAR_DICT:
!           emsg(_("E731: Using a Dictionary as a String"));
            break;
        case VAR_FLOAT:
  #ifdef FEAT_FLOAT
***************
*** 483,489 ****
            STRCPY(buf, get_var_special_name(varp->vval.v_number));
            return buf;
          case VAR_BLOB:
!           emsg(_("E976: using Blob as a String"));
            break;
        case VAR_JOB:
  #ifdef FEAT_JOB_CHANNEL
--- 500,506 ----
            STRCPY(buf, get_var_special_name(varp->vval.v_number));
            return buf;
          case VAR_BLOB:
!           emsg(_("E976: Using a Blob as a String"));
            break;
        case VAR_JOB:
  #ifdef FEAT_JOB_CHANNEL
*** ../vim-8.2.3134/src/version.c       2021-07-09 19:53:51.594271244 +0200
--- src/version.c       2021-07-10 13:10:51.127210680 +0200
***************
*** 757,758 ****
--- 757,760 ----
  {   /* Add new patch number below this line */
+ /**/
+     3135,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
105. When someone asks you for your address, you tell them your URL.

 /// 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/202107101116.16ABGFn8541888%40masaka.moolenaar.net.

Raspunde prin e-mail lui