To: vim_dev@googlegroups.com Subject: Patch 8.2.3229 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.3229 Problem: Vim9: runtime and compile time type checks are not the same. Solution: Add more runtime type checks for builtin functions. (Yegappan Lakshmanan, closes #8646) Files: src/arglist.c, src/change.c, src/channel.c, src/cindent.c, src/clientserver.c, src/cmdhist.c, src/dict.c, src/diff.c, src/digraph.c, src/errors.h, src/eval.c, src/evalbuffer.c, src/evalfunc.c, src/evalwindow.c, src/ex_docmd.c, src/ex_getln.c, src/filepath.c, src/findfile.c, src/float.c, src/fold.c, src/getchar.c, src/indent.c, src/insexpand.c, src/job.c, src/json.c, src/list.c, src/mark.c, src/match.c, src/mbyte.c, src/menu.c, src/misc1.c, src/move.c, src/popupwin.c, src/proto/typval.pro, src/quickfix.c, src/search.c, src/sign.c, src/sound.c, src/strings.c, src/terminal.c, src/testdir/test_assert.vim, src/testdir/test_blob.vim, src/testdir/test_execute_func.vim, src/testdir/test_float_func.vim, src/testdir/test_functions.vim, src/testdir/test_glob2regpat.vim, src/testdir/test_listdict.vim, src/testdir/test_vim9_builtin.vim, src/testdir/test_vim9_script.vim, src/testing.c, src/textprop.c, src/time.c, src/typval.c, src/undo.c *** ../vim-8.2.3228/src/arglist.c 2021-06-27 22:03:28.637707737 +0200 --- src/arglist.c 2021-07-27 21:52:46.414688294 +0200 *************** *** 1271,1276 **** --- 1271,1279 ---- { win_T *wp; + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type == VAR_UNKNOWN) // use the current window rettv->vval.v_number = ARGCOUNT; *************** *** 1306,1311 **** --- 1309,1320 ---- { win_T *wp; + if (in_vim9script() + && (check_for_opt_number_arg(argvars, 0) == FAIL + || (argvars[0].v_type != VAR_UNKNOWN + && check_for_opt_number_arg(argvars, 1) == FAIL))) + return; + rettv->vval.v_number = -1; wp = find_tabwin(&argvars[0], &argvars[1], NULL); if (wp != NULL) *************** *** 1336,1341 **** --- 1345,1356 ---- aentry_T *arglist = NULL; int argcount = -1; + if (in_vim9script() + && (check_for_opt_number_arg(argvars, 0) == FAIL + || (argvars[0].v_type != VAR_UNKNOWN + && check_for_opt_number_arg(argvars, 1) == FAIL))) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { if (argvars[1].v_type == VAR_UNKNOWN) *** ../vim-8.2.3228/src/change.c 2021-07-26 22:19:05.376122583 +0200 --- src/change.c 2021-07-27 21:52:46.414688294 +0200 *************** *** 281,286 **** --- 281,289 ---- { buf_T *buf = curbuf; + if (in_vim9script() && check_for_opt_buffer_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { buf = get_buf_arg(&argvars[0]); *************** *** 299,307 **** listener_T *lnr; listener_T *next; listener_T *prev; ! int id = tv_get_number(argvars); buf_T *buf; FOR_ALL_BUFFERS(buf) { prev = NULL; --- 302,314 ---- listener_T *lnr; listener_T *next; listener_T *prev; ! int id; buf_T *buf; + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + + id = tv_get_number(argvars); FOR_ALL_BUFFERS(buf) { prev = NULL; *** ../vim-8.2.3228/src/channel.c 2021-07-24 16:16:11.538239524 +0200 --- src/channel.c 2021-07-27 21:52:46.414688294 +0200 *************** *** 3865,3870 **** --- 3865,3875 ---- rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; + if (in_vim9script() + && (check_for_chan_or_job_arg(argvars, 0) == FAIL + || check_for_opt_dict_arg(argvars, 1) == FAIL)) + return; + clear_job_options(&opt); if (get_job_options(&argvars[1], &opt, JO_TIMEOUT + JO_PART + JO_ID, 0) == FAIL) *************** *** 4784,4792 **** void f_ch_canread(typval_T *argvars, typval_T *rettv) { ! channel_T *channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0); rettv->vval.v_number = 0; if (channel != NULL) rettv->vval.v_number = channel_has_readahead(channel, PART_SOCK) || channel_has_readahead(channel, PART_OUT) --- 4789,4801 ---- void f_ch_canread(typval_T *argvars, typval_T *rettv) { ! channel_T *channel; rettv->vval.v_number = 0; + if (in_vim9script() && check_for_chan_or_job_arg(argvars, 0) == FAIL) + return; + + channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0); if (channel != NULL) rettv->vval.v_number = channel_has_readahead(channel, PART_SOCK) || channel_has_readahead(channel, PART_OUT) *************** *** 4799,4806 **** void f_ch_close(typval_T *argvars, typval_T *rettv UNUSED) { ! channel_T *channel = get_channel_arg(&argvars[0], TRUE, FALSE, 0); if (channel != NULL) { channel_close(channel, FALSE); --- 4808,4819 ---- void f_ch_close(typval_T *argvars, typval_T *rettv UNUSED) { ! channel_T *channel; + if (in_vim9script() && check_for_chan_or_job_arg(argvars, 0) == FAIL) + return; + + channel = get_channel_arg(&argvars[0], TRUE, FALSE, 0); if (channel != NULL) { channel_close(channel, FALSE); *************** *** 4814,4821 **** void f_ch_close_in(typval_T *argvars, typval_T *rettv UNUSED) { ! channel_T *channel = get_channel_arg(&argvars[0], TRUE, FALSE, 0); if (channel != NULL) channel_close_in(channel); } --- 4827,4838 ---- void f_ch_close_in(typval_T *argvars, typval_T *rettv UNUSED) { ! channel_T *channel; + if (in_vim9script() && check_for_chan_or_job_arg(argvars, 0) == FAIL) + return; + + channel = get_channel_arg(&argvars[0], TRUE, FALSE, 0); if (channel != NULL) channel_close_in(channel); } *************** *** 4861,4868 **** void f_ch_getjob(typval_T *argvars, typval_T *rettv) { ! channel_T *channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0); if (channel != NULL) { rettv->v_type = VAR_JOB; --- 4878,4889 ---- void f_ch_getjob(typval_T *argvars, typval_T *rettv) { ! channel_T *channel; + if (in_vim9script() && check_for_chan_or_job_arg(argvars, 0) == FAIL) + return; + + channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0); if (channel != NULL) { rettv->v_type = VAR_JOB; *************** *** 4878,4885 **** void f_ch_info(typval_T *argvars, typval_T *rettv UNUSED) { ! channel_T *channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0); if (channel != NULL && rettv_dict_alloc(rettv) != FAIL) channel_info(channel, rettv->vval.v_dict); } --- 4899,4910 ---- void f_ch_info(typval_T *argvars, typval_T *rettv UNUSED) { ! channel_T *channel; + if (in_vim9script() && check_for_chan_or_job_arg(argvars, 0) == FAIL) + return; + + channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0); if (channel != NULL && rettv_dict_alloc(rettv) != FAIL) channel_info(channel, rettv->vval.v_dict); } *************** *** 4921,4927 **** if (in_vim9script() && (check_for_string_arg(argvars, 0) == FAIL ! || check_for_string_arg(argvars, 1) == FAIL)) return; fname = tv_get_string(&argvars[0]); --- 4946,4952 ---- if (in_vim9script() && (check_for_string_arg(argvars, 0) == FAIL ! || check_for_opt_string_arg(argvars, 1) == FAIL)) return; fname = tv_get_string(&argvars[0]); *************** *** 5014,5019 **** --- 5039,5049 ---- channel_T *channel; jobopt_T opt; + if (in_vim9script() + && (check_for_chan_or_job_arg(argvars, 0) == FAIL + || check_for_dict_arg(argvars, 1) == FAIL)) + return; + channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0); if (channel == NULL) return; *************** *** 5038,5043 **** --- 5068,5078 ---- rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; + if (in_vim9script() + && (check_for_chan_or_job_arg(argvars, 0) == FAIL + || check_for_opt_dict_arg(argvars, 1) == FAIL)) + return; + channel = get_channel_arg(&argvars[0], FALSE, FALSE, 0); if (argvars[1].v_type != VAR_UNKNOWN) *** ../vim-8.2.3228/src/cindent.c 2021-06-02 13:28:11.423120478 +0200 --- src/cindent.c 2021-07-27 21:52:46.414688294 +0200 *************** *** 4129,4134 **** --- 4129,4137 ---- pos_T pos; linenr_T lnum; + if (in_vim9script() && check_for_lnum_arg(argvars, 0) == FAIL) + return; + pos = curwin->w_cursor; lnum = tv_get_lnum(argvars); if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) *** ../vim-8.2.3228/src/clientserver.c 2021-07-20 17:51:48.239744107 +0200 --- src/clientserver.c 2021-07-27 21:52:46.414688294 +0200 *************** *** 814,819 **** --- 814,822 ---- f_remote_foreground(typval_T *argvars UNUSED, typval_T *rettv UNUSED) { #ifdef FEAT_CLIENTSERVER + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + # ifdef MSWIN // On Win32 it's done in this application. { *************** *** 846,862 **** # endif char_u *serverid; if (check_restricted() || check_secure()) - { - rettv->vval.v_number = -1; return; ! } serverid = tv_get_string_chk(&argvars[0]); if (serverid == NULL) - { - rettv->vval.v_number = -1; return; // type error; errmsg already given - } # ifdef MSWIN sscanf((const char *)serverid, SCANF_HEX_LONG_U, &n); if (n == 0) --- 849,866 ---- # endif char_u *serverid; + rettv->vval.v_number = -1; if (check_restricted() || check_secure()) return; ! ! if (in_vim9script() ! && (check_for_string_arg(argvars, 0) == FAIL ! || check_for_opt_string_arg(argvars, 1) == FAIL)) ! return; ! serverid = tv_get_string_chk(&argvars[0]); if (serverid == NULL) return; // type error; errmsg already given # ifdef MSWIN sscanf((const char *)serverid, SCANF_HEX_LONG_U, &n); if (n == 0) *************** *** 959,966 **** f_remote_startserver(typval_T *argvars UNUSED, typval_T *rettv UNUSED) { #ifdef FEAT_CLIENTSERVER ! char_u *server = tv_get_string_chk(&argvars[0]); if (server == NULL) return; // type error; errmsg already given if (serverName != NULL) --- 963,974 ---- f_remote_startserver(typval_T *argvars UNUSED, typval_T *rettv UNUSED) { #ifdef FEAT_CLIENTSERVER ! char_u *server; ! ! if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) ! return; + server = tv_get_string_chk(&argvars[0]); if (server == NULL) return; // type error; errmsg already given if (serverName != NULL) *************** *** 984,997 **** { #ifdef FEAT_CLIENTSERVER char_u buf[NUMBUFLEN]; ! char_u *server = tv_get_string_chk(&argvars[0]); ! char_u *reply = tv_get_string_buf_chk(&argvars[1], buf); rettv->vval.v_number = -1; - if (server == NULL || reply == NULL) - return; if (check_restricted() || check_secure()) return; # ifdef FEAT_X11 if (check_connection() == FAIL) return; --- 992,1014 ---- { #ifdef FEAT_CLIENTSERVER char_u buf[NUMBUFLEN]; ! char_u *server; ! char_u *reply; rettv->vval.v_number = -1; if (check_restricted() || check_secure()) return; + + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_string_arg(argvars, 1) == FAIL)) + return; + + server = tv_get_string_chk(&argvars[0]); + reply = tv_get_string_buf_chk(&argvars[1], buf); + if (server == NULL || reply == NULL) + return; + # ifdef FEAT_X11 if (check_connection() == FAIL) return; *** ../vim-8.2.3228/src/cmdhist.c 2021-07-23 20:37:52.018322443 +0200 --- src/cmdhist.c 2021-07-27 21:52:46.414688294 +0200 *************** *** 545,550 **** --- 545,556 ---- rettv->vval.v_number = FALSE; if (check_secure()) return; + + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_string_arg(argvars, 1) == FAIL)) + return; + str = tv_get_string_chk(&argvars[0]); // NULL on type error histype = str != NULL ? get_histtype(str) : -1; if (histype >= 0) *************** *** 630,638 **** f_histnr(typval_T *argvars UNUSED, typval_T *rettv) { int i; ! char_u *histname = tv_get_string_chk(&argvars[0]); i = histname == NULL ? HIST_CMD - 1 : get_histtype(histname); if (i >= HIST_CMD && i < HIST_COUNT) i = get_history_idx(i); --- 636,647 ---- f_histnr(typval_T *argvars UNUSED, typval_T *rettv) { int i; + char_u *histname; ! if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) ! return; + histname = tv_get_string_chk(&argvars[0]); i = histname == NULL ? HIST_CMD - 1 : get_histtype(histname); if (i >= HIST_CMD && i < HIST_COUNT) i = get_history_idx(i); *** ../vim-8.2.3228/src/dict.c 2021-07-23 20:37:52.018322443 +0200 --- src/dict.c 2021-07-27 21:52:46.414688294 +0200 *************** *** 1201,1206 **** --- 1201,1209 ---- dict_T *d; int todo; + if (in_vim9script() && check_for_dict_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_DICT) { emsg(_(e_dictreq)); *************** *** 1318,1323 **** --- 1321,1331 ---- void f_has_key(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() + && (check_for_dict_arg(argvars, 0) == FAIL + || check_for_string_or_number_arg(argvars, 1) == FAIL)) + return; + if (argvars[0].v_type != VAR_DICT) { emsg(_(e_dictreq)); *** ../vim-8.2.3228/src/diff.c 2021-07-21 19:09:06.244680074 +0200 --- src/diff.c 2021-07-27 21:52:46.414688294 +0200 *************** *** 3272,3277 **** --- 3272,3280 ---- f_diff_filler(typval_T *argvars UNUSED, typval_T *rettv UNUSED) { #ifdef FEAT_DIFF + if (in_vim9script() && check_for_lnum_arg(argvars, 0) == FAIL) + return; + rettv->vval.v_number = diff_check_fill(curwin, tv_get_lnum(argvars)); #endif } *** ../vim-8.2.3228/src/digraph.c 2021-07-26 21:54:00.051491580 +0200 --- src/digraph.c 2021-07-27 21:52:46.414688294 +0200 *************** *** 2406,2411 **** --- 2406,2415 ---- rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; // Return empty string for failure + + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + digraphs = tv_get_string_chk(&argvars[0]); if (digraphs == NULL) *************** *** 2439,2444 **** --- 2443,2451 ---- # ifdef FEAT_DIGRAPHS int flag_list_all; + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type == VAR_UNKNOWN) flag_list_all = FALSE; else *************** *** 2466,2471 **** --- 2473,2483 ---- rettv->v_type = VAR_BOOL; rettv->vval.v_number = VVAL_FALSE; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_number_arg(argvars, 1) == FAIL)) + return; + if (!digraph_set_common(&argvars[0], &argvars[1])) return; *** ../vim-8.2.3228/src/errors.h 2021-07-26 21:54:00.051491580 +0200 --- src/errors.h 2021-07-27 21:52:46.414688294 +0200 *************** *** 617,619 **** --- 617,639 ---- INIT(= N_("E1217: Channel or Job required for argument %d")); EXTERN char e_job_required_for_argument_nr[] INIT(= N_("E1218: Job required for argument %d")); + EXTERN char e_float_or_number_required_for_argument_nr[] + INIT(= N_("E1219: Float or Number required for argument %d")); + EXTERN char e_string_or_number_required_for_argument_nr[] + INIT(= N_("E1220: String or Number required for argument %d")); + EXTERN char e_string_or_blob_required_for_argument_nr[] + INIT(= N_("E1221: String or Blob required for argument %d")); + EXTERN char e_string_or_list_required_for_argument_nr[] + INIT(= N_("E1222: String or List required for argument %d")); + EXTERN char e_string_or_dict_required_for_argument_nr[] + INIT(= N_("E1223: String or List required for argument %d")); + EXTERN char e_string_or_number_or_list_required_for_argument_nr[] + INIT(= N_("E1224: String or List required for argument %d")); + EXTERN char e_string_or_list_or_dict_required_for_argument_nr[] + INIT(= N_("E1225: String or List required for argument %d")); + EXTERN char e_list_or_blob_required_for_argument_nr[] + INIT(= N_("E1226: String or List required for argument %d")); + EXTERN char e_list_or_dict_required_for_argument_nr[] + INIT(= N_("E1227: List or Dictionary required for argument %d")); + EXTERN char e_list_or_dict_or_blob_required_for_argument_nr[] + INIT(= N_("E1228: List or Dictionary or Blob required for argument %d")); *** ../vim-8.2.3228/src/eval.c 2021-07-26 21:10:07.977693943 +0200 --- src/eval.c 2021-07-27 21:52:46.418688287 +0200 *************** *** 4190,4198 **** f_slice(typval_T *argvars, typval_T *rettv) { if (in_vim9script() ! && ((argvars[0].v_type != VAR_LIST && argvars[0].v_type != VAR_BLOB - && argvars[0].v_type != VAR_STRING && check_for_list_arg(argvars, 0) == FAIL) || check_for_number_arg(argvars, 1) == FAIL || check_for_opt_number_arg(argvars, 2) == FAIL)) --- 4190,4198 ---- f_slice(typval_T *argvars, typval_T *rettv) { if (in_vim9script() ! && ((argvars[0].v_type != VAR_STRING ! && argvars[0].v_type != VAR_LIST && argvars[0].v_type != VAR_BLOB && check_for_list_arg(argvars, 0) == FAIL) || check_for_number_arg(argvars, 1) == FAIL || check_for_opt_number_arg(argvars, 2) == FAIL)) *** ../vim-8.2.3228/src/evalbuffer.c 2021-07-21 19:09:06.244680074 +0200 --- src/evalbuffer.c 2021-07-27 21:52:46.418688287 +0200 *************** *** 277,284 **** void f_append(typval_T *argvars, typval_T *rettv) { ! linenr_T lnum = tv_get_lnum(&argvars[0]); set_buffer_lines(curbuf, lnum, TRUE, &argvars[1], rettv); } --- 277,288 ---- void f_append(typval_T *argvars, typval_T *rettv) { ! linenr_T lnum; ! ! if (in_vim9script() && check_for_lnum_arg(argvars, 0) == FAIL) ! return; + lnum = tv_get_lnum(&argvars[0]); set_buffer_lines(curbuf, lnum, TRUE, &argvars[1], rettv); } *************** *** 291,296 **** --- 295,306 ---- linenr_T lnum; buf_T *buf; + if (in_vim9script() + && (check_for_buffer_arg(argvars, 0) == FAIL + || check_for_lnum_arg(argvars, 1) == FAIL + || check_for_string_or_number_or_list_arg(argvars, 2) == FAIL)) + return; + buf = tv_get_buf(&argvars[0], FALSE); if (buf == NULL) rettv->vval.v_number = 1; // FAIL *************** *** 307,314 **** void f_bufadd(typval_T *argvars, typval_T *rettv) { ! char_u *name = tv_get_string(&argvars[0]); rettv->vval.v_number = buflist_add(*name == NUL ? NULL : name, 0); } --- 317,328 ---- void f_bufadd(typval_T *argvars, typval_T *rettv) { ! char_u *name; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + + name = tv_get_string(&argvars[0]); rettv->vval.v_number = buflist_add(*name == NUL ? NULL : name, 0); } *************** *** 318,323 **** --- 332,340 ---- void f_bufexists(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) + return; + rettv->vval.v_number = (find_buffer(&argvars[0]) != NULL); } *************** *** 329,334 **** --- 346,354 ---- { buf_T *buf; + if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) + return; + buf = find_buffer(&argvars[0]); rettv->vval.v_number = (buf != NULL && buf->b_p_bl); } *************** *** 339,346 **** void f_bufload(typval_T *argvars, typval_T *rettv UNUSED) { ! buf_T *buf = get_buf_arg(&argvars[0]); if (buf != NULL) buffer_ensure_loaded(buf); } --- 359,370 ---- void f_bufload(typval_T *argvars, typval_T *rettv UNUSED) { ! buf_T *buf; + if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) + return; + + buf = get_buf_arg(&argvars[0]); if (buf != NULL) buffer_ensure_loaded(buf); } *************** *** 353,358 **** --- 377,385 ---- { buf_T *buf; + if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) + return; + buf = find_buffer(&argvars[0]); rettv->vval.v_number = (buf != NULL && buf->b_ml.ml_mfp != NULL); } *************** *** 366,371 **** --- 393,401 ---- buf_T *buf; typval_T *tv = &argvars[0]; + if (in_vim9script() && check_for_opt_buffer_arg(argvars, 0) == FAIL) + return; + if (tv->v_type == VAR_UNKNOWN) buf = curbuf; else *************** *** 421,426 **** --- 451,459 ---- int winnr = 0; buf_T *buf; + if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) + return; + buf = tv_get_buf_from_arg(&argvars[0]); FOR_ALL_WINDOWS(wp) { *************** *** 636,643 **** return; if (in_vim9script() ! && argvars[0].v_type != VAR_UNKNOWN ! && check_for_buffer_or_dict_arg(argvars, 0) == FAIL) return; // List of all the buffers or selected buffers --- 669,675 ---- return; if (in_vim9script() ! && check_for_opt_buffer_or_dict_arg(argvars, 0) == FAIL) return; // List of all the buffers or selected buffers *************** *** 808,813 **** --- 840,851 ---- linenr_T lnum; buf_T *buf; + if (in_vim9script() + && (check_for_buffer_arg(argvars, 0) == FAIL + || check_for_lnum_arg(argvars, 1) == FAIL + || check_for_string_or_number_or_list_arg(argvars, 2) == FAIL)) + return; + buf = tv_get_buf(&argvars[0], FALSE); if (buf == NULL) rettv->vval.v_number = 1; // FAIL *************** *** 824,831 **** void f_setline(typval_T *argvars, typval_T *rettv) { ! linenr_T lnum = tv_get_lnum(&argvars[0]); set_buffer_lines(curbuf, lnum, FALSE, &argvars[1], rettv); } #endif // FEAT_EVAL --- 862,873 ---- void f_setline(typval_T *argvars, typval_T *rettv) { ! linenr_T lnum; ! ! if (in_vim9script() && check_for_lnum_arg(argvars, 0) == FAIL) ! return; + lnum = tv_get_lnum(&argvars[0]); set_buffer_lines(curbuf, lnum, FALSE, &argvars[1], rettv); } #endif // FEAT_EVAL *** ../vim-8.2.3228/src/evalfunc.c 2021-07-26 21:54:00.055491571 +0200 --- src/evalfunc.c 2021-07-27 21:52:46.418688287 +0200 *************** *** 762,768 **** static argcheck_T arg3_string_number_number[] = {arg_string, arg_number, arg_number}; static argcheck_T arg3_string_string_bool[] = {arg_string, arg_string, arg_bool}; static argcheck_T arg3_string_string_dict[] = {arg_string, arg_string, arg_dict_any}; ! static argcheck_T arg3_string_string_nr[] = {arg_string, arg_string, arg_number}; static argcheck_T arg4_list_number_number_number[] = {arg_list_string, arg_number, arg_number, arg_number}; static argcheck_T arg4_number_number_string_any[] = {arg_number, arg_number, arg_string, NULL}; static argcheck_T arg4_string_string_any_string[] = {arg_string, arg_string, NULL, arg_string}; --- 762,768 ---- static argcheck_T arg3_string_number_number[] = {arg_string, arg_number, arg_number}; static argcheck_T arg3_string_string_bool[] = {arg_string, arg_string, arg_bool}; static argcheck_T arg3_string_string_dict[] = {arg_string, arg_string, arg_dict_any}; ! static argcheck_T arg3_string_string_number[] = {arg_string, arg_string, arg_number}; static argcheck_T arg4_list_number_number_number[] = {arg_list_string, arg_number, arg_number, arg_number}; static argcheck_T arg4_number_number_string_any[] = {arg_number, arg_number, arg_string, NULL}; static argcheck_T arg4_string_string_any_string[] = {arg_string, arg_string, NULL, arg_string}; *************** *** 811,817 **** static argcheck_T arg12_system[] = {arg_string, arg_str_or_nr_or_list}; static argcheck_T arg23_win_execute[] = {arg_number, arg_string_or_list_string, arg_string}; static argcheck_T arg23_writefile[] = {arg_list_or_blob, arg_string, arg_string}; ! static argcheck_T arg4_match_func[] = {arg_string_or_list_any, arg_string, arg_number, arg_number}; /* --- 811,817 ---- static argcheck_T arg12_system[] = {arg_string, arg_str_or_nr_or_list}; static argcheck_T arg23_win_execute[] = {arg_number, arg_string_or_list_string, arg_string}; static argcheck_T arg23_writefile[] = {arg_list_or_blob, arg_string, arg_string}; ! static argcheck_T arg24_match_func[] = {arg_string_or_list_any, arg_string, arg_number, arg_number}; /* *************** *** 1340,1348 **** ret_number, f_filewritable}, {"filter", 2, 2, FEARG_1, arg2_mapfilter, 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, arg2_list_any_number, ret_list_any, f_flatten}, --- 1340,1348 ---- ret_number, f_filewritable}, {"filter", 2, 2, FEARG_1, arg2_mapfilter, ret_first_arg, f_filter}, ! {"finddir", 1, 3, FEARG_1, arg3_string_string_number, ret_string, f_finddir}, ! {"findfile", 1, 3, FEARG_1, arg3_string_string_number, ret_string, f_findfile}, {"flatten", 1, 2, FEARG_1, arg2_list_any_number, ret_list_any, f_flatten}, *************** *** 1608,1614 **** ret_first_cont, f_mapnew}, {"mapset", 3, 3, FEARG_1, arg3_string_bool_dict, ret_void, f_mapset}, ! {"match", 2, 4, FEARG_1, arg4_match_func, ret_any, f_match}, {"matchadd", 2, 5, FEARG_1, arg25_matchadd, ret_number, f_matchadd}, --- 1608,1614 ---- ret_first_cont, f_mapnew}, {"mapset", 3, 3, FEARG_1, arg3_string_bool_dict, ret_void, f_mapset}, ! {"match", 2, 4, FEARG_1, arg24_match_func, ret_any, f_match}, {"matchadd", 2, 5, FEARG_1, arg25_matchadd, ret_number, f_matchadd}, *************** *** 1618,1634 **** ret_list_string, f_matcharg}, {"matchdelete", 1, 2, FEARG_1, arg2_number, ret_number_bool, f_matchdelete}, ! {"matchend", 2, 4, FEARG_1, arg4_match_func, ret_number, f_matchend}, {"matchfuzzy", 2, 3, FEARG_1, arg3_list_string_dict, ret_list_string, f_matchfuzzy}, {"matchfuzzypos", 2, 3, FEARG_1, arg3_list_string_dict, ret_list_any, f_matchfuzzypos}, ! {"matchlist", 2, 4, FEARG_1, arg4_match_func, ret_list_string, f_matchlist}, ! {"matchstr", 2, 4, FEARG_1, arg4_match_func, ret_string, f_matchstr}, ! {"matchstrpos", 2, 4, FEARG_1, arg4_match_func, ret_list_any, f_matchstrpos}, {"max", 1, 1, FEARG_1, arg1_list_or_dict, ret_number, f_max}, --- 1618,1634 ---- ret_list_string, f_matcharg}, {"matchdelete", 1, 2, FEARG_1, arg2_number, ret_number_bool, f_matchdelete}, ! {"matchend", 2, 4, FEARG_1, arg24_match_func, ret_number, f_matchend}, {"matchfuzzy", 2, 3, FEARG_1, arg3_list_string_dict, ret_list_string, f_matchfuzzy}, {"matchfuzzypos", 2, 3, FEARG_1, arg3_list_string_dict, ret_list_any, f_matchfuzzypos}, ! {"matchlist", 2, 4, FEARG_1, arg24_match_func, ret_list_string, f_matchlist}, ! {"matchstr", 2, 4, FEARG_1, arg24_match_func, ret_string, f_matchstr}, ! {"matchstrpos", 2, 4, FEARG_1, arg24_match_func, ret_list_any, f_matchstrpos}, {"max", 1, 1, FEARG_1, arg1_list_or_dict, ret_number, f_max}, *************** *** 1642,1648 **** }, {"min", 1, 1, FEARG_1, arg1_list_or_dict, ret_number, f_min}, ! {"mkdir", 1, 3, FEARG_1, arg3_string_string_nr, ret_number_bool, f_mkdir}, {"mode", 0, 1, FEARG_1, arg1_bool, ret_string, f_mode}, --- 1642,1648 ---- }, {"min", 1, 1, FEARG_1, arg1_list_or_dict, ret_number, f_min}, ! {"mkdir", 1, 3, FEARG_1, arg3_string_string_number, ret_number_bool, f_mkdir}, {"mode", 0, 1, FEARG_1, arg1_bool, ret_string, f_mode}, *************** *** 1784,1790 **** ret_list_string, f_readdir}, {"readdirex", 1, 3, FEARG_1, arg3_string_any_dict, 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, arg23_reduce, ret_any, f_reduce}, --- 1784,1790 ---- ret_list_string, f_readdir}, {"readdirex", 1, 3, FEARG_1, arg3_string_any_dict, ret_list_dict_any, f_readdirex}, ! {"readfile", 1, 3, FEARG_1, arg3_string_string_number, ret_list_string, f_readfile}, {"reduce", 2, 3, FEARG_1, arg23_reduce, ret_any, f_reduce}, *************** *** 1984,1990 **** }, {"strgetchar", 2, 2, FEARG_1, arg2_string_number, 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}, --- 1984,1990 ---- }, {"strgetchar", 2, 2, FEARG_1, arg2_string_number, ret_number, f_strgetchar}, ! {"stridx", 2, 3, FEARG_1, arg3_string_string_number, ret_number, f_stridx}, {"string", 1, 1, FEARG_1, NULL, ret_string, f_string}, *************** *** 2000,2006 **** 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}, --- 2000,2006 ---- NULL #endif }, ! {"strridx", 2, 3, FEARG_1, arg3_string_string_number, ret_number, f_strridx}, {"strtrans", 1, 1, FEARG_1, arg1_string, ret_string, f_strtrans}, *************** *** 2180,2186 **** 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)}, --- 2180,2186 ---- ret_string, f_toupper}, {"tr", 3, 3, FEARG_1, arg3_string, ret_string, f_tr}, ! {"trim", 1, 3, FEARG_1, arg3_string_string_number, ret_string, f_trim}, {"trunc", 1, 1, FEARG_1, arg1_float_or_nr, ret_float, FLOAT_FUNC(f_trunc)}, *************** *** 2607,2612 **** --- 2607,2617 ---- static void f_and(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() + && (check_for_number_arg(argvars, 0) == FAIL + || check_for_number_arg(argvars, 1) == FAIL)) + return; + rettv->vval.v_number = tv_get_number_chk(&argvars[0], NULL) & tv_get_number_chk(&argvars[1], NULL); } *************** *** 2633,2638 **** --- 2638,2647 ---- { if (balloonEval != NULL) { + if (in_vim9script() + && check_for_string_or_list_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type == VAR_LIST # ifdef FEAT_GUI && !gui.in_use *************** *** 2717,2722 **** --- 2726,2734 ---- #else long boff = 0; + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + boff = tv_get_number(&argvars[0]) - 1; // boff gets -1 on type error if (boff < 0) rettv->vval.v_number = -1; *************** *** 2822,2827 **** --- 2834,2843 ---- pos_T *fp; int fnum = curbuf->b_fnum; + if (in_vim9script() + && check_for_string_or_list_arg(argvars, 0) == FAIL) + return; + fp = var2fpos(&argvars[0], FALSE, &fnum, charcol); if (fp != NULL && fnum == curbuf->b_fnum) { *************** *** 2982,2991 **** int set_curswant = TRUE; if (in_vim9script() ! && ((argvars[0].v_type != VAR_NUMBER ! && argvars[0].v_type != VAR_STRING ! && argvars[0].v_type != VAR_LIST ! && check_for_number_arg(argvars, 0) == FAIL) || check_for_opt_number_arg(argvars, 1) == FAIL || (argvars[1].v_type != VAR_UNKNOWN && check_for_opt_number_arg(argvars, 2) == FAIL))) --- 2998,3004 ---- int set_curswant = TRUE; if (in_vim9script() ! && (check_for_string_or_number_or_list_arg(argvars, 0) == FAIL || check_for_opt_number_arg(argvars, 1) == FAIL || (argvars[1].v_type != VAR_UNKNOWN && check_for_opt_number_arg(argvars, 2) == FAIL))) *************** *** 3071,3076 **** --- 3084,3092 ---- int pid; rettv->vval.v_number = FAIL; + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + pid = (int)tv_get_number(&argvars[0]); if (pid == 0) emsg(_(e_invarg)); *************** *** 3269,3274 **** --- 3285,3295 ---- { char_u buf[NUMBUFLEN]; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_string_arg(argvars, 1) == FAIL)) + return; + rettv->vval.v_string = vim_strsave_escaped(tv_get_string(&argvars[0]), tv_get_string_buf(&argvars[1], buf)); rettv->v_type = VAR_STRING; *************** *** 3282,3287 **** --- 3303,3311 ---- { char_u *s, *p; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + s = tv_get_string_chk(&argvars[0]); if (s != NULL) s = skipwhite(s); *************** *** 3475,3480 **** --- 3499,3509 ---- static void f_execute(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() + && (check_for_string_or_list_arg(argvars, 0) == FAIL + || check_for_opt_string_arg(argvars, 1) == FAIL)) + return; + execute_common(argvars, rettv, 0); } *************** *** 3487,3492 **** --- 3516,3524 ---- char_u *p; int n = FALSE; + if (in_vim9script() && check_for_nonempty_string_arg(argvars, 0) == FAIL) + return; + p = tv_get_string(&argvars[0]); if (*p == '$') // environment variable { *************** *** 3631,3636 **** --- 3663,3671 ---- char_u *cmdstr; char *errormsg = NULL; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_STRING; cmdstr = vim_strsave(tv_get_string(&argvars[0])); *************** *** 3671,3676 **** --- 3706,3716 ---- if (check_secure()) return; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_opt_string_arg(argvars, 1) == FAIL)) + return; + keys = tv_get_string(&argvars[0]); if (argvars[1].v_type != VAR_UNKNOWN) *************** *** 3760,3765 **** --- 3800,3808 ---- static void f_fnameescape(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + rettv->vval.v_string = vim_strsave_fnameescape( tv_get_string(&argvars[0]), FALSE); rettv->v_type = VAR_STRING; *************** *** 4029,4034 **** --- 4072,4080 ---- static void f_garbagecollect(typval_T *argvars, typval_T *rettv UNUSED) { + if (in_vim9script() && check_for_opt_bool_arg(argvars, 0) == FAIL) + return; + // This is postponed until we are back at the toplevel, because we may be // using Lists and Dicts internally. E.g.: ":echo [garbagecollect()]". want_garbage_collect = TRUE; *************** *** 4175,4180 **** --- 4221,4229 ---- if (rettv_list_alloc(rettv) != OK) return; + if (in_vim9script() && check_for_opt_buffer_arg(argvars, 0) == FAIL) + return; + #ifdef FEAT_JUMPLIST if (argvars[0].v_type == VAR_UNKNOWN) buf = curbuf; *************** *** 4292,4297 **** --- 4341,4349 ---- static void f_getcharpos(typval_T *argvars UNUSED, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + getpos_both(argvars, rettv, FALSE, TRUE); } *************** *** 4318,4325 **** f_getenv(typval_T *argvars, typval_T *rettv) { int mustfree = FALSE; ! char_u *p = vim_getenv(tv_get_string(&argvars[0]), &mustfree); if (p == NULL) { rettv->v_type = VAR_SPECIAL; --- 4370,4381 ---- f_getenv(typval_T *argvars, typval_T *rettv) { int mustfree = FALSE; ! char_u *p; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + + p = vim_getenv(tv_get_string(&argvars[0]), &mustfree); if (p == NULL) { rettv->v_type = VAR_SPECIAL; *************** *** 4340,4345 **** --- 4396,4405 ---- { rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; + + if (in_vim9script() && check_for_opt_string_arg(argvars, 0) == FAIL) + return; + #ifdef FEAT_GUI if (gui.in_use) { *************** *** 4385,4390 **** --- 4445,4456 ---- if (rettv_list_alloc(rettv) != OK) return; + if (in_vim9script() + && (check_for_opt_number_arg(argvars, 0) == FAIL + || (argvars[0].v_type != VAR_UNKNOWN + && check_for_opt_number_arg(argvars, 1) == FAIL))) + return; + #ifdef FEAT_JUMPLIST wp = find_tabwin(&argvars[0], &argvars[1], NULL); if (wp == NULL) *************** *** 4433,4444 **** --- 4499,4516 ---- static void f_getcurpos(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + getpos_both(argvars, rettv, TRUE, FALSE); } static void f_getcursorcharpos(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + getpos_both(argvars, rettv, TRUE, TRUE); } *************** *** 4448,4453 **** --- 4520,4528 ---- static void f_getpos(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + getpos_both(argvars, rettv, FALSE, FALSE); } *************** *** 4464,4473 **** int error = FALSE; if (in_vim9script() ! && (check_for_string_arg(argvars, 0) == FAIL ! || check_for_opt_bool_arg(argvars, 1) == FAIL ! || (argvars[1].v_type != VAR_UNKNOWN ! && check_for_opt_bool_arg(argvars, 2) == FAIL))) return; if (argvars[0].v_type != VAR_UNKNOWN) --- 4539,4549 ---- int error = FALSE; if (in_vim9script() ! && (check_for_opt_string_arg(argvars, 0) == FAIL ! || (argvars[0].v_type != VAR_UNKNOWN ! && (check_for_opt_bool_arg(argvars, 1) == FAIL ! || (argvars[1].v_type != VAR_UNKNOWN ! && check_for_opt_bool_arg(argvars, 2) == FAIL))))) return; if (argvars[0].v_type != VAR_UNKNOWN) *************** *** 4526,4531 **** --- 4602,4610 ---- char_u buf[NUMBUFLEN + 2]; long reglen = 0; + if (in_vim9script() && check_for_opt_string_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { strregname = tv_get_string_chk(&argvars[0]); *************** *** 4575,4580 **** --- 4654,4662 ---- if (rettv_dict_alloc(rettv) != OK) return; + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { wp = find_win_by_nr_or_id(&argvars[0]); *************** *** 4591,4596 **** --- 4673,4681 ---- static void f_gettext(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_STRING || argvars[0].vval.v_string == NULL || *argvars[0].vval.v_string == NUL) *************** *** 6023,6028 **** --- 6108,6119 ---- tabpage_T *tp = NULL; win_T *wp = NULL; + if (in_vim9script() + && (check_for_opt_number_arg(argvars, 0) == FAIL + || (argvars[0].v_type != VAR_UNKNOWN + && check_for_opt_number_arg(argvars, 1) == FAIL))) + return; + wp = find_tabwin(&argvars[0], &argvars[1], &tp); // Check for window-local and tab-local directories *************** *** 6074,6079 **** --- 6165,6173 ---- static void f_hlID(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + rettv->vval.v_number = syn_name2id(tv_get_string(&argvars[0])); } *************** *** 6083,6088 **** --- 6177,6185 ---- static void f_hlexists(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + rettv->vval.v_number = highlight_exists(tv_get_string(&argvars[0])); } *************** *** 6214,6219 **** --- 6311,6323 ---- char_u buf[NUMBUFLEN]; char_u *defstr = (char_u *)""; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_opt_string_arg(argvars, 1) == FAIL + || (argvars[1].v_type != VAR_UNKNOWN + && check_for_opt_string_arg(argvars, 2) == FAIL))) + return; + message = tv_get_string_chk(&argvars[0]); if (argvars[1].v_type != VAR_UNKNOWN && (defstr = tv_get_string_buf_chk(&argvars[1], buf)) != NULL) *************** *** 6258,6263 **** --- 6362,6370 ---- if (no_console_input() && !is_not_a_term()) return; #endif + if (in_vim9script() && check_for_list_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_LIST || argvars[0].vval.v_list == NULL) { semsg(_(e_listarg), "inputlist()"); *************** *** 6332,6337 **** --- 6439,6449 ---- static void f_inputsecret(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_opt_string_arg(argvars, 1) == FAIL)) + return; + ++cmdline_star; ++inputsecret_flag; f_input(argvars, rettv); *************** *** 6354,6359 **** --- 6466,6474 ---- static void f_invert(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + rettv->vval.v_number = ~tv_get_number_chk(&argvars[0], NULL); } *************** *** 6585,6590 **** --- 6700,6708 ---- #else linenr_T lnum; + if (in_vim9script() && check_for_lnum_arg(argvars, 0) == FAIL) + return; + lnum = tv_get_lnum(argvars); if (lnum < 1 || lnum > curbuf->b_ml.ml_line_count + 1) rettv->vval.v_number = -1; *************** *** 6712,6720 **** } if (in_vim9script() ! && ((argvars[0].v_type != VAR_STRING ! && argvars[0].v_type != VAR_LIST ! && check_for_string_arg(argvars, 0) == FAIL) || check_for_string_arg(argvars, 1) == FAIL || check_for_opt_number_arg(argvars, 2) == FAIL || (argvars[2].v_type != VAR_UNKNOWN --- 6830,6836 ---- } if (in_vim9script() ! && (check_for_string_or_list_arg(argvars, 0) == FAIL || check_for_string_arg(argvars, 1) == FAIL || check_for_opt_number_arg(argvars, 2) == FAIL || (argvars[2].v_type != VAR_UNKNOWN *************** *** 6947,6952 **** --- 7063,7071 ---- varnumber_T i; int error = FALSE; + if (in_vim9script() && check_for_list_or_dict_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type == VAR_LIST) { list_T *l; *************** *** 7052,7057 **** --- 7171,7180 ---- if (check_restricted() || check_secure()) return; + + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + str = tv_get_string_buf(&argvars[0], buf); do_mzeval(str, rettv); } *************** *** 7078,7083 **** --- 7201,7209 ---- { linenr_T lnum; + if (in_vim9script() && check_for_lnum_arg(argvars, 0) == FAIL) + return; + for (lnum = tv_get_lnum(argvars); ; ++lnum) { if (lnum < 0 || lnum > curbuf->b_ml.ml_line_count) *************** *** 7130,7135 **** --- 7256,7266 ---- static void f_or(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() + && (check_for_number_arg(argvars, 0) == FAIL + || check_for_number_arg(argvars, 1) == FAIL)) + return; + rettv->vval.v_number = tv_get_number_chk(&argvars[0], NULL) | tv_get_number_chk(&argvars[1], NULL); } *************** *** 7144,7149 **** --- 7275,7283 ---- char_u *str; char_u buf[NUMBUFLEN]; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + str = tv_get_string_buf(&argvars[0], buf); do_perleval(str, rettv); } *************** *** 7157,7162 **** --- 7291,7299 ---- { linenr_T lnum; + if (in_vim9script() && check_for_lnum_arg(argvars, 0) == FAIL) + return; + lnum = tv_get_lnum(argvars); if (lnum < 1 || lnum > curbuf->b_ml.ml_line_count) lnum = 0; *************** *** 7241,7246 **** --- 7378,7386 ---- if (check_restricted() || check_secure()) return; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + if (p_pyx == 0) p_pyx = 3; *************** *** 7262,7267 **** --- 7402,7410 ---- if (check_restricted() || check_secure()) return; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + if (p_pyx == 0) p_pyx = 2; *************** *** 7280,7285 **** --- 7423,7431 ---- if (check_restricted() || check_secure()) return; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + # if defined(FEAT_PYTHON) && defined(FEAT_PYTHON3) init_pyxversion(); if (p_pyx == 2) *************** *** 7300,7305 **** --- 7446,7454 ---- static void f_test_srand_seed(typval_T *argvars, typval_T *rettv UNUSED) { + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type == VAR_UNKNOWN) srand_seed_for_testing_is_used = FALSE; else *************** *** 7383,7388 **** --- 7532,7540 ---- listitem_T *lx, *ly, *lz, *lw; UINT32_T x = 0, y, z, w, t, result; + if (in_vim9script() && check_for_opt_list_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type == VAR_UNKNOWN) { // When no argument is given use the global seed list. *************** *** 7449,7454 **** --- 7601,7610 ---- if (rettv_list_alloc(rettv) == FAIL) return; + + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type == VAR_UNKNOWN) { init_srand(&x); *************** *** 7483,7488 **** --- 7639,7651 ---- varnumber_T stride = 1; int error = FALSE; + if (in_vim9script() + && (check_for_number_arg(argvars, 0) == FAIL + || check_for_opt_number_arg(argvars, 1) == FAIL + || (argvars[1].v_type != VAR_UNKNOWN + && check_for_opt_number_arg(argvars, 2) == FAIL))) + return; + start = tv_get_number_chk(&argvars[0], &error); if (argvars[1].v_type == VAR_UNKNOWN) { *************** *** 7551,7556 **** --- 7714,7722 ---- dict_T *dict; list_T *list; + if (in_vim9script() && check_for_opt_string_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { strregname = tv_get_string_chk(&argvars[0]); *************** *** 7645,7654 **** { char_u buf[NUMBUFLEN]; if (check_restricted() || check_secure()) ! rettv->vval.v_number = -1; ! else ! rettv->vval.v_number = vim_rename(tv_get_string(&argvars[0]), tv_get_string_buf(&argvars[1], buf)); } --- 7811,7826 ---- { char_u buf[NUMBUFLEN]; + rettv->vval.v_number = -1; if (check_restricted() || check_secure()) ! return; ! ! if (in_vim9script() ! && (check_for_string_arg(argvars, 0) == FAIL ! || check_for_string_arg(argvars, 1) == FAIL)) ! return; ! ! rettv->vval.v_number = vim_rename(tv_get_string(&argvars[0]), tv_get_string_buf(&argvars[1], buf)); } *************** *** 7666,7675 **** int i; if (in_vim9script() ! && (argvars[0].v_type != VAR_STRING ! && argvars[0].v_type != VAR_NUMBER ! && argvars[0].v_type != VAR_LIST ! && check_for_string_arg(argvars, 0) == FAIL)) return; n = (int)tv_get_number(&argvars[1]); --- 7838,7845 ---- int i; if (in_vim9script() ! && (check_for_string_or_number_or_list_arg(argvars, 0) == FAIL ! || check_for_number_arg(argvars, 1) == FAIL)) return; n = (int)tv_get_number(&argvars[1]); *************** *** 7932,7937 **** --- 8102,8110 ---- char_u *str; char_u buf[NUMBUFLEN]; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + str = tv_get_string_buf(&argvars[0], buf); do_rubyeval(str, rettv); } *************** *** 7947,7952 **** --- 8120,8130 ---- int col; int c; + if (in_vim9script() + && (check_for_number_arg(argvars, 0) == FAIL + || check_for_number_arg(argvars, 1) == FAIL)) + return; + row = (int)tv_get_number_chk(&argvars[0], NULL) - 1; col = (int)tv_get_number_chk(&argvars[1], NULL) - 1; if (row < 0 || row >= screen_Rows *************** *** 7968,7973 **** --- 8146,8156 ---- int off; int c; + if (in_vim9script() + && (check_for_number_arg(argvars, 0) == FAIL + || check_for_number_arg(argvars, 1) == FAIL)) + return; + row = (int)tv_get_number_chk(&argvars[0], NULL) - 1; col = (int)tv_get_number_chk(&argvars[1], NULL) - 1; if (row < 0 || row >= screen_Rows || col < 0 || col >= screen_Columns) *************** *** 7997,8002 **** --- 8180,8191 ---- if (rettv_list_alloc(rettv) == FAIL) return; + + if (in_vim9script() + && (check_for_number_arg(argvars, 0) == FAIL + || check_for_number_arg(argvars, 1) == FAIL)) + return; + row = (int)tv_get_number_chk(&argvars[0], NULL) - 1; col = (int)tv_get_number_chk(&argvars[1], NULL) - 1; if (row < 0 || row >= screen_Rows || col < 0 || col >= screen_Columns) *************** *** 8053,8058 **** --- 8242,8252 ---- rettv->vval.v_string = NULL; rettv->v_type = VAR_STRING; + if (in_vim9script() + && (check_for_number_arg(argvars, 0) == FAIL + || check_for_number_arg(argvars, 1) == FAIL)) + return; + row = (int)tv_get_number_chk(&argvars[0], NULL) - 1; col = (int)tv_get_number_chk(&argvars[1], NULL) - 1; if (row < 0 || row >= screen_Rows || col < 0 || col >= screen_Columns) *************** *** 8515,8520 **** --- 8709,8717 ---- dictitem_T *di; char_u *csearch; + if (in_vim9script() && check_for_dict_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_DICT) { emsg(_(e_dictreq)); *************** *** 8593,8598 **** --- 8790,8801 ---- int mode = 0; rettv->vval.v_number = 0; + + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_string_arg(argvars, 1) == FAIL)) + return; + fname = tv_get_string_chk(&argvars[0]); if (fname == NULL) return; *************** *** 8900,8905 **** --- 9103,9111 ---- { char_u *p; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + p = tv_get_string(&argvars[0]); rettv->vval.v_string = vim_strsave( sha256_bytes(p, (int)STRLEN(p), NULL, 0)); *************** *** 8934,8939 **** --- 9140,9148 ---- { rettv->vval.v_number = 0; + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { long col; *************** *** 8958,8963 **** --- 9167,9175 ---- { char_u *s; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_STRING; s = tv_get_string(&argvars[0]); #ifdef FEAT_SPELL *************** *** 8979,8984 **** --- 9191,9199 ---- #ifdef FEAT_SPELL int wo_spell_save = curwin->w_p_spell; + if (in_vim9script() && check_for_opt_string_arg(argvars, 0) == FAIL) + return; + if (!curwin->w_p_spell) { did_set_spelllang(curwin); *************** *** 9298,9303 **** --- 9513,9521 ---- static void f_swapinfo(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + if (rettv_dict_alloc(rettv) == OK) get_b0_dict(tv_get_string(argvars), rettv->vval.v_dict); } *************** *** 9311,9316 **** --- 9529,9538 ---- buf_T *buf; rettv->v_type = VAR_STRING; + + if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) + return; + buf = tv_get_buf(&argvars[0], FALSE); if (buf == NULL || buf->b_ml.ml_mfp == NULL || buf->b_ml.ml_mfp->mf_fname == NULL) *************** *** 9460,9465 **** --- 9682,9690 ---- int id; #ifdef FEAT_SYN_HL + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + id = (int)tv_get_number(&argvars[0]); if (id > 0) *************** *** 9584,9589 **** --- 9809,9817 ---- tabpage_T *tp; win_T *wp = NULL; + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type == VAR_UNKNOWN) wp = firstwin; else *************** *** 9634,9639 **** --- 9862,9872 ---- char_u *fname = NULL; char_u *tag_pattern; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_opt_string_arg(argvars, 1) == FAIL)) + return; + tag_pattern = tv_get_string(&argvars[0]); rettv->vval.v_number = FALSE; *************** *** 9690,9695 **** --- 9923,9932 ---- int fnum = curbuf->b_fnum; int len; + if (in_vim9script() + && check_for_string_or_list_arg(argvars, 0) == FAIL) + return; + fp = var2fpos(&argvars[0], FALSE, &fnum, FALSE); if (fp != NULL && fp->lnum <= curbuf->b_ml.ml_line_count && fnum == curbuf->b_fnum) *************** *** 9718,9723 **** --- 9955,9963 ---- { char_u str[2]; + if (in_vim9script() && check_for_opt_bool_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_STRING; str[0] = curbuf->b_visual_mode_eval; str[1] = NUL; *************** *** 9767,9772 **** --- 10007,10017 ---- static void f_xor(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() + && (check_for_number_arg(argvars, 0) == FAIL + || check_for_number_arg(argvars, 1) == FAIL)) + return; + rettv->vval.v_number = tv_get_number_chk(&argvars[0], NULL) ^ tv_get_number_chk(&argvars[1], NULL); } *** ../vim-8.2.3228/src/evalwindow.c 2021-07-20 17:51:48.243744105 +0200 --- src/evalwindow.c 2021-07-27 21:52:46.418688287 +0200 *************** *** 468,473 **** --- 468,476 ---- if (rettv_list_alloc(rettv) != OK) return; + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { // Information about one tab page *************** *** 504,509 **** --- 507,515 ---- if (rettv_list_alloc(rettv) != OK) return; + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { wparg = win_id2wp(tv_get_number(&argvars[0])); *************** *** 559,564 **** --- 565,574 ---- if (rettv_list_alloc(rettv) == FAIL) return; + + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + #if defined(FEAT_GUI) \ || (defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)) \ || defined(MSWIN) *************** *** 624,629 **** --- 634,642 ---- int nr = 1; char_u *arg; + if (in_vim9script() && check_for_opt_string_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { arg = tv_get_string_chk(&argvars[0]); *************** *** 672,680 **** void f_win_execute(typval_T *argvars, typval_T *rettv) { ! int id = (int)tv_get_number(argvars); tabpage_T *tp; ! win_T *wp = win_id2wp_tp(id, &tp); win_T *save_curwin; tabpage_T *save_curtab; --- 685,693 ---- void f_win_execute(typval_T *argvars, typval_T *rettv) { ! int id; tabpage_T *tp; ! win_T *wp; win_T *save_curwin; tabpage_T *save_curtab; *************** *** 682,687 **** --- 695,708 ---- rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; + if (in_vim9script() + && (check_for_number_arg(argvars, 0) == FAIL + || check_for_string_or_list_arg(argvars, 1) == FAIL + || check_for_opt_string_arg(argvars, 2) == FAIL)) + return; + + id = (int)tv_get_number(argvars); + wp = win_id2wp_tp(id, &tp); if (wp != NULL && tp != NULL) { pos_T curpos = wp->w_cursor; *************** *** 705,710 **** --- 726,734 ---- void f_win_findbuf(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + if (rettv_list_alloc(rettv) != FAIL) win_findbuf(argvars, rettv->vval.v_list); } *************** *** 715,720 **** --- 739,750 ---- void f_win_getid(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() + && (check_for_opt_number_arg(argvars, 0) == FAIL + || (argvars[0].v_type != VAR_UNKNOWN + && check_for_opt_number_arg(argvars, 1) == FAIL))) + return; + rettv->vval.v_number = win_getid(argvars); } *************** *** 726,733 **** { win_T *wp; tabpage_T *tp; ! int id = tv_get_number(&argvars[0]); #ifdef FEAT_CMDWIN if (cmdwin_type != 0) { --- 756,767 ---- { win_T *wp; tabpage_T *tp; ! int id; ! ! if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) ! return; + id = tv_get_number(&argvars[0]); #ifdef FEAT_CMDWIN if (cmdwin_type != 0) { *************** *** 750,755 **** --- 784,792 ---- void f_win_id2tabwin(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + if (rettv_list_alloc(rettv) != FAIL) win_id2tabwin(argvars, rettv->vval.v_list); } *************** *** 760,765 **** --- 797,805 ---- void f_win_id2win(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + rettv->vval.v_number = win_id2win(argvars); } *************** *** 774,779 **** --- 814,822 ---- if (rettv_list_alloc(rettv) == FAIL) return; + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + wp = find_win_by_nr_or_id(&argvars[0]); list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_winrow + 1); list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_wincol + 1); *************** *** 883,888 **** --- 926,935 ---- rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; + + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { wp = find_win_by_nr_or_id(&argvars[0]); *************** *** 934,939 **** --- 981,989 ---- { win_T *wp; + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + wp = find_win_by_nr_or_id(&argvars[0]); if (wp == NULL) rettv->vval.v_number = -1; *************** *** 959,964 **** --- 1009,1017 ---- { win_T *wp; + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + wp = find_win_by_nr_or_id(&argvars[0]); if (wp == NULL) rettv->vval.v_number = -1; *************** *** 977,982 **** --- 1030,1038 ---- if (rettv_list_alloc(rettv) != OK) return; + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type == VAR_UNKNOWN) tp = curtab; else *************** *** 1007,1012 **** --- 1063,1071 ---- { int nr = 1; + if (in_vim9script() && check_for_opt_string_arg(argvars, 0) == FAIL) + return; + nr = get_winnr(curtab, &argvars[0]); rettv->vval.v_number = nr; } *************** *** 1052,1057 **** --- 1111,1119 ---- { dict_T *dict; + if (in_vim9script() && check_for_dict_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_DICT || (dict = argvars[0].vval.v_dict) == NULL) emsg(_(e_invarg)); *************** *** 1129,1134 **** --- 1191,1199 ---- { win_T *wp; + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + wp = find_win_by_nr_or_id(&argvars[0]); if (wp == NULL) rettv->vval.v_number = -1; *** ../vim-8.2.3228/src/ex_docmd.c 2021-07-22 18:48:45.456351455 +0200 --- src/ex_docmd.c 2021-07-27 21:52:46.418688287 +0200 *************** *** 3808,3818 **** f_fullcommand(typval_T *argvars, typval_T *rettv) { exarg_T ea; ! char_u *name = argvars[0].vval.v_string; char_u *p; rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; if (name == NULL) return; --- 3808,3823 ---- f_fullcommand(typval_T *argvars, typval_T *rettv) { exarg_T ea; ! char_u *name; char_u *p; rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; + + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + + name = argvars[0].vval.v_string; if (name == NULL) return; *** ../vim-8.2.3228/src/ex_getln.c 2021-07-26 21:11:27.805521168 +0200 --- src/ex_getln.c 2021-07-27 21:52:46.418688287 +0200 *************** *** 4061,4068 **** void f_setcmdpos(typval_T *argvars, typval_T *rettv) { ! int pos = (int)tv_get_number(&argvars[0]) - 1; if (pos >= 0) rettv->vval.v_number = set_cmdline_pos(pos); } --- 4061,4072 ---- void f_setcmdpos(typval_T *argvars, typval_T *rettv) { ! int pos; + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + + pos = (int)tv_get_number(&argvars[0]) - 1; if (pos >= 0) rettv->vval.v_number = set_cmdline_pos(pos); } *************** *** 4517,4523 **** int inputdialog, int secret) { ! char_u *prompt = tv_get_string_chk(&argvars[0]); char_u *p = NULL; int c; char_u buf[NUMBUFLEN]; --- 4521,4527 ---- int inputdialog, int secret) { ! char_u *prompt; char_u *p = NULL; int c; char_u buf[NUMBUFLEN]; *************** *** 4531,4536 **** --- 4535,4549 ---- if (input_busy) return; // this doesn't work recursively. + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_opt_string_arg(argvars, 1) == FAIL + || (argvars[1].v_type != VAR_UNKNOWN + && check_for_opt_string_arg(argvars, 2) == FAIL))) + return; + + prompt = tv_get_string_chk(&argvars[0]); + #ifdef NO_CONSOLE_INPUT // While starting up, there is no place to enter text. When running tests // with --not-a-term we assume feedkeys() will be used. *** ../vim-8.2.3228/src/filepath.c 2021-07-24 21:33:22.391681954 +0200 --- src/filepath.c 2021-07-27 21:52:46.418688287 +0200 *************** *** 834,839 **** --- 834,844 ---- if (check_restricted() || check_secure()) return; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_opt_string_arg(argvars, 1) == FAIL)) + return; + name = tv_get_string(&argvars[0]); if (name == NULL || *name == NUL) { *************** *** 899,904 **** --- 904,910 ---- if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) return; + #ifndef O_NONBLOCK # define O_NONBLOCK 0 #endif *************** *** 946,952 **** rettv->vval.v_string = NULL; rettv->v_type = VAR_STRING; ! if (in_vim9script() && check_for_nonempty_string_arg(argvars, 0) == FAIL) return; #ifdef FEAT_SEARCHPATH --- 952,962 ---- rettv->vval.v_string = NULL; rettv->v_type = VAR_STRING; ! if (in_vim9script() ! && (check_for_nonempty_string_arg(argvars, 0) == FAIL ! || check_for_opt_string_arg(argvars, 1) == FAIL ! || (argvars[1].v_type != VAR_UNKNOWN ! && check_for_opt_number_arg(argvars, 2) == FAIL))) return; #ifdef FEAT_SEARCHPATH *************** *** 1027,1035 **** char_u *fbuf = NULL; char_u buf[NUMBUFLEN]; ! if (in_vim9script() && (check_for_string_arg(argvars, 0) == FAIL ! || check_for_string_arg(argvars, 1) == FAIL)) return; fname = tv_get_string_chk(&argvars[0]); mods = tv_get_string_buf_chk(&argvars[1], buf); if (mods == NULL || fname == NULL) --- 1037,1047 ---- char_u *fbuf = NULL; char_u buf[NUMBUFLEN]; ! if (in_vim9script() ! && (check_for_string_arg(argvars, 0) == FAIL ! || check_for_string_arg(argvars, 1) == FAIL)) return; + fname = tv_get_string_chk(&argvars[0]); mods = tv_get_string_buf_chk(&argvars[1], buf); if (mods == NULL || fname == NULL) *************** *** 1077,1082 **** --- 1089,1100 ---- rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; + if (in_vim9script() + && (check_for_opt_number_arg(argvars, 0) == FAIL + || (argvars[0].v_type != VAR_UNKNOWN + && check_for_opt_number_arg(argvars, 1) == FAIL))) + return; + if (argvars[0].v_type == VAR_NUMBER && argvars[0].vval.v_number == -1 && argvars[1].v_type == VAR_UNKNOWN) *************** *** 1141,1146 **** --- 1159,1165 ---- if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) return; + fname = tv_get_string(&argvars[0]); rettv->v_type = VAR_STRING; *************** *** 1190,1195 **** --- 1209,1215 ---- if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) return; + fname = tv_get_string(&argvars[0]); if (mch_stat((char *)fname, &st) >= 0) rettv->vval.v_number = (varnumber_T)st.st_mtime; *************** *** 1236,1241 **** --- 1256,1262 ---- if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) return; + fname = tv_get_string(&argvars[0]); rettv->v_type = VAR_STRING; *************** *** 1311,1319 **** f_glob2regpat(typval_T *argvars, typval_T *rettv) { char_u buf[NUMBUFLEN]; ! char_u *pat = tv_get_string_buf_chk_strict(&argvars[0], buf, ! in_vim9script()); rettv->v_type = VAR_STRING; rettv->vval.v_string = (pat == NULL) ? NULL : file_pat_to_reg_pat(pat, NULL, NULL, FALSE); --- 1332,1343 ---- f_glob2regpat(typval_T *argvars, typval_T *rettv) { char_u buf[NUMBUFLEN]; ! char_u *pat; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + + pat = tv_get_string_buf_chk_strict(&argvars[0], buf, in_vim9script()); rettv->v_type = VAR_STRING; rettv->vval.v_string = (pat == NULL) ? NULL : file_pat_to_reg_pat(pat, NULL, NULL, FALSE); *************** *** 1382,1387 **** --- 1406,1414 ---- void f_isdirectory(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + rettv->vval.v_number = mch_isdir(tv_get_string(&argvars[0])); } *************** *** 1429,1434 **** --- 1456,1468 ---- if (check_restricted() || check_secure()) return; + if (in_vim9script() + && (check_for_nonempty_string_arg(argvars, 0) == FAIL + || check_for_opt_string_arg(argvars, 1) == FAIL + || (argvars[1].v_type != VAR_UNKNOWN + && check_for_opt_number_arg(argvars, 2) == FAIL))) + return; + dir = tv_get_string_buf(&argvars[0], buf); if (*dir == NUL) return; *************** *** 1919,1924 **** --- 1953,1961 ---- void f_readblob(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + read_file_or_blob(argvars, rettv, TRUE); } *************** *** 1928,1933 **** --- 1965,1977 ---- void f_readfile(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() + && (check_for_nonempty_string_arg(argvars, 0) == FAIL + || check_for_opt_string_arg(argvars, 1) == FAIL + || (argvars[1].v_type != VAR_UNKNOWN + && check_for_opt_number_arg(argvars, 2) == FAIL))) + return; + read_file_or_blob(argvars, rettv, FALSE); } *************** *** 1942,1947 **** --- 1986,1994 ---- char_u *buf = NULL; #endif + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + p = tv_get_string(&argvars[0]); #ifdef FEAT_SHORTCUT { *************** *** 2497,2502 **** --- 2544,2554 ---- char_u *initdir; char_u buf[NUMBUFLEN]; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_string_arg(argvars, 1) == FAIL)) + return; + title = tv_get_string_chk(&argvars[0]); initdir = tv_get_string_buf_chk(&argvars[1], buf); *** ../vim-8.2.3228/src/findfile.c 2021-07-25 15:08:02.529317394 +0200 --- src/findfile.c 2021-07-27 21:52:46.418688287 +0200 *************** *** 2857,2862 **** --- 2857,2865 ---- { char_u *p; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + p = tv_get_string_strict(&argvars[0]); rettv->vval.v_string = vim_strsave(p); simplify_filename(rettv->vval.v_string); // simplify in place *** ../vim-8.2.3228/src/float.c 2021-06-06 14:14:35.348774346 +0200 --- src/float.c 2021-07-27 21:52:46.418688287 +0200 *************** *** 82,87 **** --- 82,90 ---- void f_abs(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type == VAR_FLOAT) { rettv->v_type = VAR_FLOAT; *************** *** 110,115 **** --- 113,121 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = acos(f); *************** *** 125,130 **** --- 131,139 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = asin(f); *************** *** 140,145 **** --- 149,157 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = atan(f); *************** *** 155,160 **** --- 167,177 ---- { float_T fx = 0.0, fy = 0.0; + if (in_vim9script() + && (check_for_float_or_nr_arg(argvars, 0) == FAIL + || check_for_float_or_nr_arg(argvars, 1) == FAIL)) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &fx) == OK && get_float_arg(&argvars[1], &fy) == OK) *************** *** 171,176 **** --- 188,196 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = ceil(f); *************** *** 186,191 **** --- 206,214 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = cos(f); *************** *** 201,206 **** --- 224,232 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = cosh(f); *************** *** 216,221 **** --- 242,250 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = exp(f); *************** *** 231,236 **** --- 260,268 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + if (get_float_arg(argvars, &f) == OK) { if (f <= (float_T)-VARNUM_MAX + DBL_EPSILON) *************** *** 250,255 **** --- 282,290 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = floor(f); *************** *** 265,270 **** --- 300,310 ---- { float_T fx = 0.0, fy = 0.0; + if (in_vim9script() + && (check_for_float_or_nr_arg(argvars, 0) == FAIL + || check_for_float_or_nr_arg(argvars, 1) == FAIL)) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &fx) == OK && get_float_arg(&argvars[1], &fy) == OK) *************** *** 280,285 **** --- 320,328 ---- void f_isinf(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type == VAR_FLOAT && isinf(argvars[0].vval.v_float)) rettv->vval.v_number = argvars[0].vval.v_float > 0.0 ? 1 : -1; } *************** *** 290,295 **** --- 333,341 ---- void f_isnan(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->vval.v_number = argvars[0].v_type == VAR_FLOAT && isnan(argvars[0].vval.v_float); } *************** *** 303,308 **** --- 349,357 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = log(f); *************** *** 318,323 **** --- 367,375 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = log10(f); *************** *** 333,338 **** --- 385,395 ---- { float_T fx = 0.0, fy = 0.0; + if (in_vim9script() + && (check_for_float_or_nr_arg(argvars, 0) == FAIL + || check_for_float_or_nr_arg(argvars, 1) == FAIL)) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &fx) == OK && get_float_arg(&argvars[1], &fy) == OK) *************** *** 359,364 **** --- 416,424 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = vim_round(f); *************** *** 374,379 **** --- 434,442 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = sin(f); *************** *** 389,394 **** --- 452,460 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = sinh(f); *************** *** 404,409 **** --- 470,478 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = sqrt(f); *************** *** 417,424 **** void f_str2float(typval_T *argvars, typval_T *rettv) { ! char_u *p = skipwhite(tv_get_string_strict(&argvars[0])); ! int isneg = (*p == '-'); if (*p == '+' || *p == '-') p = skipwhite(p + 1); --- 486,499 ---- void f_str2float(typval_T *argvars, typval_T *rettv) { ! char_u *p; ! int isneg; ! ! if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) ! return; ! ! p = skipwhite(tv_get_string_strict(&argvars[0])); ! isneg = (*p == '-'); if (*p == '+' || *p == '-') p = skipwhite(p + 1); *************** *** 436,441 **** --- 511,519 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = tan(f); *************** *** 451,456 **** --- 529,537 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) rettv->vval.v_float = tanh(f); *************** *** 466,471 **** --- 547,555 ---- { float_T f = 0.0; + if (in_vim9script() && check_for_float_or_nr_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_FLOAT; if (get_float_arg(argvars, &f) == OK) // trunc() is not in C90, use floor() or ceil() instead. *** ../vim-8.2.3228/src/fold.c 2021-06-27 22:03:28.641707728 +0200 --- src/fold.c 2021-07-27 21:52:46.418688287 +0200 *************** *** 3658,3663 **** --- 3658,3666 ---- linenr_T lnum; linenr_T first, last; + if (in_vim9script() && check_for_lnum_arg(argvars, 0) == FAIL) + return; + lnum = tv_get_lnum(argvars); if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) { *************** *** 3701,3706 **** --- 3704,3712 ---- # ifdef FEAT_FOLDING linenr_T lnum; + if (in_vim9script() && check_for_lnum_arg(argvars, 0) == FAIL) + return; + lnum = tv_get_lnum(argvars); if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) rettv->vval.v_number = foldLevel(lnum); *************** *** 3789,3794 **** --- 3795,3804 ---- rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; + + if (in_vim9script() && check_for_lnum_arg(argvars, 0) == FAIL) + return; + # ifdef FEAT_FOLDING if (entered) return; // reject recursive use *** ../vim-8.2.3228/src/getchar.c 2021-06-27 22:03:28.641707728 +0200 --- src/getchar.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 2025,2030 **** --- 2025,2033 ---- varnumber_T n; int error = FALSE; + if (in_vim9script() && check_for_opt_bool_arg(argvars, 0) == FAIL) + return; + #ifdef MESSAGE_QUEUE // vpeekc() used to check for messages, but that caused problems, invoking // a callback where it was not expected. Some plugins use getchar(1) in a *** ../vim-8.2.3228/src/indent.c 2021-07-22 11:46:55.502419535 +0200 --- src/indent.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 2098,2103 **** --- 2098,2106 ---- { linenr_T lnum; + if (in_vim9script() && check_for_lnum_arg(argvars, 0) == FAIL) + return; + lnum = tv_get_lnum(argvars); if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) rettv->vval.v_number = get_indent_lnum(lnum); *************** *** 2115,2120 **** --- 2118,2126 ---- pos_T pos; linenr_T lnum; + if (in_vim9script() && check_for_lnum_arg(argvars, 0) == FAIL) + return; + pos = curwin->w_cursor; lnum = tv_get_lnum(argvars); if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) *** ../vim-8.2.3228/src/insexpand.c 2021-07-20 17:51:48.243744105 +0200 --- src/insexpand.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 2473,2482 **** void f_complete_add(typval_T *argvars, typval_T *rettv) { ! if (in_vim9script() ! && (argvars[0].v_type != VAR_DICT ! && argvars[0].v_type != VAR_STRING ! && check_for_string_arg(argvars, 0) == FAIL)) return; rettv->vval.v_number = ins_compl_add_tv(&argvars[0], 0, FALSE); --- 2473,2479 ---- void f_complete_add(typval_T *argvars, typval_T *rettv) { ! if (in_vim9script() && check_for_string_or_dict_arg(argvars, 0) == FAIL) return; rettv->vval.v_number = ins_compl_add_tv(&argvars[0], 0, FALSE); *************** *** 2666,2671 **** --- 2663,2671 ---- if (rettv_dict_alloc(rettv) != OK) return; + if (in_vim9script() && check_for_opt_list_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { if (argvars[0].v_type != VAR_LIST) *** ../vim-8.2.3228/src/job.c 2021-07-24 16:16:11.542239515 +0200 --- src/job.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 1714,1719 **** --- 1714,1722 ---- rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; + if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) + return; + buf = tv_get_buf_from_arg(&argvars[0]); if (buf == NULL) return; *************** *** 1776,1783 **** void f_job_getchannel(typval_T *argvars, typval_T *rettv) { ! job_T *job = get_job_arg(&argvars[0]); if (job != NULL) { rettv->v_type = VAR_CHANNEL; --- 1779,1790 ---- void f_job_getchannel(typval_T *argvars, typval_T *rettv) { ! job_T *job; ! ! if (in_vim9script() && check_for_job_arg(argvars, 0) == FAIL) ! return; + job = get_job_arg(&argvars[0]); if (job != NULL) { rettv->v_type = VAR_CHANNEL; *************** *** 1864,1873 **** void f_job_info(typval_T *argvars, typval_T *rettv) { if (argvars[0].v_type != VAR_UNKNOWN) { ! job_T *job = get_job_arg(&argvars[0]); if (job != NULL && rettv_dict_alloc(rettv) != FAIL) job_info(job, rettv->vval.v_dict); } --- 1871,1884 ---- void f_job_info(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_opt_job_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { ! job_T *job; + job = get_job_arg(&argvars[0]); if (job != NULL && rettv_dict_alloc(rettv) != FAIL) job_info(job, rettv->vval.v_dict); } *************** *** 1922,1927 **** --- 1933,1941 ---- void f_job_status(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_job_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type == VAR_JOB && argvars[0].vval.v_job == NULL) { // A job that never started returns "fail". *** ../vim-8.2.3228/src/json.c 2021-06-06 14:14:35.352774336 +0200 --- src/json.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 1156,1161 **** --- 1156,1164 ---- { js_read_T reader; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + reader.js_buf = tv_get_string(&argvars[0]); reader.js_fill = NULL; reader.js_used = 0; *************** *** 1181,1186 **** --- 1184,1192 ---- { js_read_T reader; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + reader.js_buf = tv_get_string(&argvars[0]); reader.js_fill = NULL; reader.js_used = 0; *** ../vim-8.2.3228/src/list.c 2021-07-23 20:37:52.022322433 +0200 --- src/list.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 2528,2537 **** int error = FALSE; if (in_vim9script() ! && ((argvars[0].v_type != VAR_STRING ! && argvars[0].v_type != VAR_LIST ! && argvars[0].v_type != VAR_DICT ! && check_for_string_arg(argvars, 0) == FAIL) || check_for_opt_bool_arg(argvars, 2) == FAIL || (argvars[2].v_type != VAR_UNKNOWN && check_for_opt_number_arg(argvars, 3) == FAIL))) --- 2528,2534 ---- int error = FALSE; if (in_vim9script() ! && (check_for_string_or_list_or_dict_arg(argvars, 0) == FAIL || check_for_opt_bool_arg(argvars, 2) == FAIL || (argvars[2].v_type != VAR_UNKNOWN && check_for_opt_number_arg(argvars, 3) == FAIL))) *** ../vim-8.2.3228/src/mark.c 2021-06-27 22:03:28.645707721 +0200 --- src/mark.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 1510,1515 **** --- 1510,1518 ---- if (rettv_list_alloc(rettv) != OK) return; + if (in_vim9script() && check_for_opt_buffer_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type == VAR_UNKNOWN) { get_global_marks(rettv->vval.v_list); *** ../vim-8.2.3228/src/match.c 2021-07-23 20:37:52.022322433 +0200 --- src/match.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 959,966 **** f_clearmatches(typval_T *argvars UNUSED, typval_T *rettv UNUSED) { #ifdef FEAT_SEARCH_EXTRA ! win_T *win = get_optional_window(argvars, 0); if (win != NULL) clear_matches(win); #endif --- 959,970 ---- f_clearmatches(typval_T *argvars UNUSED, typval_T *rettv UNUSED) { #ifdef FEAT_SEARCH_EXTRA ! win_T *win; + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + + win = get_optional_window(argvars, 0); if (win != NULL) clear_matches(win); #endif *************** *** 976,983 **** dict_T *dict; matchitem_T *cur; int i; ! win_T *win = get_optional_window(argvars, 0); if (rettv_list_alloc(rettv) == FAIL || win == NULL) return; --- 980,991 ---- dict_T *dict; matchitem_T *cur; int i; ! win_T *win; + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + + win = get_optional_window(argvars, 0); if (rettv_list_alloc(rettv) == FAIL || win == NULL) return; *************** *** 1288,1296 **** if (rettv_list_alloc(rettv) == OK) { # ifdef FEAT_SEARCH_EXTRA ! int id = (int)tv_get_number(&argvars[0]); matchitem_T *m; if (id >= 1 && id <= 3) { if ((m = (matchitem_T *)get_match(curwin, id)) != NULL) --- 1296,1308 ---- if (rettv_list_alloc(rettv) == OK) { # ifdef FEAT_SEARCH_EXTRA ! int id; matchitem_T *m; + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + + id = (int)tv_get_number(&argvars[0]); if (id >= 1 && id <= 3) { if ((m = (matchitem_T *)get_match(curwin, id)) != NULL) *************** *** 1316,1323 **** f_matchdelete(typval_T *argvars UNUSED, typval_T *rettv UNUSED) { # ifdef FEAT_SEARCH_EXTRA ! win_T *win = get_optional_window(argvars, 1); if (win == NULL) rettv->vval.v_number = -1; else --- 1328,1341 ---- f_matchdelete(typval_T *argvars UNUSED, typval_T *rettv UNUSED) { # ifdef FEAT_SEARCH_EXTRA ! win_T *win; ! ! if (in_vim9script() ! && (check_for_number_arg(argvars, 0) == FAIL ! || check_for_opt_number_arg(argvars, 1) == FAIL)) ! return; + win = get_optional_window(argvars, 1); if (win == NULL) rettv->vval.v_number = -1; else *** ../vim-8.2.3228/src/mbyte.c 2021-07-24 13:57:25.481296527 +0200 --- src/mbyte.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 4977,4982 **** --- 4977,4988 ---- rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_string_arg(argvars, 1) == FAIL + || check_for_string_arg(argvars, 2) == FAIL)) + return; + str = tv_get_string(&argvars[0]); from = enc_canonize(enc_skip(tv_get_string_buf(&argvars[1], buf1))); to = enc_canonize(enc_skip(tv_get_string_buf(&argvars[2], buf2))); *************** *** 5505,5510 **** --- 5511,5519 ---- listitem_T **ptrs; cw_interval_T *table; + if (in_vim9script() && check_for_list_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_LIST || argvars[0].vval.v_list == NULL) { emsg(_(e_listreq)); *** ../vim-8.2.3228/src/menu.c 2021-06-02 13:28:11.435120452 +0200 --- src/menu.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 2941,2946 **** --- 2941,2951 ---- return; retdict = rettv->vval.v_dict; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_opt_string_arg(argvars, 1) == FAIL)) + return; + menu_name = tv_get_string_chk(&argvars[0]); if (menu_name == NULL) return; *** ../vim-8.2.3228/src/misc1.c 2021-07-23 20:37:52.022322433 +0200 --- src/misc1.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 632,637 **** --- 632,640 ---- { char_u buf[4]; + if (in_vim9script() && check_for_opt_bool_arg(argvars, 0) == FAIL) + return; + CLEAR_FIELD(buf); if (time_for_testing == 93784) *************** *** 733,738 **** --- 736,744 ---- char_u *include = NULL; int i; + if (in_vim9script() && check_for_opt_string_arg(argvars, 0) == FAIL) + return; + ga_init2(&ga, 1, 20); if (argvars[0].v_type != VAR_UNKNOWN) include = tv_get_string(&argvars[0]); *************** *** 2353,2359 **** if (in_vim9script() && (check_for_string_arg(argvars, 0) == FAIL ! || check_for_opt_string_or_number_arg(argvars, 1) == FAIL)) return; if (argvars[1].v_type != VAR_UNKNOWN) --- 2359,2365 ---- if (in_vim9script() && (check_for_string_arg(argvars, 0) == FAIL ! || check_for_string_or_number_or_list_arg(argvars, 1) == FAIL)) return; if (argvars[1].v_type != VAR_UNKNOWN) *** ../vim-8.2.3228/src/move.c 2021-07-21 18:04:53.343910544 +0200 --- src/move.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 1286,1291 **** --- 1286,1297 ---- return; dict = rettv->vval.v_dict; + if (in_vim9script() + && (check_for_number_arg(argvars, 0) == FAIL + || check_for_number_arg(argvars, 1) == FAIL + || check_for_number_arg(argvars, 2) == FAIL)) + return; + wp = find_win_by_nr_or_id(&argvars[0]); if (wp == NULL) return; *** ../vim-8.2.3228/src/popupwin.c 2021-07-25 15:57:29.218219920 +0200 --- src/popupwin.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 1851,1856 **** --- 1851,1861 ---- int nr; int i; + if (in_vim9script() + && (check_for_string_or_number_or_list_arg(argvars, 0) == FAIL + || check_for_dict_arg(argvars, 1) == FAIL)) + return NULL; + if (argvars != NULL) { // Check that arguments look OK. *************** *** 2141,2146 **** --- 2146,2154 ---- { int force = FALSE; + if (in_vim9script() && check_for_opt_bool_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) force = (int)tv_get_bool(&argvars[0]); close_all_popups(force); *************** *** 2558,2566 **** void f_popup_hide(typval_T *argvars, typval_T *rettv UNUSED) { ! int id = (int)tv_get_number(argvars); ! win_T *wp = find_popup_win(id); if (wp != NULL) popup_hide(wp); } --- 2566,2579 ---- void f_popup_hide(typval_T *argvars, typval_T *rettv UNUSED) { ! int id; ! win_T *wp; + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + + id = (int)tv_get_number(argvars); + wp = find_popup_win(id); if (wp != NULL) popup_hide(wp); } *************** *** 2582,2590 **** void f_popup_show(typval_T *argvars, typval_T *rettv UNUSED) { ! int id = (int)tv_get_number(argvars); ! win_T *wp = find_popup_win(id); if (wp != NULL) { popup_show(wp); --- 2595,2608 ---- void f_popup_show(typval_T *argvars, typval_T *rettv UNUSED) { ! int id; ! win_T *wp; ! ! if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) ! return; + id = (int)tv_get_number(argvars); + wp = find_popup_win(id); if (wp != NULL) { popup_show(wp); *************** *** 2824,2836 **** f_popup_getpos(typval_T *argvars, typval_T *rettv) { dict_T *dict; ! int id = (int)tv_get_number(argvars); ! win_T *wp = find_popup_win(id); int top_extra; int left_extra; if (rettv_dict_alloc(rettv) == OK) { if (wp == NULL) return; // invalid {id} top_extra = popup_top_extra(wp); --- 2842,2859 ---- f_popup_getpos(typval_T *argvars, typval_T *rettv) { dict_T *dict; ! int id; ! win_T *wp; int top_extra; int left_extra; if (rettv_dict_alloc(rettv) == OK) { + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + + id = (int)tv_get_number(argvars); + wp = find_popup_win(id); if (wp == NULL) return; // invalid {id} top_extra = popup_top_extra(wp); *************** *** 2886,2895 **** void f_popup_locate(typval_T *argvars, typval_T *rettv) { ! int row = tv_get_number(&argvars[0]) - 1; ! int col = tv_get_number(&argvars[1]) - 1; win_T *wp; wp = mouse_find_win(&row, &col, FIND_POPUP); if (wp != NULL && WIN_IS_POPUP(wp)) rettv->vval.v_number = wp->w_id; --- 2909,2925 ---- void f_popup_locate(typval_T *argvars, typval_T *rettv) { ! int row; ! int col; win_T *wp; + if (in_vim9script() + && (check_for_number_arg(argvars, 0) == FAIL + || check_for_number_arg(argvars, 1) == FAIL)) + return; + + row = tv_get_number(&argvars[0]) - 1; + col = tv_get_number(&argvars[1]) - 1; wp = mouse_find_win(&row, &col, FIND_POPUP); if (wp != NULL && WIN_IS_POPUP(wp)) rettv->vval.v_number = wp->w_id; *************** *** 3003,3015 **** f_popup_getoptions(typval_T *argvars, typval_T *rettv) { dict_T *dict; ! int id = (int)tv_get_number(argvars); ! win_T *wp = find_popup_win(id); tabpage_T *tp; int i; if (rettv_dict_alloc(rettv) == OK) { if (wp == NULL) return; --- 3033,3050 ---- f_popup_getoptions(typval_T *argvars, typval_T *rettv) { dict_T *dict; ! int id; ! win_T *wp; tabpage_T *tp; int i; if (rettv_dict_alloc(rettv) == OK) { + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + + id = (int)tv_get_number(argvars); + wp = find_popup_win(id); if (wp == NULL) return; *** ../vim-8.2.3228/src/proto/typval.pro 2021-07-25 15:57:29.218219920 +0200 --- src/proto/typval.pro 2021-07-27 21:52:46.422688280 +0200 *************** *** 24,29 **** --- 24,30 ---- int check_for_chan_or_job_arg(typval_T *args, int idx); int check_for_opt_chan_or_job_arg(typval_T *args, int idx); int check_for_job_arg(typval_T *args, int idx); + int check_for_opt_job_arg(typval_T *args, int idx); int check_for_string_or_number_arg(typval_T *args, int idx); int check_for_buffer_arg(typval_T *args, int idx); int check_for_opt_buffer_arg(typval_T *args, int idx); *************** *** 33,41 **** int check_for_string_or_blob_arg(typval_T *args, int idx); int check_for_string_or_list_arg(typval_T *args, int idx); int check_for_opt_string_or_list_arg(typval_T *args, int idx); int check_for_list_or_blob_arg(typval_T *args, int idx); int check_for_list_or_dict_or_blob_arg(typval_T *args, int idx); ! int check_for_buffer_or_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); --- 34,46 ---- int check_for_string_or_blob_arg(typval_T *args, int idx); int check_for_string_or_list_arg(typval_T *args, int idx); int check_for_opt_string_or_list_arg(typval_T *args, int idx); + int check_for_string_or_dict_arg(typval_T *args, int idx); + int check_for_string_or_number_or_list_arg(typval_T *args, int idx); + int check_for_string_or_list_or_dict_arg(typval_T *args, int idx); int check_for_list_or_blob_arg(typval_T *args, int idx); + int check_for_list_or_dict_arg(typval_T *args, int idx); int check_for_list_or_dict_or_blob_arg(typval_T *args, int idx); ! int check_for_opt_buffer_or_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.3228/src/quickfix.c 2021-07-21 22:20:30.066401728 +0200 --- src/quickfix.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 8370,8375 **** --- 8370,8380 ---- # ifdef FEAT_QUICKFIX win_T *wp; + if (in_vim9script() + && (check_for_number_arg(argvars, 0) == FAIL + || check_for_opt_dict_arg(argvars, 1) == FAIL)) + return; + wp = find_win_by_nr_or_id(&argvars[0]); get_qf_loc_list(FALSE, wp, &argvars[1], rettv); # endif *************** *** 8382,8387 **** --- 8387,8395 ---- f_getqflist(typval_T *argvars UNUSED, typval_T *rettv UNUSED) { # ifdef FEAT_QUICKFIX + if (in_vim9script() && check_for_opt_dict_arg(argvars, 0) == FAIL) + return; + get_qf_loc_list(TRUE, NULL, &argvars[0], rettv); # endif } *** ../vim-8.2.3228/src/search.c 2021-07-20 21:07:32.968058851 +0200 --- src/search.c 2021-07-27 21:52:46.422688280 +0200 *************** *** 4111,4116 **** --- 4111,4119 ---- if (rettv_dict_alloc(rettv) == FAIL) return; + if (in_vim9script() && check_for_opt_dict_arg(argvars, 0) == FAIL) + return; + if (shortmess(SHM_SEARCHCOUNT)) // 'shortmess' contains 'S' flag recompute = TRUE; *** ../vim-8.2.3228/src/sign.c 2021-07-23 20:37:52.022322433 +0200 --- src/sign.c 2021-07-27 21:52:46.426688273 +0200 *************** *** 2278,2283 **** --- 2278,2286 ---- if (rettv_list_alloc_id(rettv, aid_sign_getdefined) != OK) return; + if (in_vim9script() && check_for_opt_string_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) *************** *** 2573,2578 **** --- 2576,2584 ---- if (rettv_list_alloc(rettv) != OK) return; + if (in_vim9script() && check_for_list_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_LIST) { emsg(_(e_listreq)); *************** *** 2620,2625 **** --- 2626,2635 ---- { char_u *name; + if (in_vim9script() + && check_for_opt_string_or_list_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type == VAR_LIST && argvars[1].v_type == VAR_UNKNOWN) { // Undefine multiple signs *************** *** 2761,2766 **** --- 2771,2781 ---- rettv->vval.v_number = -1; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_opt_dict_arg(argvars, 1) == FAIL)) + return; + if (argvars[0].v_type != VAR_STRING) { emsg(_(e_invarg)); *************** *** 2792,2797 **** --- 2807,2815 ---- if (rettv_list_alloc(rettv) != OK) return; + if (in_vim9script() && check_for_list_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_LIST) { emsg(_(e_listreq)); *** ../vim-8.2.3228/src/sound.c 2021-07-24 21:33:22.391681954 +0200 --- src/sound.c 2021-07-27 21:52:46.426688273 +0200 *************** *** 246,251 **** --- 246,254 ---- void f_sound_stop(typval_T *argvars, typval_T *rettv UNUSED) { + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + if (context != NULL) ca_context_cancel(context, tv_get_number(&argvars[0])); } *************** *** 427,435 **** void f_sound_stop(typval_T *argvars, typval_T *rettv UNUSED) { ! long id = tv_get_number(&argvars[0]); char buf[32]; vim_snprintf(buf, sizeof(buf), "stop sound%06ld", id); mciSendString(buf, NULL, 0, NULL); } --- 430,442 ---- void f_sound_stop(typval_T *argvars, typval_T *rettv UNUSED) { ! long id; char buf[32]; + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + + id = tv_get_number(&argvars[0]); vim_snprintf(buf, sizeof(buf), "stop sound%06ld", id); mciSendString(buf, NULL, 0, NULL); } *** ../vim-8.2.3228/src/strings.c 2021-07-20 17:51:48.247744104 +0200 --- src/strings.c 2021-07-27 21:52:46.426688273 +0200 *************** *** 853,858 **** --- 853,864 ---- rettv->vval.v_number = -1; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_number_arg(argvars, 1) == FAIL + || check_for_opt_bool_arg(argvars, 2) == FAIL)) + return; + if (argvars[0].v_type != VAR_STRING || argvars[1].v_type != VAR_NUMBER || (argvars[2].v_type != VAR_UNKNOWN && argvars[2].v_type != VAR_NUMBER *************** *** 948,953 **** --- 954,966 ---- int what = 0; int isneg; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_opt_number_arg(argvars, 1) == FAIL + || (argvars[1].v_type != VAR_UNKNOWN + && check_for_opt_bool_arg(argvars, 2) == FAIL))) + return; + if (argvars[1].v_type != VAR_UNKNOWN) { base = (int)tv_get_number(&argvars[1]); *************** *** 1031,1036 **** --- 1044,1055 ---- char_u *pos; int start_idx; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_string_arg(argvars, 1) == FAIL + || check_for_opt_number_arg(argvars, 2) == FAIL)) + return; + needle = tv_get_string_chk(&argvars[1]); save_haystack = haystack = tv_get_string_buf_chk(&argvars[0], buf); rettv->vval.v_number = -1; *************** *** 1076,1081 **** --- 1095,1104 ---- void f_strlen(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() + && check_for_string_or_number_arg(argvars, 0) == FAIL) + return; + rettv->vval.v_number = (varnumber_T)(STRLEN( tv_get_string(&argvars[0]))); } *************** *** 1102,1107 **** --- 1125,1134 ---- void f_strcharlen(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() + && check_for_string_or_number_arg(argvars, 0) == FAIL) + return; + strchar_common(argvars, rettv, TRUE); } *************** *** 1155,1162 **** void f_strwidth(typval_T *argvars, typval_T *rettv) { ! char_u *s = tv_get_string_strict(&argvars[0]); rettv->vval.v_number = (varnumber_T)(mb_string2cells(s, -1)); } --- 1182,1193 ---- void f_strwidth(typval_T *argvars, typval_T *rettv) { ! char_u *s; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + + s = tv_get_string_strict(&argvars[0]); rettv->vval.v_number = (varnumber_T)(mb_string2cells(s, -1)); } *************** *** 1326,1331 **** --- 1357,1368 ---- char_u *lastmatch = NULL; int haystack_len, end_idx; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_string_arg(argvars, 1) == FAIL + || check_for_opt_number_arg(argvars, 2) == FAIL)) + return; + needle = tv_get_string_chk(&argvars[1]); haystack = tv_get_string_buf_chk(&argvars[0], buf); *************** *** 1372,1377 **** --- 1409,1417 ---- void f_strtrans(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_STRING; rettv->vval.v_string = transstr(tv_get_string(&argvars[0])); } *************** *** 1382,1387 **** --- 1422,1430 ---- void f_tolower(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_STRING; rettv->vval.v_string = strlow_save(tv_get_string(&argvars[0])); } *************** *** 1392,1397 **** --- 1435,1443 ---- void f_toupper(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_STRING; rettv->vval.v_string = strup_save(tv_get_string(&argvars[0])); } *************** *** 1417,1422 **** --- 1463,1474 ---- char_u buf2[NUMBUFLEN]; garray_T ga; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_string_arg(argvars, 1) == FAIL + || check_for_string_arg(argvars, 2) == FAIL)) + return; + in_str = tv_get_string(&argvars[0]); fromstr = tv_get_string_buf_chk(&argvars[1], buf); tostr = tv_get_string_buf_chk(&argvars[2], buf2); *************** *** 1517,1523 **** { char_u buf1[NUMBUFLEN]; char_u buf2[NUMBUFLEN]; ! char_u *head = tv_get_string_buf_chk(&argvars[0], buf1); char_u *mask = NULL; char_u *tail; char_u *prev; --- 1569,1575 ---- { char_u buf1[NUMBUFLEN]; char_u buf2[NUMBUFLEN]; ! char_u *head; char_u *mask = NULL; char_u *tail; char_u *prev; *************** *** 1527,1532 **** --- 1579,1593 ---- rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; + + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_opt_string_arg(argvars, 1) == FAIL + || (argvars[1].v_type != VAR_UNKNOWN + && check_for_opt_number_arg(argvars, 2) == FAIL))) + return; + + head = tv_get_string_buf_chk(&argvars[0], buf1); if (head == NULL) return; *** ../vim-8.2.3228/src/terminal.c 2021-07-24 13:57:25.481296527 +0200 --- src/terminal.c 2021-07-27 21:52:46.426688273 +0200 *************** *** 5284,5294 **** 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) --- 5284,5289 ---- *************** *** 5666,5671 **** --- 5661,5671 ---- void f_term_dumpload(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_dict_arg(argvars, 1) == FAIL)) + return; + term_load_dump(argvars, rettv, FALSE); } *************** *** 5675,5682 **** void f_term_getaltscreen(typval_T *argvars, typval_T *rettv) { ! buf_T *buf = term_get_buf(argvars, "term_getaltscreen()"); if (buf == NULL) return; rettv->vval.v_number = buf->b_term->tl_using_altscreen; --- 5675,5686 ---- void f_term_getaltscreen(typval_T *argvars, typval_T *rettv) { ! buf_T *buf; ! ! if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) ! return; + buf = term_get_buf(argvars, "term_getaltscreen()"); if (buf == NULL) return; rettv->vval.v_number = buf->b_term->tl_using_altscreen; *************** *** 5729,5741 **** void f_term_getcursor(typval_T *argvars, typval_T *rettv) { ! buf_T *buf = term_get_buf(argvars, "term_getcursor()"); term_T *term; list_T *l; dict_T *d; if (rettv_list_alloc(rettv) == FAIL) return; if (buf == NULL) return; term = buf->b_term; --- 5733,5750 ---- void f_term_getcursor(typval_T *argvars, typval_T *rettv) { ! buf_T *buf; term_T *term; list_T *l; dict_T *d; if (rettv_list_alloc(rettv) == FAIL) return; + + if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) + return; + + buf = term_get_buf(argvars, "term_getcursor()"); if (buf == NULL) return; term = buf->b_term; *************** *** 5762,5769 **** void f_term_getjob(typval_T *argvars, typval_T *rettv) { ! buf_T *buf = term_get_buf(argvars, "term_getjob()"); if (buf == NULL) { rettv->v_type = VAR_SPECIAL; --- 5771,5782 ---- void f_term_getjob(typval_T *argvars, typval_T *rettv) { ! buf_T *buf; ! ! if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) ! return; + buf = term_get_buf(argvars, "term_getjob()"); if (buf == NULL) { rettv->v_type = VAR_SPECIAL; *************** *** 5847,5854 **** void f_term_getscrolled(typval_T *argvars, typval_T *rettv) { ! buf_T *buf = term_get_buf(argvars, "term_getscrolled()"); if (buf == NULL) return; rettv->vval.v_number = buf->b_term->tl_scrollback_scrolled; --- 5860,5871 ---- void f_term_getscrolled(typval_T *argvars, typval_T *rettv) { ! buf_T *buf; ! ! if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) ! return; + buf = term_get_buf(argvars, "term_getscrolled()"); if (buf == NULL) return; rettv->vval.v_number = buf->b_term->tl_scrollback_scrolled; *************** *** 5860,5870 **** void f_term_getsize(typval_T *argvars, typval_T *rettv) { ! buf_T *buf = term_get_buf(argvars, "term_getsize()"); list_T *l; if (rettv_list_alloc(rettv) == FAIL) return; if (buf == NULL) return; --- 5877,5892 ---- void f_term_getsize(typval_T *argvars, typval_T *rettv) { ! buf_T *buf; list_T *l; if (rettv_list_alloc(rettv) == FAIL) return; + + if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) + return; + + buf = term_get_buf(argvars, "term_getsize()"); if (buf == NULL) return; *************** *** 5916,5926 **** void f_term_getstatus(typval_T *argvars, typval_T *rettv) { ! buf_T *buf = term_get_buf(argvars, "term_getstatus()"); term_T *term; char_u val[100]; rettv->v_type = VAR_STRING; if (buf == NULL) return; term = buf->b_term; --- 5938,5953 ---- void f_term_getstatus(typval_T *argvars, typval_T *rettv) { ! buf_T *buf; term_T *term; char_u val[100]; rettv->v_type = VAR_STRING; + + if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) + return; + + buf = term_get_buf(argvars, "term_getstatus()"); if (buf == NULL) return; term = buf->b_term; *************** *** 5940,5948 **** void f_term_gettitle(typval_T *argvars, typval_T *rettv) { ! buf_T *buf = term_get_buf(argvars, "term_gettitle()"); rettv->v_type = VAR_STRING; if (buf == NULL) return; --- 5967,5980 ---- void f_term_gettitle(typval_T *argvars, typval_T *rettv) { ! buf_T *buf; rettv->v_type = VAR_STRING; + + if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) + return; + + buf = term_get_buf(argvars, "term_gettitle()"); if (buf == NULL) return; *************** *** 6179,6185 **** void f_term_getansicolors(typval_T *argvars, typval_T *rettv) { ! buf_T *buf = term_get_buf(argvars, "term_getansicolors()"); term_T *term; VTermState *state; VTermColor color; --- 6211,6217 ---- void f_term_getansicolors(typval_T *argvars, typval_T *rettv) { ! buf_T *buf; term_T *term; VTermState *state; VTermColor color; *************** *** 6190,6195 **** --- 6222,6231 ---- if (rettv_list_alloc(rettv) == FAIL) return; + if (in_vim9script() && check_for_buffer_arg(argvars, 0) == FAIL) + return; + + buf = term_get_buf(argvars, "term_getansicolors()"); if (buf == NULL) return; term = buf->b_term; *************** *** 6218,6226 **** term_T *term; if (in_vim9script() ! && (check_for_opt_buffer_arg(argvars, 0) == FAIL ! || (argvars[0].v_type != VAR_UNKNOWN ! && check_for_opt_list_arg(argvars, 1) == FAIL))) return; buf = term_get_buf(argvars, "term_setansicolors()"); --- 6254,6261 ---- term_T *term; if (in_vim9script() ! && (check_for_buffer_arg(argvars, 0) == FAIL ! || check_for_list_arg(argvars, 1) == FAIL)) return; buf = term_get_buf(argvars, "term_setansicolors()"); *** ../vim-8.2.3228/src/testdir/test_assert.vim 2021-07-25 15:57:29.218219920 +0200 --- src/testdir/test_assert.vim 2021-07-27 21:52:46.426688273 +0200 *************** *** 268,274 **** catch let exp = v:exception endtry ! call assert_match("E1174: String required for argument 2", exp) try call assert_equal(1, assert_fails('xxx', 'E492', '', 'burp')) --- 268,274 ---- catch let exp = v:exception endtry ! call assert_match("E1222: String or List required for argument 2", exp) try call assert_equal(1, assert_fails('xxx', 'E492', '', 'burp')) *** ../vim-8.2.3228/src/testdir/test_blob.vim 2021-07-23 20:37:52.022322433 +0200 --- src/testdir/test_blob.vim 2021-07-27 21:52:46.426688273 +0200 *************** *** 363,369 **** VAR b = 0z0011 call add("", 0x01) END ! call CheckLegacyAndVim9Failure(lines, ['E897:', 'E1013:', 'E1211:']) let lines =<< trim END add(test_null_blob(), 0x22) --- 363,369 ---- VAR b = 0z0011 call add("", 0x01) END ! call CheckLegacyAndVim9Failure(lines, ['E897:', 'E1013:', 'E1226:']) let lines =<< trim END add(test_null_blob(), 0x22) *** ../vim-8.2.3228/src/testdir/test_execute_func.vim 2021-06-20 15:03:12.215348932 +0200 --- src/testdir/test_execute_func.vim 2021-07-27 21:52:46.426688273 +0200 *************** *** 40,46 **** if has('float') call assert_fails('call execute(3.4)', 'E492:') call assert_equal("\nx", execute("echo \"x\"", 3.4)) ! call CheckDefExecAndScriptFailure2(['execute("echo \"x\"", 3.4)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E806:') endif endfunc --- 40,46 ---- if has('float') call assert_fails('call execute(3.4)', 'E492:') call assert_equal("\nx", execute("echo \"x\"", 3.4)) ! call CheckDefExecAndScriptFailure2(['execute("echo \"x\"", 3.4)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1174:') endif endfunc *** ../vim-8.2.3228/src/testdir/test_float_func.vim 2021-06-06 14:14:35.352774336 +0200 --- src/testdir/test_float_func.vim 2021-07-27 21:52:46.426688273 +0200 *************** *** 240,247 **** call assert_equal('nan', string(str2float(' nan '))) call assert_equal(1.2, str2float(1.2)) ! call CheckDefExecFailure(['str2float(1.2)'], 'E1013:') ! call CheckScriptFailure(['vim9script', 'str2float(1.2)'], 'E806:') call assert_fails("call str2float([])", 'E730:') call assert_fails("call str2float({})", 'E731:') call assert_fails("call str2float(function('string'))", 'E729:') --- 240,246 ---- call assert_equal('nan', string(str2float(' nan '))) call assert_equal(1.2, str2float(1.2)) ! call CheckDefAndScriptFailure2(['str2float(1.2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') call assert_fails("call str2float([])", 'E730:') call assert_fails("call str2float({})", 'E731:') call assert_fails("call str2float(function('string'))", 'E729:') *** ../vim-8.2.3228/src/testdir/test_functions.vim 2021-07-13 20:32:26.259186757 +0200 --- src/testdir/test_functions.vim 2021-07-27 21:52:46.426688273 +0200 *************** *** 174,181 **** if has('float') call assert_equal(3, strwidth(1.2)) ! call CheckDefFailure(['echo strwidth(1.2)'], 'E1013:') ! call CheckScriptFailure(['vim9script', 'echo strwidth(1.2)'], 'E806:') endif set ambiwidth& --- 174,180 ---- if has('float') call assert_equal(3, strwidth(1.2)) ! call CheckDefAndScriptFailure2(['echo strwidth(1.2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') endif set ambiwidth& *************** *** 242,249 **** call assert_fails('call str2nr({->2})', 'E729:') if has('float') call assert_equal(1, str2nr(1.2)) ! call CheckDefFailure(['echo str2nr(1.2)'], 'E1013:') ! call CheckScriptFailure(['vim9script', 'echo str2nr(1.2)'], 'E806:') endif call assert_fails('call str2nr(10, [])', 'E745:') endfunc --- 241,247 ---- call assert_fails('call str2nr({->2})', 'E729:') if has('float') call assert_equal(1, str2nr(1.2)) ! call CheckDefAndScriptFailure2(['echo str2nr(1.2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') endif call assert_fails('call str2nr(10, [])', 'E745:') endfunc *************** *** 505,512 **** call assert_fails('call simplify({})', 'E731:') if has('float') call assert_equal('1.2', simplify(1.2)) ! call CheckDefFailure(['echo simplify(1.2)'], 'E1013:') ! call CheckScriptFailure(['vim9script', 'echo simplify(1.2)'], 'E806:') endif endfunc --- 503,509 ---- call assert_fails('call simplify({})', 'E731:') if has('float') call assert_equal('1.2', simplify(1.2)) ! call CheckDefAndScriptFailure2(['echo simplify(1.2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') endif endfunc *** ../vim-8.2.3228/src/testdir/test_glob2regpat.vim 2021-07-03 11:58:08.373825923 +0200 --- src/testdir/test_glob2regpat.vim 2021-07-27 21:52:46.426688273 +0200 *************** *** 5,12 **** func Test_glob2regpat_invalid() if has('float') call assert_equal('^1\.33$', glob2regpat(1.33)) ! call CheckDefFailure(['echo glob2regpat(1.2)'], 'E1013:') ! call CheckScriptFailure(['vim9script', 'echo glob2regpat(1.2)'], 'E806:') endif call assert_fails('call glob2regpat("}")', 'E219:') call assert_fails('call glob2regpat("{")', 'E220:') --- 5,11 ---- func Test_glob2regpat_invalid() if has('float') call assert_equal('^1\.33$', glob2regpat(1.33)) ! call CheckDefAndScriptFailure2(['echo glob2regpat(1.2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') endif call assert_fails('call glob2regpat("}")', 'E219:') call assert_fails('call glob2regpat("{")', 'E220:') *** ../vim-8.2.3228/src/testdir/test_listdict.vim 2021-07-22 18:48:45.460351441 +0200 --- src/testdir/test_listdict.vim 2021-07-27 21:52:46.426688273 +0200 *************** *** 438,444 **** var d = {1: 'a', 3: 'c'} call remove(d, []) END ! call CheckScriptFailure(lines, 'E1174: String required for argument 2') let lines =<< trim END var d = {1: 'a', 3: 'c'} call remove(d, []) --- 438,444 ---- var d = {1: 'a', 3: 'c'} call remove(d, []) END ! call CheckScriptFailure(lines, 'E1220: String or Number required for argument 2') let lines =<< trim END var d = {1: 'a', 3: 'c'} call remove(d, []) *** ../vim-8.2.3228/src/testdir/test_vim9_builtin.vim 2021-07-25 15:57:29.218219920 +0200 --- src/testdir/test_vim9_builtin.vim 2021-07-27 21:52:46.426688273 +0200 *************** *** 67,73 **** assert_equal(0, abs(0)) assert_equal(2, abs(-2)) assert_equal(3, abs(3)) ! CheckDefFailure(['abs("text")'], 'E1013: Argument 1: type mismatch, expected number but got string', 1) if has('float') assert_equal(0, abs(0)) assert_equal(2.0, abs(-2.0)) --- 67,73 ---- assert_equal(0, abs(0)) assert_equal(2, abs(-2)) assert_equal(3, abs(3)) ! CheckDefAndScriptFailure2(['abs("text")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') if has('float') assert_equal(0, abs(0)) assert_equal(2.0, abs(-2.0)) *************** *** 76,82 **** enddef def Test_add() ! CheckDefAndScriptFailure2(['add({}, 1)'], 'E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1') CheckDefFailure(['add([1], "a")'], 'E1012: Type mismatch; expected number but got string') enddef --- 76,82 ---- enddef def Test_add() ! CheckDefAndScriptFailure2(['add({}, 1)'], 'E1013: Argument 1: type mismatch, expected list but got dict', 'E1226: String or List required for argument 1') CheckDefFailure(['add([1], "a")'], 'E1012: Type mismatch; expected number but got string') enddef *************** *** 161,168 **** 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() --- 161,168 ---- enddef def Test_and() ! CheckDefAndScriptFailure2(['and("x", 0x2)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['and(0x1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_append() *************** *** 180,186 **** assert_equal("{'a': 10}", getline(1)) append(0, function('min')) assert_equal("function('min')", getline(1)) ! CheckDefAndScriptFailure2(['append([1], "x")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E745: Using a List as a Number') bwipe! enddef --- 180,186 ---- assert_equal("{'a': 10}", getline(1)) append(0, function('min')) assert_equal("function('min')", getline(1)) ! CheckDefAndScriptFailure2(['append([1], "x")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') bwipe! enddef *************** *** 196,222 **** assert_equal(['0', 'one', '1', 'two', '2', ''], getbufline(bnum, 1, '$')) appendbufline(bnum, 0, 'zero') assert_equal(['zero'], getbufline(bnum, 1)) ! CheckDefFailure(['appendbufline([1], 1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got list') ! CheckDefFailure(['appendbufline(1, [1], "x")'], 'E1013: Argument 2: type mismatch, expected string but got list') ! CheckDefFailure(['appendbufline(1, 1, {"a": 10})'], 'E1013: Argument 3: type mismatch, expected string but got dict') bnum->bufwinid()->win_gotoid() bwipe! 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_beeps() --- 196,222 ---- assert_equal(['0', 'one', '1', 'two', '2', ''], getbufline(bnum, 1, '$')) appendbufline(bnum, 0, 'zero') assert_equal(['zero'], getbufline(bnum, 1)) ! CheckDefAndScriptFailure2(['appendbufline([1], 1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') ! CheckDefAndScriptFailure2(['appendbufline(1, [1], "x")'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2') ! CheckDefAndScriptFailure2(['appendbufline(1, 1, {"a": 10})'], 'E1013: Argument 3: type mismatch, expected string but got dict', 'E1224: String or List required for argument 3') bnum->bufwinid()->win_gotoid() bwipe! enddef def Test_argc() ! CheckDefAndScriptFailure2(['argc("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_arglistid() ! CheckDefAndScriptFailure2(['arglistid("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['arglistid(1, "y")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') ! CheckDefAndScriptFailure2(['arglistid("x", "y")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_argv() ! CheckDefAndScriptFailure2(['argv("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['argv(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') ! CheckDefAndScriptFailure2(['argv("x", "y")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_assert_beeps() *************** *** 224,257 **** 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') enddef def Test_assert_exception() ! CheckDefFailure(['assert_exception({})'], 'E1013: Argument 1: type mismatch, expected string but got dict') ! CheckDefFailure(['assert_exception("E1:", v:null)'], 'E1013: Argument 2: type mismatch, expected string but got special') enddef def Test_assert_fails() ! CheckDefAndScriptFailure2(['assert_fails([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['assert_fails("a", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['assert_fails("a", "b", "c", "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') CheckDefAndScriptFailure2(['assert_fails("a", "b", "c", 4, 5)'], 'E1013: Argument 5: type mismatch, expected string but got number', 'E1174: String required for argument 5') enddef def Test_assert_inrange() ! CheckDefAndScriptFailure2(['assert_inrange("a", 2, 3)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['assert_inrange(1, "b", 3)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') ! CheckDefAndScriptFailure2(['assert_inrange(1, 2, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') CheckDefAndScriptFailure2(['assert_inrange(1, 2, 3, 4)'], 'E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4') enddef def Test_assert_match() ! CheckDefFailure(['assert_match({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict') ! 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_nobeep() --- 224,257 ---- enddef def Test_assert_equalfile() ! CheckDefAndScriptFailure2(['assert_equalfile(1, "f2")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['assert_equalfile("f1", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['assert_equalfile("f1", "f2", ["a"])'], 'E1013: Argument 3: type mismatch, expected string but got list', 'E1174: String required for argument 3') enddef def Test_assert_exception() ! CheckDefAndScriptFailure2(['assert_exception({})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['assert_exception("E1:", v:null)'], 'E1013: Argument 2: type mismatch, expected string but got special', 'E1174: String required for argument 2') enddef def Test_assert_fails() ! CheckDefAndScriptFailure2(['assert_fails([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') ! CheckDefAndScriptFailure2(['assert_fails("a", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1222: String or List required for argument 2') CheckDefAndScriptFailure2(['assert_fails("a", "b", "c", "d")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') CheckDefAndScriptFailure2(['assert_fails("a", "b", "c", 4, 5)'], 'E1013: Argument 5: type mismatch, expected string but got number', 'E1174: String required for argument 5') enddef def Test_assert_inrange() ! CheckDefAndScriptFailure2(['assert_inrange("a", 2, 3)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') ! CheckDefAndScriptFailure2(['assert_inrange(1, "b", 3)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2') ! CheckDefAndScriptFailure2(['assert_inrange(1, 2, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 3') CheckDefAndScriptFailure2(['assert_inrange(1, 2, 3, 4)'], 'E1013: Argument 4: type mismatch, expected string but got number', 'E1174: String required for argument 4') enddef def Test_assert_match() ! CheckDefAndScriptFailure2(['assert_match({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', '') ! CheckDefAndScriptFailure2(['assert_match("a", 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', '') ! CheckDefAndScriptFailure2(['assert_match("a", "b", null)'], 'E1013: Argument 3: type mismatch, expected string but got special', '') enddef def Test_assert_nobeep() *************** *** 259,267 **** enddef def Test_assert_notmatch() ! CheckDefFailure(['assert_notmatch({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict') ! 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_assert_report() --- 259,267 ---- enddef def Test_assert_notmatch() ! CheckDefAndScriptFailure2(['assert_notmatch({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', '') ! CheckDefAndScriptFailure2(['assert_notmatch("a", 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', '') ! CheckDefAndScriptFailure2(['assert_notmatch("a", "b", null)'], 'E1013: Argument 3: type mismatch, expected string but got special', '') enddef def Test_assert_report() *************** *** 272,282 **** CheckGui CheckFeature balloon_eval ! assert_fails('balloon_show(10)', 'E1174:') ! assert_fails('balloon_show(true)', 'E1174:') ! CheckDefAndScriptFailure2(['balloon_show(1.2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['balloon_show({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') enddef def Test_balloon_split() --- 272,282 ---- CheckGui CheckFeature balloon_eval ! assert_fails('balloon_show(10)', 'E1222:') ! assert_fails('balloon_show(true)', 'E1222:') ! CheckDefAndScriptFailure2(['balloon_show(1.2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1222: String or List required for argument 1') ! CheckDefAndScriptFailure2(['balloon_show({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1') enddef def Test_balloon_split() *************** *** 296,327 **** enddef def Test_browsedir() ! CheckDefFailure(['browsedir({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict') ! CheckDefFailure(['browsedir("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list') enddef def Test_bufadd() ! assert_fails('bufadd([])', 'E730:') enddef def Test_bufexists() ! assert_fails('bufexists(true)', 'E1174:') enddef def Test_buflisted() var res: bool = buflisted('asdf') assert_equal(false, res) ! assert_fails('buflisted(true)', 'E1174:') ! assert_fails('buflisted([])', 'E1174:') enddef def Test_bufload() ! assert_fails('bufload([])', 'E730:') enddef def Test_bufloaded() ! assert_fails('bufloaded(true)', 'E1174:') ! assert_fails('bufloaded([])', 'E1174:') enddef def Test_bufname() --- 296,329 ---- enddef def Test_browsedir() ! if has('browse') ! CheckDefAndScriptFailure2(['browsedir({}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['browsedir("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') ! endif enddef def Test_bufadd() ! assert_fails('bufadd([])', 'E1174:') enddef def Test_bufexists() ! assert_fails('bufexists(true)', 'E1220:') enddef def Test_buflisted() var res: bool = buflisted('asdf') assert_equal(false, res) ! assert_fails('buflisted(true)', 'E1220:') ! assert_fails('buflisted([])', 'E1220:') enddef def Test_bufload() ! assert_fails('bufload([])', 'E1220:') enddef def Test_bufloaded() ! assert_fails('bufloaded(true)', 'E1220:') ! assert_fails('bufloaded([])', 'E1220:') enddef def Test_bufname() *************** *** 330,337 **** edit OtherFile bufname('#')->assert_equal('SomeFile') close ! assert_fails('bufname(true)', 'E1138:') ! assert_fails('bufname([])', 'E745:') enddef def Test_bufnr() --- 332,339 ---- edit OtherFile bufname('#')->assert_equal('SomeFile') close ! assert_fails('bufname(true)', 'E1220:') ! assert_fails('bufname([])', 'E1220:') enddef def Test_bufnr() *************** *** 341,347 **** buf = bufnr('Xdummy', true) buf->assert_notequal(-1) exe 'bwipe! ' .. buf ! CheckDefAndScriptFailure2(['bufnr([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['bufnr(1, 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') enddef --- 343,349 ---- buf = bufnr('Xdummy', true) buf->assert_notequal(-1) exe 'bwipe! ' .. buf ! CheckDefAndScriptFailure2(['bufnr([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['bufnr(1, 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') enddef *************** *** 358,375 **** bwipe SomeFile bwipe OtherFile ! assert_fails('bufwinid(true)', 'E1138:') ! assert_fails('bufwinid([])', 'E745:') enddef def Test_bufwinnr() ! assert_fails('bufwinnr(true)', 'E1138:') ! assert_fails('bufwinnr([])', 'E745:') enddef def Test_byte2line() ! CheckDefFailure(['byte2line("1")'], 'E1013: Argument 1: type mismatch, expected number but got string') ! CheckDefFailure(['byte2line([])'], 'E1013: Argument 1: type mismatch, expected number but got list') assert_equal(-1, byte2line(0)) enddef --- 360,377 ---- bwipe SomeFile bwipe OtherFile ! assert_fails('bufwinid(true)', 'E1220:') ! assert_fails('bufwinid([])', 'E1220:') enddef def Test_bufwinnr() ! assert_fails('bufwinnr(true)', 'E1220:') ! assert_fails('bufwinnr([])', 'E1220:') enddef def Test_byte2line() ! CheckDefAndScriptFailure2(['byte2line("1")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['byte2line([])'], 'E1013: Argument 1: type mismatch, expected number but got list', 'E1210: Number required for argument 1') assert_equal(-1, byte2line(0)) enddef *************** *** 395,401 **** if !has('channel') CheckFeature channel else ! CheckDefFailure(['ch_canread(10)'], 'E1013: Argument 1: type mismatch, expected channel but got number') endif enddef --- 397,403 ---- if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_canread(10)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') endif enddef *************** *** 403,409 **** if !has('channel') CheckFeature channel else ! CheckDefFailure(['ch_close("c")'], 'E1013: Argument 1: type mismatch, expected channel but got string') endif enddef --- 405,411 ---- if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_close("c")'], 'E1013: Argument 1: type mismatch, expected channel but got string', 'E1217: Channel or Job required for argument 1') endif enddef *************** *** 411,417 **** if !has('channel') CheckFeature channel else ! CheckDefFailure(['ch_close_in(true)'], 'E1013: Argument 1: type mismatch, expected channel but got bool') endif enddef --- 413,419 ---- if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_close_in(true)'], 'E1013: Argument 1: type mismatch, expected channel but got bool', 'E1217: Channel or Job required for argument 1') endif enddef *************** *** 429,435 **** CheckFeature channel else CheckDefAndScriptFailure2(['ch_evalraw(1, "")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') ! CheckDefAndScriptFailure2(['ch_evalraw(test_null_channel(), 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['ch_evalraw(test_null_channel(), "", [])'], 'E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3') endif enddef --- 431,437 ---- CheckFeature channel else CheckDefAndScriptFailure2(['ch_evalraw(1, "")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') ! CheckDefAndScriptFailure2(['ch_evalraw(test_null_channel(), 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1221: String or Blob required for argument 2') CheckDefAndScriptFailure2(['ch_evalraw(test_null_channel(), "", [])'], 'E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3') endif enddef *************** *** 447,454 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_getjob(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument:') ! CheckDefAndScriptFailure2(['ch_getjob({"a": 10})'], 'E1013: Argument 1: type mismatch, expected channel but got dict', 'E731: Using a Dictionary as a String') assert_equal(0, ch_getjob(test_null_channel())) endif enddef --- 449,456 ---- if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_getjob(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') ! CheckDefAndScriptFailure2(['ch_getjob({"a": 10})'], 'E1013: Argument 1: type mismatch, expected channel but got dict', 'E1217: Channel or Job required for argument 1') assert_equal(0, ch_getjob(test_null_channel())) endif enddef *************** *** 457,463 **** if !has('channel') CheckFeature channel else ! CheckDefFailure(['ch_info([1])'], 'E1013: Argument 1: type mismatch, expected channel but got list') endif enddef --- 459,465 ---- if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_info([1])'], 'E1013: Argument 1: type mismatch, expected channel but got list', 'E1217: Channel or Job required for argument 1') endif enddef *************** *** 495,502 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_read(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') ! CheckDefAndScriptFailure2(['ch_read(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E715: Dictionary required') endif enddef --- 497,504 ---- if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_read(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') ! CheckDefAndScriptFailure2(['ch_read(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') endif enddef *************** *** 504,511 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_readblob(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') ! CheckDefAndScriptFailure2(['ch_readblob(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E715: Dictionary required') endif enddef --- 506,513 ---- if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_readblob(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') ! CheckDefAndScriptFailure2(['ch_readblob(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') endif enddef *************** *** 513,520 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_readraw(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') ! CheckDefAndScriptFailure2(['ch_readraw(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E715: Dictionary required') endif enddef --- 515,522 ---- if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_readraw(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') ! CheckDefAndScriptFailure2(['ch_readraw(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') endif enddef *************** *** 532,538 **** CheckFeature channel else CheckDefAndScriptFailure2(['ch_sendraw(1, "")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') ! CheckDefAndScriptFailure2(['ch_sendraw(test_null_channel(), 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['ch_sendraw(test_null_channel(), "", [])'], 'E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3') endif enddef --- 534,540 ---- CheckFeature channel else CheckDefAndScriptFailure2(['ch_sendraw(1, "")'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') ! CheckDefAndScriptFailure2(['ch_sendraw(test_null_channel(), 1)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1221: String or Blob required for argument 2') CheckDefAndScriptFailure2(['ch_sendraw(test_null_channel(), "", [])'], 'E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3') endif enddef *************** *** 541,548 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_setoptions(1, {})'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') ! CheckDefFailure(['ch_setoptions(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict but got list') endif enddef --- 543,550 ---- if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_setoptions(1, {})'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') ! CheckDefAndScriptFailure2(['ch_setoptions(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') endif enddef *************** *** 550,557 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_status(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E475: Invalid argument') ! CheckDefAndScriptFailure2(['ch_status(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E715: Dictionary required') endif enddef --- 552,559 ---- if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['ch_status(1)'], 'E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1') ! CheckDefAndScriptFailure2(['ch_status(test_null_channel(), [])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') endif enddef *************** *** 572,579 **** 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') new setline(1, ['abcdefgh']) cursor(1, 4) --- 574,581 ---- enddef def Test_charcol() ! CheckDefAndScriptFailure2(['charcol(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1') ! CheckDefAndScriptFailure2(['charcol({a: 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1') new setline(1, ['abcdefgh']) cursor(1, 4) *************** *** 584,592 **** 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() --- 586,594 ---- enddef def Test_charidx() ! CheckDefAndScriptFailure2(['charidx(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['charidx("a", "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') ! CheckDefAndScriptFailure2(['charidx("a", 1, "")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3') enddef def Test_chdir() *************** *** 594,607 **** enddef def Test_cindent() ! CheckDefFailure(['cindent([])'], 'E1013: Argument 1: type mismatch, expected string but got list') ! CheckDefFailure(['cindent(null)'], 'E1013: Argument 1: type mismatch, expected string but got special') assert_equal(-1, cindent(0)) assert_equal(0, cindent('.')) enddef def Test_clearmatches() ! CheckDefFailure(['clearmatches("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') enddef def Test_col() --- 596,609 ---- enddef def Test_cindent() ! CheckDefAndScriptFailure2(['cindent([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') ! CheckDefAndScriptFailure2(['cindent(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1') assert_equal(-1, cindent(0)) assert_equal(0, cindent('.')) enddef def Test_clearmatches() ! CheckDefAndScriptFailure2(['clearmatches("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_col() *************** *** 612,622 **** col([1, '$'])->assert_equal(9) assert_equal(0, col([10, '$'])) ! 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') ! CheckDefFailure(['col(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool') bw! enddef --- 614,624 ---- col([1, '$'])->assert_equal(9) assert_equal(0, col([10, '$'])) ! assert_fails('col(true)', 'E1222:') ! CheckDefAndScriptFailure2(['col(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1') ! CheckDefAndScriptFailure2(['col({a: 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1') ! CheckDefAndScriptFailure2(['col(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1222: String or List required for argument 1') bw! enddef *************** *** 626,637 **** enddef def Test_complete_add() ! CheckDefAndScriptFailure2(['complete_add([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') enddef def Test_complete_info() ! CheckDefFailure(['complete_info("")'], 'E1013: Argument 1: type mismatch, expected list but got string') ! CheckDefFailure(['complete_info({})'], 'E1013: Argument 1: type mismatch, expected list but got dict') assert_equal({'pum_visible': 0, 'mode': '', 'selected': -1, 'items': []}, complete_info()) assert_equal({'mode': '', 'items': []}, complete_info(['mode', 'items'])) enddef --- 628,639 ---- enddef def Test_complete_add() ! CheckDefAndScriptFailure2(['complete_add([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1223: String or List required for argument 1') enddef def Test_complete_info() ! CheckDefAndScriptFailure2(['complete_info("")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1') ! CheckDefAndScriptFailure2(['complete_info({})'], 'E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1') assert_equal({'pum_visible': 0, 'mode': '', 'selected': -1, 'items': []}, complete_info()) assert_equal({'mode': '', 'items': []}, complete_info(['mode', 'items'])) enddef *************** *** 671,677 **** def Test_count() count('ABC ABC ABC', 'b', true)->assert_equal(3) count('ABC ABC ABC', 'b', false)->assert_equal(0) ! CheckDefAndScriptFailure2(['count(10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['count("a", [1], 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') CheckDefAndScriptFailure2(['count("a", [1], 0, "b")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') count([1, 2, 2, 3], 2)->assert_equal(2) --- 673,679 ---- def Test_count() count('ABC ABC ABC', 'b', true)->assert_equal(3) count('ABC ABC ABC', 'b', false)->assert_equal(0) ! CheckDefAndScriptFailure2(['count(10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1225: String or List required for argument 1') CheckDefAndScriptFailure2(['count("a", [1], 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') CheckDefAndScriptFailure2(['count("a", [1], 0, "b")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') count([1, 2, 2, 3], 2)->assert_equal(2) *************** *** 701,714 **** cursor('2', 1) END CheckDefExecAndScriptFailure(lines, 'E1209:') ! CheckDefAndScriptFailure2(['cursor(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected number but got blob', 'E1210: Number required for argument 1') CheckDefAndScriptFailure2(['cursor(1, "2")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') CheckDefAndScriptFailure2(['cursor(1, 2, "3")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') enddef def Test_debugbreak() CheckMSWindows ! CheckDefFailure(['debugbreak("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') enddef def Test_deepcopy() --- 703,716 ---- cursor('2', 1) END CheckDefExecAndScriptFailure(lines, 'E1209:') ! CheckDefAndScriptFailure2(['cursor(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected number but got blob', 'E1224: String or List required for argument 1') CheckDefAndScriptFailure2(['cursor(1, "2")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') CheckDefAndScriptFailure2(['cursor(1, 2, "3")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') enddef def Test_debugbreak() CheckMSWindows ! CheckDefAndScriptFailure2(['debugbreak("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_deepcopy() *************** *** 719,743 **** 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_deletebufline() ! CheckDefAndScriptFailure2(['deletebufline([], 2)'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['deletebufline("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['deletebufline("a", 2, 0z10)'], 'E1013: Argument 3: type mismatch, expected string but got blob', 'E1174: String required for argument 3') enddef def Test_diff_filler() ! CheckDefFailure(['diff_filler([])'], 'E1013: Argument 1: type mismatch, expected string but got list') ! CheckDefFailure(['diff_filler(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool') assert_equal(0, diff_filler(1)) assert_equal(0, diff_filler('.')) enddef def Test_diff_hlID() ! CheckDefAndScriptFailure2(['diff_hlID(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['diff_hlID(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef --- 721,745 ---- var res: bool = delete('doesnotexist') assert_equal(true, res) ! CheckDefAndScriptFailure2(['delete(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['delete("a", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') enddef def Test_deletebufline() ! CheckDefAndScriptFailure2(['deletebufline([], 2)'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') ! CheckDefAndScriptFailure2(['deletebufline("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2') ! CheckDefAndScriptFailure2(['deletebufline("a", 2, 0z10)'], 'E1013: Argument 3: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 3') enddef def Test_diff_filler() ! CheckDefAndScriptFailure2(['diff_filler([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') ! CheckDefAndScriptFailure2(['diff_filler(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') assert_equal(0, diff_filler(1)) assert_equal(0, diff_filler('.')) enddef def Test_diff_hlID() ! CheckDefAndScriptFailure2(['diff_hlID(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['diff_hlID(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef *************** *** 747,761 **** enddef def Test_escape() ! CheckDefFailure(['escape("a", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number') ! CheckDefFailure(['escape(10, " ")'], 'E1013: Argument 1: type mismatch, expected string but got number') ! CheckDefFailure(['escape(true, false)'], 'E1013: Argument 1: type mismatch, expected string but got bool') assert_equal('a\:b', escape("a:b", ":")) enddef def Test_eval() ! CheckDefFailure(['eval(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') ! CheckDefFailure(['eval(null)'], 'E1013: Argument 1: type mismatch, expected string but got special') assert_equal(2, eval('1 + 1')) enddef --- 749,763 ---- enddef def Test_escape() ! CheckDefAndScriptFailure2(['escape(10, " ")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['escape(true, false)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['escape("a", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') assert_equal('a\:b', escape("a:b", ":")) enddef def Test_eval() ! CheckDefAndScriptFailure2(['eval(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['eval(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1') assert_equal(2, eval('1 + 1')) enddef *************** *** 773,782 **** 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 but got list') CheckDefExecFailure(['echo execute(["xx", 123])'], 'E492') ! CheckDefFailure(['execute("xx", 123)'], 'E1013: Argument 2: type mismatch, expected string but got number') enddef def Test_exepath() --- 775,784 ---- res = execute(["echo 'here'", "echo 'there'"]) assert_equal("\nhere\nthere", res) ! CheckDefAndScriptFailure2(['execute(123)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1') CheckDefFailure(['execute([123])'], 'E1013: Argument 1: type mismatch, expected list but got list') CheckDefExecFailure(['echo execute(["xx", 123])'], 'E492') ! CheckDefAndScriptFailure2(['execute("xx", 123)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') enddef def Test_exepath() *************** *** 786,792 **** enddef def Test_exists() ! CheckDefFailure(['exists(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') call assert_equal(1, exists('&tabstop')) enddef --- 788,794 ---- enddef def Test_exists() ! CheckDefAndScriptFailure2(['exists(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') call assert_equal(1, exists('&tabstop')) enddef *************** *** 826,834 **** END CheckDefAndScriptSuccess(lines) ! CheckDefFailure(['extend("a", 1)'], 'E1013: Argument 1: type mismatch, expected list but got string') ! CheckDefFailure(['extend([1, 2], 3)'], 'E1013: Argument 2: type mismatch, expected list but got number') ! CheckDefFailure(['extend([1, 2], ["x"])'], 'E1013: Argument 2: type mismatch, expected list but got list') CheckDefFailure(['extend([1, 2], [3], "x")'], 'E1013: Argument 3: type mismatch, expected number but got string') CheckDefFailure(['extend({a: 1}, 42)'], 'E1013: Argument 2: type mismatch, expected dict but got number') --- 828,836 ---- END CheckDefAndScriptSuccess(lines) ! CheckDefAndScriptFailure2(['extend("a", 1)'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E712: Argument of extend() must be a List or Dictionary') ! CheckDefAndScriptFailure2(['extend([1, 2], 3)'], 'E1013: Argument 2: type mismatch, expected list but got number', 'E712: Argument of extend() must be a List or Dictionary') ! CheckDefAndScriptFailure2(['extend([1, 2], ["x"])'], 'E1013: Argument 2: type mismatch, expected list but got list', 'E1013: Argument 2: type mismatch, expected list but got list') CheckDefFailure(['extend([1, 2], [3], "x")'], 'E1013: Argument 3: type mismatch, expected number but got string') CheckDefFailure(['extend({a: 1}, 42)'], 'E1013: Argument 2: type mismatch, expected dict but got number') *************** *** 924,939 **** assert_equal([1, 2, 'a'], extendnew([1, 2], ['a'])) assert_equal({one: 1, two: 'a'}, extendnew({one: 1}, {two: 'a'})) ! CheckDefFailure(['extendnew({a: 1}, 42)'], 'E1013: Argument 2: type mismatch, expected dict but got number') ! CheckDefFailure(['extendnew({a: 1}, [42])'], 'E1013: Argument 2: type mismatch, expected dict but got list') ! CheckDefFailure(['extendnew([1, 2], "x")'], 'E1013: Argument 2: type mismatch, expected list but got string') ! CheckDefFailure(['extendnew([1, 2], {x: 1})'], 'E1013: Argument 2: type mismatch, expected list but got dict') enddef def Test_feedkeys() ! CheckDefFailure(['feedkeys(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') ! CheckDefFailure(['feedkeys("x", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number') ! CheckDefFailure(['feedkeys([], {})'], 'E1013: Argument 1: type mismatch, expected string but got list') g:TestVar = 1 feedkeys(":g:TestVar = 789\n", 'xt') assert_equal(789, g:TestVar) --- 926,941 ---- assert_equal([1, 2, 'a'], extendnew([1, 2], ['a'])) assert_equal({one: 1, two: 'a'}, extendnew({one: 1}, {two: 'a'})) ! CheckDefAndScriptFailure2(['extendnew({a: 1}, 42)'], 'E1013: Argument 2: type mismatch, expected dict but got number', 'E712: Argument of extendnew() must be a List or Dictionary') ! CheckDefAndScriptFailure2(['extendnew({a: 1}, [42])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E712: Argument of extendnew() must be a List or Dictionary') ! CheckDefAndScriptFailure2(['extendnew([1, 2], "x")'], 'E1013: Argument 2: type mismatch, expected list but got string', 'E712: Argument of extendnew() must be a List or Dictionary') ! CheckDefAndScriptFailure2(['extendnew([1, 2], {x: 1})'], 'E1013: Argument 2: type mismatch, expected list but got dict', 'E712: Argument of extendnew() must be a List or Dictionary') enddef def Test_feedkeys() ! CheckDefAndScriptFailure2(['feedkeys(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['feedkeys("x", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['feedkeys([], {})'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') g:TestVar = 1 feedkeys(":g:TestVar = 789\n", 'xt') assert_equal(789, g:TestVar) *************** *** 960,975 **** 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', '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', '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() --- 962,977 ---- 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', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['finddir("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') 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', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['findfile("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') enddef def Test_flattennew() *************** *** 996,1056 **** 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() ! CheckDefFailure(['fnameescape(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') assert_equal('\+a\%b\|', fnameescape('+a%b|')) enddef --- 998,1058 ---- CheckFeature float # acos() ! CheckDefAndScriptFailure2(['acos("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # asin() ! CheckDefAndScriptFailure2(['asin("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # atan() ! CheckDefAndScriptFailure2(['atan("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # atan2() ! CheckDefAndScriptFailure2(['atan2("a", 1.1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') ! CheckDefAndScriptFailure2(['atan2(1.2, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2') ! CheckDefAndScriptFailure2(['atan2(1.2)'], 'E119:', 'E119:') # ceil() ! CheckDefAndScriptFailure2(['ceil("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # cos() ! CheckDefAndScriptFailure2(['cos("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # cosh() ! CheckDefAndScriptFailure2(['cosh("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # exp() ! CheckDefAndScriptFailure2(['exp("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # float2nr() ! CheckDefAndScriptFailure2(['float2nr("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # floor() ! CheckDefAndScriptFailure2(['floor("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # fmod() ! CheckDefAndScriptFailure2(['fmod(1.1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2') ! CheckDefAndScriptFailure2(['fmod("a", 1.1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') ! CheckDefAndScriptFailure2(['fmod(1.1)'], 'E119:', 'E119:') # isinf() ! CheckDefAndScriptFailure2(['isinf("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # isnan() ! CheckDefAndScriptFailure2(['isnan("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # log() ! CheckDefAndScriptFailure2(['log("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # log10() ! CheckDefAndScriptFailure2(['log10("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # pow() ! CheckDefAndScriptFailure2(['pow("a", 1.1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') ! CheckDefAndScriptFailure2(['pow(1.1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 2') ! CheckDefAndScriptFailure2(['pow(1.1)'], 'E119:', 'E119:') # round() ! CheckDefAndScriptFailure2(['round("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # sin() ! CheckDefAndScriptFailure2(['sin("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # sinh() ! CheckDefAndScriptFailure2(['sinh("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # sqrt() ! CheckDefAndScriptFailure2(['sqrt("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # tan() ! CheckDefAndScriptFailure2(['tan("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # tanh() ! CheckDefAndScriptFailure2(['tanh("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') # trunc() ! CheckDefAndScriptFailure2(['trunc("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1219: Float or Number required for argument 1') enddef def Test_fnameescape() ! CheckDefAndScriptFailure2(['fnameescape(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') assert_equal('\+a\%b\|', fnameescape('+a%b|')) enddef *************** *** 1070,1076 **** enddef def Test_filter() ! CheckDefAndScriptFailure2(['filter(1.1, "1")'], 'E1013: Argument 1: type mismatch, expected list but got float', 'E1211: List required for argument 1') assert_equal([], filter([1, 2, 3], '0')) assert_equal([1, 2, 3], filter([1, 2, 3], '1')) assert_equal({b: 20}, filter({a: 10, b: 20}, 'v:val == 20')) --- 1072,1078 ---- enddef def Test_filter() ! CheckDefAndScriptFailure2(['filter(1.1, "1")'], 'E1013: Argument 1: type mismatch, expected list but got float', 'E1228: List or Dictionary or Blob required for argument 1') assert_equal([], filter([1, 2, 3], '0')) assert_equal([1, 2, 3], filter([1, 2, 3], '1')) assert_equal({b: 20}, filter({a: 10, b: 20}, 'v:val == 20')) *************** *** 1096,1120 **** enddef def Test_foldclosed() ! CheckDefFailure(['foldclosed(function("min"))'], 'E1013: Argument 1: type mismatch, expected string but got func(...): any') assert_equal(-1, foldclosed(1)) assert_equal(-1, foldclosed('$')) enddef def Test_foldclosedend() ! CheckDefFailure(['foldclosedend(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool') assert_equal(-1, foldclosedend(1)) assert_equal(-1, foldclosedend('w0')) enddef def Test_foldlevel() ! CheckDefFailure(['foldlevel(0z10)'], 'E1013: Argument 1: type mismatch, expected string but got blob') assert_equal(0, foldlevel(1)) assert_equal(0, foldlevel('.')) enddef def Test_foldtextresult() ! CheckDefFailure(['foldtextresult(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float') assert_equal('', foldtextresult(1)) assert_equal('', foldtextresult('.')) enddef --- 1098,1122 ---- enddef def Test_foldclosed() ! CheckDefAndScriptFailure2(['foldclosed(function("min"))'], 'E1013: Argument 1: type mismatch, expected string but got func(...): any', 'E1220: String or Number required for argument 1') assert_equal(-1, foldclosed(1)) assert_equal(-1, foldclosed('$')) enddef def Test_foldclosedend() ! CheckDefAndScriptFailure2(['foldclosedend(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') assert_equal(-1, foldclosedend(1)) assert_equal(-1, foldclosedend('w0')) enddef def Test_foldlevel() ! CheckDefAndScriptFailure2(['foldlevel(0z10)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1') assert_equal(0, foldlevel(1)) assert_equal(0, foldlevel('.')) enddef def Test_foldtextresult() ! CheckDefAndScriptFailure2(['foldtextresult(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') assert_equal('', foldtextresult(1)) assert_equal('', foldtextresult('.')) enddef *************** *** 1154,1161 **** def Test_garbagecollect() garbagecollect(true) ! CheckDefAndScriptFailure2(['garbagecollect("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1135: Using a String as a Bool') ! CheckDefAndScriptFailure2(['garbagecollect(20)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1023: Using a Number as a Bool') enddef def Test_get() --- 1156,1163 ---- def Test_garbagecollect() garbagecollect(true) ! CheckDefAndScriptFailure2(['garbagecollect("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1') ! CheckDefAndScriptFailure2(['garbagecollect(20)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1') enddef def Test_get() *************** *** 1196,1208 **** getbufline(-1, 1, '$')->assert_equal([]) bwipe! ! CheckDefAndScriptFailure2(['getbufline([], 2)'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['getbufline("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['getbufline("a", 2, 0z10)'], 'E1013: Argument 3: type mismatch, expected string but got blob', 'E1174: String required for argument 3') enddef def Test_getbufvar() ! CheckDefAndScriptFailure2(['getbufvar(true, "v")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['getbufvar(1, 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') enddef --- 1198,1210 ---- getbufline(-1, 1, '$')->assert_equal([]) bwipe! ! CheckDefAndScriptFailure2(['getbufline([], 2)'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') ! CheckDefAndScriptFailure2(['getbufline("a", [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2') ! CheckDefAndScriptFailure2(['getbufline("a", 2, 0z10)'], 'E1013: Argument 3: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 3') enddef def Test_getbufvar() ! CheckDefAndScriptFailure2(['getbufvar(true, "v")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['getbufvar(1, 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') enddef *************** *** 1219,1226 **** endwhile getchar(true)->assert_equal(0) getchar(1)->assert_equal(0) ! CheckDefAndScriptFailure2(['getchar(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1023: Using a Number as a Bool') ! CheckDefAndScriptFailure2(['getchar("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1135: Using a String as a Bool') enddef def Test_getcharpos() --- 1221,1228 ---- endwhile getchar(true)->assert_equal(0) getchar(1)->assert_equal(0) ! CheckDefAndScriptFailure2(['getchar(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1') ! CheckDefAndScriptFailure2(['getchar("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1') enddef def Test_getcharpos() *************** *** 1229,1236 **** enddef def Test_getcharstr() ! CheckDefAndScriptFailure2(['getcharstr(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1023: Using a Number as a Bool') ! CheckDefAndScriptFailure2(['getcharstr("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1135: Using a String as a Bool') enddef def Test_getcompletion() --- 1231,1238 ---- enddef def Test_getcharstr() ! CheckDefAndScriptFailure2(['getcharstr(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1') ! CheckDefAndScriptFailure2(['getcharstr("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1') enddef def Test_getcompletion() *************** *** 1244,1260 **** 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_getenv() --- 1246,1262 ---- enddef def Test_getcurpos() ! CheckDefAndScriptFailure2(['getcursorcharpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_getcursorcharpos() ! CheckDefAndScriptFailure2(['getcursorcharpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_getcwd() ! CheckDefAndScriptFailure2(['getcwd("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['getcwd("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['getcwd(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_getenv() *************** *** 1271,1277 **** enddef def Test_getfontname() ! CheckDefFailure(['getfontname(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') enddef def Test_getfperm() --- 1273,1279 ---- enddef def Test_getfontname() ! CheckDefAndScriptFailure2(['getfontname(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') enddef def Test_getfperm() *************** *** 1307,1315 **** 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_getline() --- 1309,1317 ---- enddef def Test_getjumplist() ! CheckDefAndScriptFailure2(['getjumplist("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['getjumplist("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['getjumplist(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_getline() *************** *** 1329,1341 **** echo getline('1') END CheckDefExecAndScriptFailure(lines, 'E1209:') ! CheckDefAndScriptFailure2(['getline(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['getline(1, true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2') enddef def Test_getloclist() ! CheckDefAndScriptFailure2(['getloclist("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number') ! CheckDefAndScriptFailure2(['getloclist(1, [])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E715: Dictionary required') enddef def Test_getloclist_return_type() --- 1331,1343 ---- echo getline('1') END CheckDefExecAndScriptFailure(lines, 'E1209:') ! CheckDefAndScriptFailure2(['getline(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') ! CheckDefAndScriptFailure2(['getline(1, true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2') enddef def Test_getloclist() ! CheckDefAndScriptFailure2(['getloclist("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['getloclist(1, [])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') enddef def Test_getloclist_return_type() *************** *** 1347,1369 **** enddef def Test_getmarklist() ! CheckDefFailure(['getmarklist([])'], 'E1013: Argument 1: type mismatch, expected string but got list') assert_equal([], getmarklist(10000)) assert_fails('getmarklist("a%b@#")', 'E94:') enddef def Test_getmatches() ! CheckDefFailure(['getmatches("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') enddef def Test_getpos() ! CheckDefFailure(['getpos(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') assert_equal([0, 1, 1, 0], getpos('.')) CheckDefExecFailure(['getpos("a")'], 'E1209:') enddef def Test_getqflist() ! CheckDefFailure(['getqflist([])'], 'E1013: Argument 1: type mismatch, expected dict but got list') call assert_equal({}, getqflist({})) enddef --- 1349,1371 ---- enddef def Test_getmarklist() ! CheckDefAndScriptFailure2(['getmarklist([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') assert_equal([], getmarklist(10000)) assert_fails('getmarklist("a%b@#")', 'E94:') enddef def Test_getmatches() ! CheckDefAndScriptFailure2(['getmatches("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_getpos() ! CheckDefAndScriptFailure2(['getpos(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') assert_equal([0, 1, 1, 0], getpos('.')) CheckDefExecFailure(['getpos("a")'], 'E1209:') enddef def Test_getqflist() ! CheckDefAndScriptFailure2(['getqflist([])'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1') call assert_equal({}, getqflist({})) enddef *************** *** 1406,1412 **** enddef def Test_gettabinfo() ! CheckDefFailure(['gettabinfo("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') enddef def Test_gettabvar() --- 1408,1414 ---- enddef def Test_gettabinfo() ! CheckDefAndScriptFailure2(['gettabinfo("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_gettabvar() *************** *** 1421,1440 **** enddef def Test_gettagstack() ! CheckDefFailure(['gettagstack("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') enddef def Test_gettext() ! CheckDefFailure(['gettext(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') assert_equal('abc', gettext("abc")) enddef def Test_getwininfo() ! CheckDefFailure(['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_getwinvar() --- 1423,1442 ---- enddef def Test_gettagstack() ! CheckDefAndScriptFailure2(['gettagstack("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_gettext() ! CheckDefAndScriptFailure2(['gettext(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') assert_equal('abc', gettext("abc")) enddef def Test_getwininfo() ! CheckDefAndScriptFailure2(['getwininfo("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_getwinpos() ! CheckDefAndScriptFailure2(['getwinpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_getwinvar() *************** *** 1451,1457 **** enddef def Test_glob2regpat() ! CheckDefFailure(['glob2regpat(null)'], 'E1013: Argument 1: type mismatch, expected string but got special') assert_equal('^$', glob2regpat('')) enddef --- 1453,1459 ---- enddef def Test_glob2regpat() ! CheckDefAndScriptFailure2(['glob2regpat(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1') assert_equal('^$', glob2regpat('')) enddef *************** *** 1477,1490 **** assert_false(has_key(d, 'x')) assert_false(has_key(d, 99)) ! CheckDefAndScriptFailure2(['has_key([1, 2], "k")'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E715: Dictionary required') ! CheckDefAndScriptFailure2(['has_key({"a": 10}, ["a"])'], 'E1013: Argument 2: type mismatch, expected string but got list', '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() --- 1479,1492 ---- assert_false(has_key(d, 'x')) assert_false(has_key(d, 99)) ! CheckDefAndScriptFailure2(['has_key([1, 2], "k")'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1') ! CheckDefAndScriptFailure2(['has_key({"a": 10}, ["a"])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2') enddef def Test_haslocaldir() ! CheckDefAndScriptFailure2(['haslocaldir("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['haslocaldir("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['haslocaldir(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_hasmapto() *************** *** 1498,1512 **** enddef def Test_histadd() ! CheckDefFailure(['histadd(1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got number') ! CheckDefFailure(['histadd(":", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number') histadd("search", 'skyblue') assert_equal('skyblue', histget('/', -1)) enddef def Test_histdel() CheckDefAndScriptFailure2(['histdel(1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['histdel(":", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2') enddef def Test_histget() --- 1500,1514 ---- enddef def Test_histadd() ! CheckDefAndScriptFailure2(['histadd(1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['histadd(":", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') histadd("search", 'skyblue') assert_equal('skyblue', histget('/', -1)) enddef def Test_histdel() CheckDefAndScriptFailure2(['histdel(1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['histdel(":", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2') enddef def Test_histget() *************** *** 1515,1550 **** enddef def Test_histnr() ! CheckDefFailure(['histnr(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') assert_equal(-1, histnr('abc')) enddef def Test_hlID() ! CheckDefFailure(['hlID(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') assert_equal(0, hlID('NonExistingHighlight')) enddef def Test_hlexists() ! CheckDefFailure(['hlexists([])'], 'E1013: Argument 1: type mismatch, expected string but got list') assert_equal(0, hlexists('NonExistingHighlight')) enddef def Test_iconv() ! CheckDefFailure(['iconv(1, "from", "to")'], 'E1013: Argument 1: type mismatch, expected string but got number') ! CheckDefFailure(['iconv("abc", 10, "to")'], 'E1013: Argument 2: type mismatch, expected string but got number') ! CheckDefFailure(['iconv("abc", "from", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number') assert_equal('abc', iconv('abc', 'fromenc', 'toenc')) enddef def Test_indent() ! CheckDefAndScriptFailure2(['indent([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', '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_index() index(['a', 'b', 'a', 'B'], 'b', 2, true)->assert_equal(3) ! CheckDefAndScriptFailure2(['index("a", "a")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1') CheckDefFailure(['index(["1"], 1)'], 'E1013: Argument 2: type mismatch, expected string but got number') CheckDefAndScriptFailure2(['index(0z10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') CheckDefAndScriptFailure2(['index([1], 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') --- 1517,1552 ---- enddef def Test_histnr() ! CheckDefAndScriptFailure2(['histnr(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') assert_equal(-1, histnr('abc')) enddef def Test_hlID() ! CheckDefAndScriptFailure2(['hlID(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') assert_equal(0, hlID('NonExistingHighlight')) enddef def Test_hlexists() ! CheckDefAndScriptFailure2(['hlexists([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') assert_equal(0, hlexists('NonExistingHighlight')) enddef def Test_iconv() ! CheckDefAndScriptFailure2(['iconv(1, "from", "to")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['iconv("abc", 10, "to")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['iconv("abc", "from", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') assert_equal('abc', iconv('abc', 'fromenc', 'toenc')) enddef def Test_indent() ! CheckDefAndScriptFailure2(['indent([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') ! CheckDefAndScriptFailure2(['indent(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') assert_equal(0, indent(1)) enddef def Test_index() index(['a', 'b', 'a', 'B'], 'b', 2, true)->assert_equal(3) ! CheckDefAndScriptFailure2(['index("a", "a")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1226: String or List required for argument 1') CheckDefFailure(['index(["1"], 1)'], 'E1013: Argument 2: type mismatch, expected string but got number') CheckDefAndScriptFailure2(['index(0z10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') CheckDefAndScriptFailure2(['index([1], 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') *************** *** 1552,1573 **** 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', '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', '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_inputlist() ! CheckDefFailure(['inputlist(10)'], 'E1013: Argument 1: type mismatch, expected list but got number') ! CheckDefFailure(['inputlist("abc")'], 'E1013: Argument 1: type mismatch, expected list but got string') CheckDefFailure(['inputlist([1, 2, 3])'], 'E1013: Argument 1: type mismatch, expected list but got list') feedkeys("2\", 't') var r: number = inputlist(['a', 'b', 'c']) --- 1554,1575 ---- enddef def Test_input() ! CheckDefAndScriptFailure2(['input(5)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['input(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['input("p", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['input("p", "q", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') enddef def Test_inputdialog() ! CheckDefAndScriptFailure2(['inputdialog(5)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['inputdialog(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['inputdialog("p", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['inputdialog("p", "q", 20)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') enddef def Test_inputlist() ! CheckDefAndScriptFailure2(['inputlist(10)'], 'E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1') ! CheckDefAndScriptFailure2(['inputlist("abc")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1') CheckDefFailure(['inputlist([1, 2, 3])'], 'E1013: Argument 1: type mismatch, expected list but got list') feedkeys("2\", 't') var r: number = inputlist(['a', 'b', 'c']) *************** *** 1575,1582 **** enddef def Test_inputsecret() ! CheckDefFailure(['inputsecret(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') ! CheckDefFailure(['inputsecret("Pass:", 20)'], 'E1013: Argument 2: type mismatch, expected string but got number') feedkeys("\", 't') var ans: string = inputsecret('Pass:', '123') assert_equal('123', ans) --- 1577,1584 ---- enddef def Test_inputsecret() ! CheckDefAndScriptFailure2(['inputsecret(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['inputsecret("Pass:", 20)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') feedkeys("\", 't') var ans: string = inputsecret('Pass:', '123') assert_equal('123', ans) *************** *** 1617,1633 **** assert_equal(['a', 'b', 'c'], insert(['b', 'c'], 'a')) assert_equal(0z1234, insert(0z34, 0x12)) ! CheckDefFailure(['insert("a", 1)'], 'E1013: Argument 1: type mismatch, expected list but got string', 1) ! CheckDefFailure(['insert([2, 3], "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 1) ! CheckDefFailure(['insert([2, 3], 1, "x")'], 'E1013: Argument 3: type mismatch, expected number but got string', 1) enddef def Test_invert() ! CheckDefFailure(['invert("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') enddef def Test_isdirectory() ! CheckDefFailure(['isdirectory(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float') assert_false(isdirectory('NonExistingDir')) enddef --- 1619,1635 ---- assert_equal(['a', 'b', 'c'], insert(['b', 'c'], 'a')) assert_equal(0z1234, insert(0z34, 0x12)) ! CheckDefAndScriptFailure2(['insert("a", 1)'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1226: String or List required for argument 1') ! CheckDefFailure(['insert([2, 3], "a")'], 'E1013: Argument 2: type mismatch, expected number but got string') ! CheckDefAndScriptFailure2(['insert([2, 3], 1, "x")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') enddef def Test_invert() ! CheckDefAndScriptFailure2(['invert("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_isdirectory() ! CheckDefAndScriptFailure2(['isdirectory(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') assert_false(isdirectory('NonExistingDir')) enddef *************** *** 1651,1657 **** if !has('job') CheckFeature job else ! CheckDefAndScriptFailure2(['job_getchannel("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E475: Invalid argument') assert_fails('job_getchannel(test_null_job())', 'E916: not a valid job') endif enddef --- 1653,1659 ---- if !has('job') CheckFeature job else ! CheckDefAndScriptFailure2(['job_getchannel("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1') assert_fails('job_getchannel(test_null_job())', 'E916: not a valid job') endif enddef *************** *** 1660,1666 **** if !has('job') CheckFeature job else ! CheckDefAndScriptFailure2(['job_info("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E475: Invalid argument') assert_fails('job_info(test_null_job())', 'E916: not a valid job') endif enddef --- 1662,1668 ---- if !has('job') CheckFeature job else ! CheckDefAndScriptFailure2(['job_info("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1') assert_fails('job_info(test_null_job())', 'E916: not a valid job') endif enddef *************** *** 1691,1697 **** if !has('job') CheckFeature job else ! CheckDefAndScriptFailure2(['job_status("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E475: Invalid argument') assert_equal('fail', job_status(test_null_job())) endif enddef --- 1693,1699 ---- if !has('job') CheckFeature job else ! CheckDefAndScriptFailure2(['job_status("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1') assert_equal('fail', job_status(test_null_job())) endif enddef *************** *** 1701,1707 **** CheckFeature job else CheckDefAndScriptFailure2(['job_stop("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1') ! CheckDefAndScriptFailure2(['job_stop(test_null_job(), true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2') endif enddef --- 1703,1709 ---- CheckFeature job else CheckDefAndScriptFailure2(['job_stop("a")'], 'E1013: Argument 1: type mismatch, expected job but got string', 'E1218: Job required for argument 1') ! CheckDefAndScriptFailure2(['job_stop(test_null_job(), true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2') endif enddef *************** *** 1711,1727 **** enddef def Test_js_decode() ! CheckDefFailure(['js_decode(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') assert_equal([1, 2], js_decode('[1,2]')) enddef def Test_json_decode() ! CheckDefFailure(['json_decode(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool') assert_equal(1.0, json_decode('1.0')) enddef def Test_keys() ! CheckDefFailure(['keys([])'], 'E1013: Argument 1: type mismatch, expected dict but got list') assert_equal(['a'], {a: 'v'}->keys()) assert_equal([], {}->keys()) enddef --- 1713,1729 ---- enddef def Test_js_decode() ! CheckDefAndScriptFailure2(['js_decode(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') assert_equal([1, 2], js_decode('[1,2]')) enddef def Test_json_decode() ! CheckDefAndScriptFailure2(['json_decode(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') assert_equal(1.0, json_decode('1.0')) enddef def Test_keys() ! CheckDefAndScriptFailure2(['keys([])'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1') assert_equal(['a'], {a: 'v'}->keys()) assert_equal([], {}->keys()) enddef *************** *** 1744,1757 **** CheckFeature libcall CheckDefAndScriptFailure2(['libcall(1, "b", 3)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['libcall("a", 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['libcall("a", "b", 1.1)'], 'E1013: Argument 3: type mismatch, expected string but got float', 'E1174: String required for argument 3') enddef def Test_libcallnr() CheckFeature libcall CheckDefAndScriptFailure2(['libcallnr(1, "b", 3)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['libcallnr("a", 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['libcallnr("a", "b", 1.1)'], 'E1013: Argument 3: type mismatch, expected string but got float', 'E1174: String required for argument 3') enddef def Test_line() --- 1746,1759 ---- CheckFeature libcall CheckDefAndScriptFailure2(['libcall(1, "b", 3)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['libcall("a", 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['libcall("a", "b", 1.1)'], 'E1013: Argument 3: type mismatch, expected string but got float', 'E1220: String or Number required for argument 3') enddef def Test_libcallnr() CheckFeature libcall CheckDefAndScriptFailure2(['libcallnr(1, "b", 3)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['libcallnr("a", 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['libcallnr("a", "b", 1.1)'], 'E1013: Argument 3: type mismatch, expected string but got float', 'E1220: String or Number required for argument 3') enddef def Test_line() *************** *** 1761,1773 **** enddef def Test_line2byte() ! CheckDefFailure(['line2byte(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool') assert_equal(-1, line2byte(1)) assert_equal(-1, line2byte(10000)) enddef def Test_lispindent() ! CheckDefFailure(['lispindent({})'], 'E1013: Argument 1: type mismatch, expected string but got dict') assert_equal(0, lispindent(1)) enddef --- 1763,1775 ---- enddef def Test_line2byte() ! CheckDefAndScriptFailure2(['line2byte(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') assert_equal(-1, line2byte(1)) assert_equal(-1, line2byte(10000)) enddef def Test_lispindent() ! CheckDefAndScriptFailure2(['lispindent({})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1220: String or Number required for argument 1') assert_equal(0, lispindent(1)) enddef *************** *** 1790,1804 **** enddef def Test_listener_add() ! CheckDefAndScriptFailure2(['listener_add("1", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1174: String required for argument 2') enddef def Test_listener_flush() ! CheckDefAndScriptFailure2(['listener_flush([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', '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_lua() --- 1792,1806 ---- enddef def Test_listener_add() ! CheckDefAndScriptFailure2(['listener_add("1", true)'], 'E1013: Argument 2: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 2') enddef def Test_listener_flush() ! CheckDefAndScriptFailure2(['listener_flush([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') enddef def Test_listener_remove() ! CheckDefAndScriptFailure2(['listener_remove("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_lua() *************** *** 1809,1816 **** enddef def Test_map() ! CheckDefAndScriptFailure2(['map("x", "1")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1') ! CheckDefAndScriptFailure2(['map(1, "1")'], 'E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1') enddef def Test_map_failure() --- 1811,1818 ---- enddef def Test_map() ! CheckDefAndScriptFailure2(['map("x", "1")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1228: List or Dictionary or Blob required for argument 1') ! CheckDefAndScriptFailure2(['map(1, "1")'], 'E1013: Argument 1: type mismatch, expected list but got number', 'E1228: List or Dictionary or Blob required for argument 1') enddef def Test_map_failure() *************** *** 1923,1930 **** enddef def Test_mapnew() ! CheckDefAndScriptFailure2(['mapnew("x", "1")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1') ! CheckDefAndScriptFailure2(['mapnew(1, "1")'], 'E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1') enddef def Test_mapset() --- 1925,1932 ---- enddef def Test_mapnew() ! CheckDefAndScriptFailure2(['mapnew("x", "1")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1228: List or Dictionary or Blob required for argument 1') ! CheckDefAndScriptFailure2(['mapnew(1, "1")'], 'E1013: Argument 1: type mismatch, expected list but got number', 'E1228: List or Dictionary or Blob required for argument 1') enddef def Test_mapset() *************** *** 1934,1940 **** enddef def Test_match() ! CheckDefAndScriptFailure2(['match(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['match(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['match("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') CheckDefAndScriptFailure2(['match("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') --- 1936,1942 ---- enddef def Test_match() ! CheckDefAndScriptFailure2(['match(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1') CheckDefAndScriptFailure2(['match(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['match("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') CheckDefAndScriptFailure2(['match("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') *************** *** 1965,1981 **** 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_matchend() ! CheckDefAndScriptFailure2(['matchend(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['matchend(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['matchend("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') CheckDefAndScriptFailure2(['matchend("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') --- 1967,1983 ---- enddef def Test_matcharg() ! CheckDefAndScriptFailure2(['matcharg("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_matchdelete() ! CheckDefAndScriptFailure2(['matchdelete("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['matchdelete("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['matchdelete(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_matchend() ! CheckDefAndScriptFailure2(['matchend(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1') CheckDefAndScriptFailure2(['matchend(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['matchend("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') CheckDefAndScriptFailure2(['matchend("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') *************** *** 2002,2008 **** enddef def Test_matchlist() ! CheckDefAndScriptFailure2(['matchlist(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['matchlist(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['matchlist("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') CheckDefAndScriptFailure2(['matchlist("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') --- 2004,2010 ---- enddef def Test_matchlist() ! CheckDefAndScriptFailure2(['matchlist(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1') CheckDefAndScriptFailure2(['matchlist(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['matchlist("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') CheckDefAndScriptFailure2(['matchlist("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') *************** *** 2020,2026 **** enddef def Test_matchstr() ! CheckDefAndScriptFailure2(['matchstr(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['matchstr(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['matchstr("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') CheckDefAndScriptFailure2(['matchstr("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') --- 2022,2028 ---- enddef def Test_matchstr() ! CheckDefAndScriptFailure2(['matchstr(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1') CheckDefAndScriptFailure2(['matchstr(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['matchstr("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') CheckDefAndScriptFailure2(['matchstr("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') *************** *** 2035,2041 **** enddef def Test_matchstrpos() ! CheckDefAndScriptFailure2(['matchstrpos(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['matchstrpos(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['matchstrpos("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') CheckDefAndScriptFailure2(['matchstrpos("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') --- 2037,2043 ---- enddef def Test_matchstrpos() ! CheckDefAndScriptFailure2(['matchstrpos(0z12, "p")'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1222: String or List required for argument 1') CheckDefAndScriptFailure2(['matchstrpos(["s"], [2])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['matchstrpos("s", "p", "q")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') CheckDefAndScriptFailure2(['matchstrpos("s", "p", 1, "r")'], 'E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4') *************** *** 2063,2075 **** ? [1, max([2, 3])] : [4, 5] assert_equal([4, 5], l2) ! CheckDefAndScriptFailure2(['max(5)'], 'E1013: Argument 1: type mismatch, expected list but got number', 'E712: Argument of max() must be a List or Dictionary') enddef def Test_menu_info() ! CheckDefFailure(['menu_info(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') ! CheckDefFailure(['menu_info(10, "n")'], 'E1013: Argument 1: type mismatch, expected string but got number') ! CheckDefFailure(['menu_info("File", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number') assert_equal({}, menu_info('aMenu')) enddef --- 2065,2077 ---- ? [1, max([2, 3])] : [4, 5] assert_equal([4, 5], l2) ! CheckDefAndScriptFailure2(['max(5)'], 'E1013: Argument 1: type mismatch, expected list but got number', 'E1227: List or Dictionary required for argument 1') enddef def Test_menu_info() ! CheckDefAndScriptFailure2(['menu_info(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['menu_info(10, "n")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['menu_info("File", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') assert_equal({}, menu_info('aMenu')) enddef *************** *** 2085,2114 **** ? [1, min([2, 3])] : [4, 5] assert_equal([4, 5], l2) ! CheckDefAndScriptFailure2(['min(5)'], 'E1013: Argument 1: type mismatch, expected list but got number', 'E712: Argument of min() must be a List or Dictionary') enddef def Test_mkdir() ! CheckDefAndScriptFailure2(['mkdir(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E730: Using a List as a String') ! CheckDefAndScriptFailure2(['mkdir("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', '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_mode() ! CheckDefFailure(['mode("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string') ! CheckDefFailure(['mode(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number') enddef def Test_mzeval() if !has('mzscheme') CheckFeature mzscheme endif ! CheckDefAndScriptFailure2(['mzeval(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E730: Using a List as a String') enddef def Test_nextnonblank() ! CheckDefFailure(['nextnonblank(null)'], 'E1013: Argument 1: type mismatch, expected string but got special') assert_equal(0, nextnonblank(1)) enddef --- 2087,2116 ---- ? [1, min([2, 3])] : [4, 5] assert_equal([4, 5], l2) ! CheckDefAndScriptFailure2(['min(5)'], 'E1013: Argument 1: type mismatch, expected list but got number', 'E1227: List or Dictionary required for argument 1') enddef def Test_mkdir() ! CheckDefAndScriptFailure2(['mkdir(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['mkdir("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['mkdir("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') delete('a', 'rf') enddef def Test_mode() ! CheckDefAndScriptFailure2(['mode("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1') ! CheckDefAndScriptFailure2(['mode(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1') enddef def Test_mzeval() if !has('mzscheme') CheckFeature mzscheme endif ! CheckDefAndScriptFailure2(['mzeval(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') enddef def Test_nextnonblank() ! CheckDefAndScriptFailure2(['nextnonblank(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1') assert_equal(0, nextnonblank(1)) enddef *************** *** 2119,2126 **** 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_pathshorten() --- 2121,2128 ---- enddef def Test_or() ! CheckDefAndScriptFailure2(['or("x", 0x2)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['or(0x1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_pathshorten() *************** *** 2132,2143 **** if !has('perl') CheckFeature perl endif ! CheckDefAndScriptFailure2(['perleval(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E730: Using a List as a String') enddef def Test_popup_atcursor() ! CheckDefAndScriptFailure2(['popup_atcursor({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E450: buffer number, text or a list required') ! CheckDefAndScriptFailure2(['popup_atcursor("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E715: Dictionary required') # Pass variable of type 'any' to popup_atcursor() var what: any = 'Hello' --- 2134,2145 ---- if !has('perl') CheckFeature perl endif ! CheckDefAndScriptFailure2(['perleval(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') enddef def Test_popup_atcursor() ! CheckDefAndScriptFailure2(['popup_atcursor({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String or List required for argument 1') ! CheckDefAndScriptFailure2(['popup_atcursor("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') # Pass variable of type 'any' to popup_atcursor() var what: any = 'Hello' *************** *** 2147,2159 **** enddef def Test_popup_beval() ! CheckDefAndScriptFailure2(['popup_beval({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E450: buffer number, text or a list required') ! CheckDefAndScriptFailure2(['popup_beval("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E715: Dictionary required') enddef def Test_popup_clear() ! CheckDefAndScriptFailure2(['popup_clear(["a"])'], 'E1013: Argument 1: type mismatch, expected bool but got list', 'E745: Using a List as a Number') ! CheckDefAndScriptFailure2(['popup_clear(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1023: Using a Number as a Bool') enddef def Test_popup_close() --- 2149,2161 ---- enddef def Test_popup_beval() ! CheckDefAndScriptFailure2(['popup_beval({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String or List required for argument 1') ! CheckDefAndScriptFailure2(['popup_beval("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') enddef def Test_popup_clear() ! CheckDefAndScriptFailure2(['popup_clear(["a"])'], 'E1013: Argument 1: type mismatch, expected bool but got list', 'E1212: Bool required for argument 1') ! CheckDefAndScriptFailure2(['popup_clear(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1') enddef def Test_popup_close() *************** *** 2169,2176 **** enddef def Test_popup_dialog() ! CheckDefAndScriptFailure2(['popup_dialog({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E450: buffer number, text or a list required') ! CheckDefAndScriptFailure2(['popup_dialog("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E715: Dictionary required') enddef def Test_popup_filter_menu() --- 2171,2178 ---- enddef def Test_popup_dialog() ! CheckDefAndScriptFailure2(['popup_dialog({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String or List required for argument 1') ! CheckDefAndScriptFailure2(['popup_dialog("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') enddef def Test_popup_filter_menu() *************** *** 2184,2211 **** enddef def Test_popup_getoptions() ! CheckDefAndScriptFailure2(['popup_getoptions("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number') ! CheckDefAndScriptFailure2(['popup_getoptions(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1138: Using a Bool as a Number') enddef def Test_popup_getpos() ! CheckDefAndScriptFailure2(['popup_getpos("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number') ! CheckDefAndScriptFailure2(['popup_getpos(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1138: Using a Bool as a Number') enddef def Test_popup_hide() ! CheckDefAndScriptFailure2(['popup_hide("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number') ! CheckDefAndScriptFailure2(['popup_hide(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1138: Using a Bool as a Number') 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_popup_menu() ! CheckDefAndScriptFailure2(['popup_menu({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E450: buffer number, text or a list required') ! CheckDefAndScriptFailure2(['popup_menu("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E715: Dictionary required') enddef def Test_popup_move() --- 2186,2213 ---- enddef def Test_popup_getoptions() ! CheckDefAndScriptFailure2(['popup_getoptions("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['popup_getoptions(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1') enddef def Test_popup_getpos() ! CheckDefAndScriptFailure2(['popup_getpos("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['popup_getpos(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1') enddef def Test_popup_hide() ! CheckDefAndScriptFailure2(['popup_hide("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['popup_hide(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1') enddef def Test_popup_locate() ! CheckDefAndScriptFailure2(['popup_locate("a", 20)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['popup_locate(10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_popup_menu() ! CheckDefAndScriptFailure2(['popup_menu({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String or List required for argument 1') ! CheckDefAndScriptFailure2(['popup_menu("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') enddef def Test_popup_move() *************** *** 2214,2221 **** enddef def Test_popup_notification() ! CheckDefAndScriptFailure2(['popup_notification({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E450: buffer number, text or a list required') ! CheckDefAndScriptFailure2(['popup_notification("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E715: Dictionary required') enddef def Test_popup_setoptions() --- 2216,2223 ---- enddef def Test_popup_notification() ! CheckDefAndScriptFailure2(['popup_notification({"a": 10}, {})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1224: String or List required for argument 1') ! CheckDefAndScriptFailure2(['popup_notification("a", [1, 2])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') enddef def Test_popup_setoptions() *************** *** 2225,2245 **** def Test_popup_settext() CheckDefAndScriptFailure2(['popup_settext("x", [])'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['popup_settext(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') enddef def Test_popup_show() ! CheckDefAndScriptFailure2(['popup_show("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1030: Using a String as a Number') ! CheckDefAndScriptFailure2(['popup_show(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1138: Using a Bool as a Number') enddef def Test_prevnonblank() ! CheckDefFailure(['prevnonblank(null)'], 'E1013: Argument 1: type mismatch, expected string but got special') assert_equal(0, prevnonblank(1)) enddef def Test_printf() ! CheckDefAndScriptFailure2(['printf([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') printf(0x10)->assert_equal('16') assert_equal(" abc", "abc"->printf("%4s")) enddef --- 2227,2247 ---- def Test_popup_settext() CheckDefAndScriptFailure2(['popup_settext("x", [])'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['popup_settext(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1222: String or List required for argument 2') enddef def Test_popup_show() ! CheckDefAndScriptFailure2(['popup_show("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['popup_show(true)'], 'E1013: Argument 1: type mismatch, expected number but got bool', 'E1210: Number required for argument 1') enddef def Test_prevnonblank() ! CheckDefAndScriptFailure2(['prevnonblank(null)'], 'E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1') assert_equal(0, prevnonblank(1)) enddef def Test_printf() ! CheckDefAndScriptFailure2(['printf([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') printf(0x10)->assert_equal('16') assert_equal(" abc", "abc"->printf("%4s")) enddef *************** *** 2248,2254 **** if !has('channel') CheckFeature channel else ! CheckDefFailure(['prompt_getprompt([])'], 'E1013: Argument 1: type mismatch, expected string but got list') assert_equal('', prompt_getprompt('NonExistingBuf')) endif enddef --- 2250,2256 ---- if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['prompt_getprompt([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') assert_equal('', prompt_getprompt('NonExistingBuf')) endif enddef *************** *** 2257,2263 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['prompt_setcallback(true, "1")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') endif enddef --- 2259,2265 ---- if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['prompt_setcallback(true, "1")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') endif enddef *************** *** 2265,2271 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['prompt_setinterrupt(true, "1")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') endif enddef --- 2267,2273 ---- if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['prompt_setinterrupt(true, "1")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') endif enddef *************** *** 2273,2279 **** if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['prompt_setprompt([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['prompt_setprompt(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') endif enddef --- 2275,2281 ---- if !has('channel') CheckFeature channel else ! CheckDefAndScriptFailure2(['prompt_setprompt([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['prompt_setprompt(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') endif enddef *************** *** 2291,2299 **** enddef def Test_prop_find() ! CheckDefAndScriptFailure2(['prop_find([1, 2])'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E715: Dictionary required') ! CheckDefAndScriptFailure2(['prop_find([1, 2], "k")'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E715: Dictionary required') ! CheckDefAndScriptFailure2(['prop_find({"a": 10}, ["a"])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E730: Using a List as a String') enddef def Test_prop_list() --- 2293,2301 ---- enddef def Test_prop_find() ! CheckDefAndScriptFailure2(['prop_find([1, 2])'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1') ! CheckDefAndScriptFailure2(['prop_find([1, 2], "k")'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1') ! CheckDefAndScriptFailure2(['prop_find({"a": 10}, ["a"])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') enddef def Test_prop_list() *************** *** 2308,2371 **** enddef def Test_prop_type_add() ! CheckDefAndScriptFailure2(['prop_type_add({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E731: Using a Dictionary as a String') ! CheckDefAndScriptFailure2(['prop_type_add("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict 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', 'E731: Using a Dictionary as a String') ! CheckDefAndScriptFailure2(['prop_type_change("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict 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', 'E731: Using a Dictionary as a String') ! CheckDefAndScriptFailure2(['prop_type_delete({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E731: Using a Dictionary as a String') ! CheckDefAndScriptFailure2(['prop_type_delete("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict 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', 'E731: Using a Dictionary as a String') ! CheckDefAndScriptFailure2(['prop_type_get({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E731: Using a Dictionary as a String') ! CheckDefAndScriptFailure2(['prop_type_get("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict but got string', 'E715: Dictionary required') enddef def Test_prop_type_list() ! CheckDefAndScriptFailure2(['prop_type_list(["a"])'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E715: Dictionary required') ! CheckDefAndScriptFailure2(['prop_type_list(2)'], 'E1013: Argument 1: type mismatch, expected dict but got number', 'E715: Dictionary required') enddef def Test_py3eval() if !has('python3') CheckFeature python3 endif ! CheckDefAndScriptFailure2(['py3eval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E730: Using a List as a String') enddef def Test_pyeval() if !has('python') CheckFeature python endif ! CheckDefAndScriptFailure2(['pyeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E730: Using a List as a String') enddef def Test_pyxeval() if !has('python') && !has('python3') CheckFeature python endif ! CheckDefAndScriptFailure2(['pyxeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E730: Using a List as a String') enddef def Test_rand() ! CheckDefFailure(['rand(10)'], 'E1013: Argument 1: type mismatch, expected list but got number') CheckDefFailure(['rand(["a"])'], 'E1013: Argument 1: type mismatch, expected list but got list') assert_true(rand() >= 0) 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() --- 2310,2373 ---- enddef def Test_prop_type_add() ! CheckDefAndScriptFailure2(['prop_type_add({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['prop_type_add("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict but got string', 'E1206: Dictionary required for argument 2') enddef def Test_prop_type_change() ! CheckDefAndScriptFailure2(['prop_type_change({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['prop_type_change("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict but got string', 'E1206: Dictionary required for argument 2') enddef def Test_prop_type_delete() ! CheckDefAndScriptFailure2(['prop_type_delete({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['prop_type_delete({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['prop_type_delete("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict but got string', 'E1206: Dictionary required for argument 2') enddef def Test_prop_type_get() ! CheckDefAndScriptFailure2(['prop_type_get({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['prop_type_get({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['prop_type_get("a", "b")'], 'E1013: Argument 2: type mismatch, expected dict but got string', 'E1206: Dictionary required for argument 2') enddef def Test_prop_type_list() ! CheckDefAndScriptFailure2(['prop_type_list(["a"])'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1') ! CheckDefAndScriptFailure2(['prop_type_list(2)'], 'E1013: Argument 1: type mismatch, expected dict but got number', 'E1206: Dictionary required for argument 1') enddef def Test_py3eval() if !has('python3') CheckFeature python3 endif ! CheckDefAndScriptFailure2(['py3eval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') enddef def Test_pyeval() if !has('python') CheckFeature python endif ! CheckDefAndScriptFailure2(['pyeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') enddef def Test_pyxeval() if !has('python') && !has('python3') CheckFeature python endif ! CheckDefAndScriptFailure2(['pyxeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') enddef def Test_rand() ! CheckDefAndScriptFailure2(['rand(10)'], 'E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1') CheckDefFailure(['rand(["a"])'], 'E1013: Argument 1: type mismatch, expected list but got list') assert_true(rand() >= 0) assert_true(rand(srand()) >= 0) enddef def Test_range() ! CheckDefAndScriptFailure2(['range("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['range(10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') ! CheckDefAndScriptFailure2(['range(10, 20, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') enddef def Test_readdir() *************** *** 2405,2412 **** CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected dict but got list', 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_reduce() --- 2407,2414 ---- CheckDefAndScriptFailure(lines, 'E1012: Type mismatch; expected dict but got list', 1) delete('Xreadfile') ! CheckDefAndScriptFailure2(['readfile("a", 0z10)'], 'E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['readfile("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') enddef def Test_reduce() *************** *** 2421,2429 **** CheckDefExecAndScriptFailure(['[]->reltime()'], 'E474:') CheckDefExecAndScriptFailure(['[]->reltime([])'], 'E474:') ! CheckDefFailure(['reltime("x")'], 'E1013: Argument 1: type mismatch, expected list but got string') CheckDefFailure(['reltime(["x", "y"])'], 'E1013: Argument 1: type mismatch, expected list but got list') ! CheckDefFailure(['reltime([1, 2], 10)'], 'E1013: Argument 2: type mismatch, expected list but got number') CheckDefFailure(['reltime([1, 2], ["a", "b"])'], 'E1013: Argument 2: type mismatch, expected list but got list') var start: list = reltime() assert_true(type(reltime(start)) == v:t_list) --- 2423,2431 ---- CheckDefExecAndScriptFailure(['[]->reltime()'], 'E474:') CheckDefExecAndScriptFailure(['[]->reltime([])'], 'E474:') ! CheckDefAndScriptFailure2(['reltime("x")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1') CheckDefFailure(['reltime(["x", "y"])'], 'E1013: Argument 1: type mismatch, expected list but got list') ! CheckDefAndScriptFailure2(['reltime([1, 2], 10)'], 'E1013: Argument 2: type mismatch, expected list but got number', 'E1211: List required for argument 2') CheckDefFailure(['reltime([1, 2], ["a", "b"])'], 'E1013: Argument 2: type mismatch, expected list but got list') var start: list = reltime() assert_true(type(reltime(start)) == v:t_list) *************** *** 2436,2442 **** CheckDefExecAndScriptFailure(['[]->reltimefloat()'], 'E474:') ! CheckDefFailure(['reltimefloat("x")'], 'E1013: Argument 1: type mismatch, expected list but got string') CheckDefFailure(['reltimefloat([1.1])'], 'E1013: Argument 1: type mismatch, expected list but got list') assert_true(type(reltimefloat(reltime())) == v:t_float) enddef --- 2438,2444 ---- CheckDefExecAndScriptFailure(['[]->reltimefloat()'], 'E474:') ! CheckDefAndScriptFailure2(['reltimefloat("x")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1') CheckDefFailure(['reltimefloat([1.1])'], 'E1013: Argument 1: type mismatch, expected list but got list') assert_true(type(reltimefloat(reltime())) == v:t_float) enddef *************** *** 2446,2452 **** CheckDefExecAndScriptFailure(['[]->reltimestr()'], 'E474:') ! CheckDefFailure(['reltimestr(true)'], 'E1013: Argument 1: type mismatch, expected list but got bool') CheckDefFailure(['reltimestr([true])'], 'E1013: Argument 1: type mismatch, expected list but got list') assert_true(type(reltimestr(reltime())) == v:t_string) enddef --- 2448,2454 ---- CheckDefExecAndScriptFailure(['[]->reltimestr()'], 'E474:') ! CheckDefAndScriptFailure2(['reltimestr(true)'], 'E1013: Argument 1: type mismatch, expected list but got bool', 'E1211: List required for argument 1') CheckDefFailure(['reltimestr([true])'], 'E1013: Argument 1: type mismatch, expected list but got list') assert_true(type(reltimestr(reltime())) == v:t_string) enddef *************** *** 2466,2480 **** CheckNotMSWindows CheckEnv DISPLAY ! CheckDefFailure(['remote_foreground(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') 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', 'E573: Invalid server id used') enddef def Test_remote_read() --- 2468,2482 ---- CheckNotMSWindows CheckEnv DISPLAY ! CheckDefAndScriptFailure2(['remote_foreground(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') 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', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['remote_peek("a5b6c7", [1])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') enddef def Test_remote_read() *************** *** 2495,2501 **** def Test_remote_startserver() CheckFeature clientserver CheckEnv DISPLAY ! CheckDefFailure(['remote_startserver({})'], 'E1013: Argument 1: type mismatch, expected string but got dict') enddef def Test_remove_const_list() --- 2497,2503 ---- def Test_remote_startserver() CheckFeature clientserver CheckEnv DISPLAY ! CheckDefAndScriptFailure2(['remote_startserver({})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') enddef def Test_remove_const_list() *************** *** 2505,2514 **** enddef def Test_remove() ! CheckDefAndScriptFailure2(['remove("a", 1)'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1') CheckDefAndScriptFailure2(['remove([], "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') CheckDefAndScriptFailure2(['remove([], 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') ! CheckDefAndScriptFailure2(['remove({}, 1.1)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['remove(0z10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') CheckDefAndScriptFailure2(['remove(0z20, 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') var l: any = [1, 2, 3, 4] --- 2507,2516 ---- enddef def Test_remove() ! CheckDefAndScriptFailure2(['remove("a", 1)'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1228: List or Dictionary or Blob required for argument 1') CheckDefAndScriptFailure2(['remove([], "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') CheckDefAndScriptFailure2(['remove([], 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') ! CheckDefAndScriptFailure2(['remove({}, 1.1)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2') CheckDefAndScriptFailure2(['remove(0z10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') CheckDefAndScriptFailure2(['remove(0z20, 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') var l: any = [1, 2, 3, 4] *************** *** 2539,2564 **** enddef def Test_rename() ! CheckDefFailure(['rename(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number') ! CheckDefFailure(['rename("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number') enddef def Test_repeat() ! CheckDefAndScriptFailure2(['repeat(1.1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['repeat({a: 10}, 2)'], 'E1013: Argument 1: type mismatch, expected string but got dict<', 'E1174: String required for argument 1') assert_equal('aaa', repeat('a', 3)) assert_equal('111', repeat(1, 3)) assert_equal([1, 1, 1], repeat([1], 3)) enddef def Test_resolve() ! CheckDefFailure(['resolve([])'], 'E1013: Argument 1: type mismatch, expected string but got list') assert_equal('SomeFile', resolve('SomeFile')) enddef def Test_reverse() ! CheckDefAndScriptFailure2(['reverse(10)'], 'E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1') ! CheckDefAndScriptFailure2(['reverse("abc")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1') enddef def Test_reverse_return_type() --- 2541,2566 ---- enddef def Test_rename() ! CheckDefAndScriptFailure2(['rename(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['rename("a", 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') enddef def Test_repeat() ! CheckDefAndScriptFailure2(['repeat(1.1, 2)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1224: String or List required for argument 1') ! CheckDefAndScriptFailure2(['repeat({a: 10}, 2)'], 'E1013: Argument 1: type mismatch, expected string but got dict<', 'E1224: String or List required for argument 1') assert_equal('aaa', repeat('a', 3)) assert_equal('111', repeat(1, 3)) assert_equal([1, 1, 1], repeat([1], 3)) enddef def Test_resolve() ! CheckDefAndScriptFailure2(['resolve([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') assert_equal('SomeFile', resolve('SomeFile')) enddef def Test_reverse() ! CheckDefAndScriptFailure2(['reverse(10)'], 'E1013: Argument 1: type mismatch, expected list but got number', 'E1226: String or List required for argument 1') ! CheckDefAndScriptFailure2(['reverse("abc")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1226: String or List required for argument 1') enddef def Test_reverse_return_type() *************** *** 2574,2607 **** if !has('ruby') CheckFeature ruby endif ! CheckDefAndScriptFailure2(['rubyeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E730: Using a List as a String') 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() ! CheckDefFailure(['screenpos("a", 1, 1)'], 'E1013: Argument 1: type mismatch, expected number but got string') ! CheckDefFailure(['screenpos(1, "b", 1)'], 'E1013: Argument 2: type mismatch, expected number but got string') ! CheckDefFailure(['screenpos(1, 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string') assert_equal({col: 1, row: 1, endcol: 1, curscol: 1}, screenpos(1, 1, 1)) enddef def Test_screenstring() ! CheckDefFailure(['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() --- 2576,2609 ---- if !has('ruby') CheckFeature ruby endif ! CheckDefAndScriptFailure2(['rubyeval([2])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') enddef def Test_screenattr() ! CheckDefAndScriptFailure2(['screenattr("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['screenattr(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_screenchar() ! CheckDefAndScriptFailure2(['screenchar("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['screenchar(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_screenchars() ! CheckDefAndScriptFailure2(['screenchars("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['screenchars(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_screenpos() ! CheckDefAndScriptFailure2(['screenpos("a", 1, 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['screenpos(1, "b", 1)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') ! CheckDefAndScriptFailure2(['screenpos(1, 1, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') assert_equal({col: 1, row: 1, endcol: 1, curscol: 1}, screenpos(1, 1, 1)) enddef def Test_screenstring() ! CheckDefAndScriptFailure2(['screenstring("x", 1)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['screenstring(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_search() *************** *** 2651,2657 **** maxcount: 99, incomplete: 0}) bwipe! ! CheckDefAndScriptFailure2(['searchcount([1])'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E715: Dictionary required') enddef def Test_searchdecl() --- 2653,2659 ---- maxcount: 99, incomplete: 0}) bwipe! ! CheckDefAndScriptFailure2(['searchcount([1])'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1') enddef def Test_searchdecl() *************** *** 2720,2727 **** 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_shellescape() --- 2722,2729 ---- def Test_server2client() CheckFeature clientserver CheckEnv DISPLAY ! CheckDefAndScriptFailure2(['server2client(10, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['server2client("a", 10)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') enddef def Test_shellescape() *************** *** 2803,2809 **** setbufvar('%', 'myvar', 123) getbufvar('%', 'myvar')->assert_equal(123) ! CheckDefAndScriptFailure2(['setbufvar(true, "v", 3)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['setbufvar(1, 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') enddef --- 2805,2811 ---- setbufvar('%', 'myvar', 123) getbufvar('%', 'myvar')->assert_equal(123) ! CheckDefAndScriptFailure2(['setbufvar(true, "v", 3)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['setbufvar(1, 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') enddef *************** *** 2816,2831 **** setbufline(bnum, 5, 10) setbufline(bnum, 6, ['two', 11]) assert_equal(['1', '2', '3', 'one', '10', 'two', '11'], getbufline(bnum, 1, '$')) ! CheckDefFailure(['setbufline([1], 1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got list') ! CheckDefFailure(['setbufline(1, [1], "x")'], 'E1013: Argument 2: type mismatch, expected string but got list') ! CheckDefFailure(['setbufline(1, 1, {"a": 10})'], 'E1013: Argument 3: type mismatch, expected string but got dict') bnum->bufwinid()->win_gotoid() bw! enddef def Test_setcellwidths() ! CheckDefAndScriptFailure2(['setcellwidths(1)'], 'E1013: Argument 1: type mismatch, expected list but got number', 'E714: List required') ! CheckDefAndScriptFailure2(['setcellwidths({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list but got dict', 'E714: List required') enddef def Test_setcharpos() --- 2818,2833 ---- setbufline(bnum, 5, 10) setbufline(bnum, 6, ['two', 11]) assert_equal(['1', '2', '3', 'one', '10', 'two', '11'], getbufline(bnum, 1, '$')) ! CheckDefAndScriptFailure2(['setbufline([1], 1, "x")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') ! CheckDefAndScriptFailure2(['setbufline(1, [1], "x")'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1220: String or Number required for argument 2') ! CheckDefAndScriptFailure2(['setbufline(1, 1, {"a": 10})'], 'E1013: Argument 3: type mismatch, expected string but got dict', 'E1224: String or List required for argument 3') bnum->bufwinid()->win_gotoid() bw! enddef def Test_setcellwidths() ! CheckDefAndScriptFailure2(['setcellwidths(1)'], 'E1013: Argument 1: type mismatch, expected list but got number', 'E1211: List required for argument 1') ! CheckDefAndScriptFailure2(['setcellwidths({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1') enddef def Test_setcharpos() *************** *** 2835,2853 **** enddef def Test_setcharsearch() ! CheckDefFailure(['setcharsearch("x")'], 'E1013: Argument 1: type mismatch, expected dict but got string') ! CheckDefFailure(['setcharsearch([])'], 'E1013: Argument 1: type mismatch, expected dict but got list') var d: dict = {char: 'x', forward: 1, until: 1} setcharsearch(d) assert_equal(d, getcharsearch()) enddef def Test_setcmdpos() ! CheckDefFailure(['setcmdpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') enddef def Test_setcursorcharpos() ! CheckDefAndScriptFailure2(['setcursorcharpos(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected number but got blob', 'E1210: Number required for argument 1') CheckDefAndScriptFailure2(['setcursorcharpos(1, "2")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') CheckDefAndScriptFailure2(['setcursorcharpos(1, 2, "3")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') enddef --- 2837,2855 ---- enddef def Test_setcharsearch() ! CheckDefAndScriptFailure2(['setcharsearch("x")'], 'E1013: Argument 1: type mismatch, expected dict but got string', 'E1206: Dictionary required for argument 1') ! CheckDefAndScriptFailure2(['setcharsearch([])'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1') var d: dict = {char: 'x', forward: 1, until: 1} setcharsearch(d) assert_equal(d, getcharsearch()) enddef def Test_setcmdpos() ! CheckDefAndScriptFailure2(['setcmdpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_setcursorcharpos() ! CheckDefAndScriptFailure2(['setcursorcharpos(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected number but got blob', 'E1224: String or List required for argument 1') CheckDefAndScriptFailure2(['setcursorcharpos(1, "2")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') CheckDefAndScriptFailure2(['setcursorcharpos(1, 2, "3")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') enddef *************** *** 2857,2864 **** enddef def Test_setfperm() ! CheckDefFailure(['setfperm(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number') ! CheckDefFailure(['setfperm("a", 0z10)'], 'E1013: Argument 2: type mismatch, expected string but got blob') enddef def Test_setline() --- 2859,2866 ---- enddef def Test_setfperm() ! CheckDefAndScriptFailure2(['setfperm(1, "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['setfperm("a", 0z10)'], 'E1013: Argument 2: type mismatch, expected string but got blob', 'E1174: String required for argument 2') enddef def Test_setline() *************** *** 2871,2877 **** assert_equal(['one', 'b', 'c', 'd'], getline(1, '$')) setline(1, 10) assert_equal(['10', 'b', 'c', 'd'], getline(1, '$')) ! CheckDefAndScriptFailure2(['setline([1], "x")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E745: Using a List as a Number') bw! enddef --- 2873,2879 ---- assert_equal(['one', 'b', 'c', 'd'], getline(1, '$')) setline(1, 10) assert_equal(['10', 'b', 'c', 'd'], getline(1, '$')) ! CheckDefAndScriptFailure2(['setline([1], "x")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') bw! enddef *************** *** 2936,2953 **** enddef def Test_sha256() ! CheckDefFailure(['sha256(100)'], 'E1013: Argument 1: type mismatch, expected string but got number') ! CheckDefFailure(['sha256(0zABCD)'], 'E1013: Argument 1: type mismatch, expected string but got blob') assert_equal('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad', sha256('abc')) enddef def Test_shiftwidth() ! CheckDefFailure(['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', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['sign_define({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['sign_define("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') enddef --- 2938,2955 ---- enddef def Test_sha256() ! CheckDefAndScriptFailure2(['sha256(100)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['sha256(0zABCD)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') assert_equal('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad', sha256('abc')) enddef def Test_shiftwidth() ! CheckDefAndScriptFailure2(['shiftwidth("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_sign_define() ! CheckDefAndScriptFailure2(['sign_define({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1') ! CheckDefAndScriptFailure2(['sign_define({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1') CheckDefAndScriptFailure2(['sign_define("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') enddef *************** *** 2957,2963 **** enddef def Test_sign_getplaced() ! CheckDefAndScriptFailure2(['sign_getplaced(["x"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['sign_getplaced(1, ["a"])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') CheckDefAndScriptFailure2(['sign_getplaced("a", 1.1)'], 'E1013: Argument 2: type mismatch, expected dict but got float', 'E1206: Dictionary required for argument 2') enddef --- 2959,2965 ---- enddef def Test_sign_getplaced() ! CheckDefAndScriptFailure2(['sign_getplaced(["x"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['sign_getplaced(1, ["a"])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') CheckDefAndScriptFailure2(['sign_getplaced("a", 1.1)'], 'E1013: Argument 2: type mismatch, expected dict but got float', 'E1206: Dictionary required for argument 2') enddef *************** *** 2965,3004 **** def Test_sign_jump() CheckDefAndScriptFailure2(['sign_jump("a", "b", "c")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') CheckDefAndScriptFailure2(['sign_jump(1, 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['sign_jump(1, "b", true)'], 'E1013: Argument 3: type mismatch, expected string but got bool', 'E1174: String required for argument 3') enddef def Test_sign_place() CheckDefAndScriptFailure2(['sign_place("a", "b", "c", "d")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') CheckDefAndScriptFailure2(['sign_place(1, 2, "c", "d")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['sign_place(1, "b", 3, "d")'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') ! CheckDefAndScriptFailure2(['sign_place(1, "b", "c", 1.1)'], 'E1013: Argument 4: type mismatch, expected string but got float', 'E1174: String required for argument 4') CheckDefAndScriptFailure2(['sign_place(1, "b", "c", "d", [1])'], 'E1013: Argument 5: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 5') enddef def Test_sign_placelist() ! CheckDefAndScriptFailure2(['sign_placelist("x")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E714: List required') ! CheckDefAndScriptFailure2(['sign_placelist({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list but got dict', 'E714: List required') enddef def Test_sign_undefine() ! CheckDefAndScriptFailure2(['sign_undefine({})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E731: Using a Dictionary as a String') CheckDefAndScriptFailure2(['sign_undefine([1])'], 'E1013: Argument 1: type mismatch, expected list but got list', 'E155: Unknown sign:') enddef def Test_sign_unplace() ! CheckDefAndScriptFailure2(['sign_unplace({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E474: Invalid argument') ! CheckDefAndScriptFailure2(['sign_unplace({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E474: Invalid argument') ! CheckDefAndScriptFailure2(['sign_unplace("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E715: Dictionary required') enddef def Test_sign_unplacelist() ! CheckDefAndScriptFailure2(['sign_unplacelist("x")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E714: List required') ! CheckDefAndScriptFailure2(['sign_unplacelist({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list but got dict', 'E714: List required') enddef def Test_simplify() ! CheckDefFailure(['simplify(100)'], 'E1013: Argument 1: type mismatch, expected string but got number') call assert_equal('NonExistingFile', simplify('NonExistingFile')) enddef --- 2967,3006 ---- def Test_sign_jump() CheckDefAndScriptFailure2(['sign_jump("a", "b", "c")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') CheckDefAndScriptFailure2(['sign_jump(1, 2, 3)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['sign_jump(1, "b", true)'], 'E1013: Argument 3: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 3') enddef def Test_sign_place() CheckDefAndScriptFailure2(['sign_place("a", "b", "c", "d")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') CheckDefAndScriptFailure2(['sign_place(1, 2, "c", "d")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['sign_place(1, "b", 3, "d")'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') ! CheckDefAndScriptFailure2(['sign_place(1, "b", "c", 1.1)'], 'E1013: Argument 4: type mismatch, expected string but got float', 'E1220: String or Number required for argument 4') CheckDefAndScriptFailure2(['sign_place(1, "b", "c", "d", [1])'], 'E1013: Argument 5: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 5') enddef def Test_sign_placelist() ! CheckDefAndScriptFailure2(['sign_placelist("x")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1') ! CheckDefAndScriptFailure2(['sign_placelist({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1') enddef def Test_sign_undefine() ! CheckDefAndScriptFailure2(['sign_undefine({})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1') CheckDefAndScriptFailure2(['sign_undefine([1])'], 'E1013: Argument 1: type mismatch, expected list but got list', 'E155: Unknown sign:') enddef def Test_sign_unplace() ! CheckDefAndScriptFailure2(['sign_unplace({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['sign_unplace({"a": 10}, "b")'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['sign_unplace("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') enddef def Test_sign_unplacelist() ! CheckDefAndScriptFailure2(['sign_unplacelist("x")'], 'E1013: Argument 1: type mismatch, expected list but got string', 'E1211: List required for argument 1') ! CheckDefAndScriptFailure2(['sign_unplacelist({"a": 10})'], 'E1013: Argument 1: type mismatch, expected list but got dict', 'E1211: List required for argument 1') enddef def Test_simplify() ! CheckDefAndScriptFailure2(['simplify(100)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') call assert_equal('NonExistingFile', simplify('NonExistingFile')) enddef *************** *** 3051,3061 **** def Test_sound_stop() CheckFeature sound ! CheckDefFailure(['sound_stop("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') enddef def Test_soundfold() ! CheckDefFailure(['soundfold(20)'], 'E1013: Argument 1: type mismatch, expected string but got number') assert_equal('abc', soundfold('abc')) enddef --- 3053,3063 ---- def Test_sound_stop() CheckFeature sound ! CheckDefAndScriptFailure2(['sound_stop("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_soundfold() ! CheckDefAndScriptFailure2(['soundfold(20)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') assert_equal('abc', soundfold('abc')) enddef *************** *** 3082,3088 **** enddef def Test_spellbadword() ! CheckDefFailure(['spellbadword(100)'], 'E1013: Argument 1: type mismatch, expected string but got number') spellbadword('good')->assert_equal(['', '']) enddef --- 3084,3090 ---- enddef def Test_spellbadword() ! CheckDefAndScriptFailure2(['spellbadword(100)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') spellbadword('good')->assert_equal(['', '']) enddef *************** *** 3094,3105 **** enddef def Test_srand() ! CheckDefFailure(['srand("a")'], 'E1013: Argument 1: type mismatch, expected number but got string') type(srand(100))->assert_equal(v:t_list) enddef def Test_state() ! CheckDefFailure(['state({})'], 'E1013: Argument 1: type mismatch, expected string but got dict') assert_equal('', state('a')) enddef --- 3096,3107 ---- enddef def Test_srand() ! CheckDefAndScriptFailure2(['srand("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') type(srand(100))->assert_equal(v:t_list) enddef def Test_state() ! CheckDefAndScriptFailure2(['state({})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') assert_equal('', state('a')) enddef *************** *** 3110,3117 **** 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 --- 3112,3118 ---- str2float("1.00")->assert_equal(1.00) str2float("2e-2")->assert_equal(0.02) ! CheckDefAndScriptFailure2(['str2float(123)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') endif enddef *************** *** 3126,3141 **** 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 def Test_strcharlen() ! CheckDefAndScriptFailure2(['strcharlen([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E730: Using a List as a String') "abc"->strcharlen()->assert_equal(3) strcharlen(99)->assert_equal(2) enddef --- 3127,3139 ---- def Test_str2nr() str2nr("1'000'000", 10, true)->assert_equal(1000000) ! CheckDefAndScriptFailure2(['str2nr(123)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['str2nr("123", "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') ! CheckDefAndScriptFailure2(['str2nr("123", 10, "x")'], 'E1013: Argument 3: type mismatch, expected bool but got string', 'E1212: Bool required for argument 3') enddef def Test_strcharlen() ! CheckDefAndScriptFailure2(['strcharlen([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') "abc"->strcharlen()->assert_equal(3) strcharlen(99)->assert_equal(2) enddef *************** *** 3172,3184 **** enddef def Test_stridx() ! CheckDefAndScriptFailure2(['stridx([1], "b")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E730: Using a List as a String') ! CheckDefAndScriptFailure2(['stridx("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', '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') "abc"->strlen()->assert_equal(3) strlen(99)->assert_equal(2) enddef --- 3170,3182 ---- enddef def Test_stridx() ! CheckDefAndScriptFailure2(['stridx([1], "b")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['stridx("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['stridx("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') enddef def Test_strlen() ! CheckDefAndScriptFailure2(['strlen([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') "abc"->strlen()->assert_equal(3) strlen(99)->assert_equal(2) enddef *************** *** 3192,3199 **** def Test_strptime() CheckFunction strptime ! CheckDefFailure(['strptime(10, "2021")'], 'E1013: Argument 1: type mismatch, expected string but got number') ! CheckDefFailure(['strptime("%Y", 2021)'], 'E1013: Argument 2: type mismatch, expected string but got number') # BUG: Directly calling strptime() in this function gives an "E117: Unknown # function" error on MS-Windows even with the above CheckFunction call for # strptime(). --- 3190,3197 ---- def Test_strptime() CheckFunction strptime ! CheckDefAndScriptFailure2(['strptime(10, "2021")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['strptime("%Y", 2021)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') # BUG: Directly calling strptime() in this function gives an "E117: Unknown # function" error on MS-Windows even with the above CheckFunction call for # strptime(). *************** *** 3201,3219 **** enddef def Test_strridx() ! CheckDefAndScriptFailure2(['strridx([1], "b")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E730: Using a List as a String') ! CheckDefAndScriptFailure2(['strridx("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', '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')) enddef def Test_strwidth() ! CheckDefFailure(['strwidth(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') ! CheckScriptFailure(['vim9script', 'echo strwidth(10)'], 'E1024:') assert_equal(4, strwidth('abcd')) enddef --- 3199,3216 ---- enddef def Test_strridx() ! CheckDefAndScriptFailure2(['strridx([1], "b")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['strridx("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['strridx("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') enddef def Test_strtrans() ! CheckDefAndScriptFailure2(['strtrans(20)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') assert_equal('abc', strtrans('abc')) enddef def Test_strwidth() ! CheckDefAndScriptFailure2(['strwidth(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') assert_equal(4, strwidth('abcd')) enddef *************** *** 3241,3252 **** enddef def Test_swapinfo() ! CheckDefFailure(['swapinfo({})'], 'E1013: Argument 1: type mismatch, expected string but got dict') call assert_equal({error: 'Cannot open file'}, swapinfo('x')) enddef def Test_swapname() ! CheckDefFailure(['swapname([])'], 'E1013: Argument 1: type mismatch, expected string but got list') assert_fails('swapname("NonExistingBuf")', 'E94:') enddef --- 3238,3249 ---- enddef def Test_swapinfo() ! CheckDefAndScriptFailure2(['swapinfo({})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') call assert_equal({error: 'Cannot open file'}, swapinfo('x')) enddef def Test_swapname() ! CheckDefAndScriptFailure2(['swapname([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') assert_fails('swapname("NonExistingBuf")', 'E94:') enddef *************** *** 3255,3261 **** setline(1, "text") synID(1, 1, true)->assert_equal(0) bwipe! ! CheckDefAndScriptFailure2(['synID(0z10, 1, true)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['synID("a", true, false)'], 'E1013: Argument 2: type mismatch, expected number but got bool', 'E1210: Number required for argument 2') CheckDefAndScriptFailure2(['synID(1, 1, 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') enddef --- 3252,3258 ---- setline(1, "text") synID(1, 1, true)->assert_equal(0) bwipe! ! CheckDefAndScriptFailure2(['synID(0z10, 1, true)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['synID("a", true, false)'], 'E1013: Argument 2: type mismatch, expected number but got bool', 'E1210: Number required for argument 2') CheckDefAndScriptFailure2(['synID(1, 1, 2)'], 'E1013: Argument 3: type mismatch, expected bool but got number', 'E1212: Bool required for argument 3') enddef *************** *** 3267,3303 **** enddef def Test_synIDtrans() ! CheckDefFailure(['synIDtrans("a")'], 'E1013: Argument 1: type mismatch, expected number but got string') enddef def Test_synconcealed() ! CheckDefAndScriptFailure2(['synconcealed(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['synconcealed(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_synstack() ! CheckDefAndScriptFailure2(['synstack(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['synstack(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_system() CheckDefAndScriptFailure2(['system(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['system("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', 'E1174: String required for argument 2') enddef def Test_systemlist() CheckDefAndScriptFailure2(['systemlist(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['systemlist("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', 'E1174: String required for argument 2') enddef def Test_tabpagebuflist() ! CheckDefFailure(['tabpagebuflist("t")'], 'E1013: Argument 1: type mismatch, expected number but got string') assert_equal([bufnr('')], tabpagebuflist()) assert_equal([bufnr('')], tabpagebuflist(1)) enddef def Test_tabpagenr() ! 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 --- 3264,3300 ---- enddef def Test_synIDtrans() ! CheckDefAndScriptFailure2(['synIDtrans("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_synconcealed() ! CheckDefAndScriptFailure2(['synconcealed(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['synconcealed(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_synstack() ! CheckDefAndScriptFailure2(['synstack(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['synstack(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_system() CheckDefAndScriptFailure2(['system(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['system("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', 'E1224: String or List required for argument 2') enddef def Test_systemlist() CheckDefAndScriptFailure2(['systemlist(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['systemlist("a", {})'], 'E1013: Argument 2: type mismatch, expected string but got dict', 'E1224: String or List required for argument 2') enddef def Test_tabpagebuflist() ! CheckDefAndScriptFailure2(['tabpagebuflist("t")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') assert_equal([bufnr('')], tabpagebuflist()) assert_equal([bufnr('')], tabpagebuflist(1)) enddef def Test_tabpagenr() ! CheckDefAndScriptFailure2(['tabpagenr(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') assert_equal(1, tabpagenr('$')) assert_equal(1, tabpagenr()) enddef *************** *** 3308,3315 **** enddef def Test_taglist() ! CheckDefAndScriptFailure2(['taglist([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E730: Using a List as a String') ! CheckDefAndScriptFailure2(['taglist("a", [2])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E730: Using a List as a String') enddef def Test_term_dumpload() --- 3305,3312 ---- enddef def Test_taglist() ! CheckDefAndScriptFailure2(['taglist([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['taglist("a", [2])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') enddef def Test_term_dumpload() *************** *** 3328,3347 **** def Test_term_dumpwrite() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_dumpwrite(true, "b")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['term_dumpwrite(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['term_dumpwrite("a", "b", [1])'], 'E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3') 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 CheckFeature termguicolors ! CheckDefAndScriptFailure2(['term_getansicolors(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E745: Using a List as a Number') enddef def Test_term_getattr() --- 3325,3344 ---- def Test_term_dumpwrite() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_dumpwrite(true, "b")'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['term_dumpwrite(1, 2)'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') CheckDefAndScriptFailure2(['term_dumpwrite("a", "b", [1])'], 'E1013: Argument 3: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 3') enddef def Test_term_getaltscreen() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_getaltscreen(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1') enddef def Test_term_getansicolors() CheckRunVimInTerminal CheckFeature termguicolors ! CheckDefAndScriptFailure2(['term_getansicolors(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') enddef def Test_term_getattr() *************** *** 3352,3389 **** def Test_term_getcursor() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_getcursor({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict', '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_getline() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_getline(1.1, 1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['term_getline(1, 1.1)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1174: String required for argument 2') 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() --- 3349,3386 ---- def Test_term_getcursor() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_getcursor({"a": 10})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1220: String or Number required for argument 1') enddef def Test_term_getjob() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_getjob(0z10)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1') enddef def Test_term_getline() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_getline(1.1, 1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') ! CheckDefAndScriptFailure2(['term_getline(1, 1.1)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2') enddef def Test_term_getscrolled() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_getscrolled(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') enddef def Test_term_getsize() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_getsize(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') enddef def Test_term_getstatus() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_getstatus(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') enddef def Test_term_gettitle() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_gettitle(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') enddef def Test_term_gettty() *************** *** 3394,3412 **** term_gettty(buf, true)->assert_notequal('') StopShellInTerminal(buf) endif ! CheckDefAndScriptFailure2(['term_gettty([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['term_gettty(1, 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') enddef def Test_term_scrape() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_scrape(1.1, 1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['term_scrape(1, 1.1)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1174: String required for argument 2') enddef def Test_term_sendkeys() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_sendkeys([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['term_sendkeys(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') enddef --- 3391,3409 ---- term_gettty(buf, true)->assert_notequal('') StopShellInTerminal(buf) endif ! CheckDefAndScriptFailure2(['term_gettty([1])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['term_gettty(1, 2)'], 'E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2') enddef def Test_term_scrape() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_scrape(1.1, 1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') ! CheckDefAndScriptFailure2(['term_scrape(1, 1.1)'], 'E1013: Argument 2: type mismatch, expected string but got float', 'E1220: String or Number required for argument 2') enddef def Test_term_sendkeys() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_sendkeys([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['term_sendkeys(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') enddef *************** *** 3414,3420 **** CheckRunVimInTerminal if has('termguicolors') || has('gui') ! CheckDefAndScriptFailure2(['term_setansicolors([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['term_setansicolors(10, {})'], 'E1013: Argument 2: type mismatch, expected list but got dict', 'E1211: List required for argument 2') else throw 'Skipped: Only works with termguicolors or gui feature' --- 3411,3417 ---- CheckRunVimInTerminal if has('termguicolors') || has('gui') ! CheckDefAndScriptFailure2(['term_setansicolors([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['term_setansicolors(10, {})'], 'E1013: Argument 2: type mismatch, expected list but got dict', 'E1211: List required for argument 2') else throw 'Skipped: Only works with termguicolors or gui feature' *************** *** 3423,3447 **** def Test_term_setapi() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_setapi([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['term_setapi(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') enddef def Test_term_setkill() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_setkill([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['term_setkill(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') enddef def Test_term_setrestore() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_setrestore([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['term_setrestore(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') enddef def Test_term_setsize() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_setsize(1.1, 2, 3)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['term_setsize(1, "2", 3)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') CheckDefAndScriptFailure2(['term_setsize(1, 2, "3")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') enddef --- 3420,3444 ---- def Test_term_setapi() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_setapi([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['term_setapi(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') enddef def Test_term_setkill() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_setkill([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['term_setkill(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') enddef def Test_term_setrestore() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_setrestore([], "p")'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['term_setrestore(1, [])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') enddef def Test_term_setsize() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_setsize(1.1, 2, 3)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['term_setsize(1, "2", 3)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') CheckDefAndScriptFailure2(['term_setsize(1, 2, "3")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') enddef *************** *** 3456,3485 **** winnr()->assert_equal(winnr) bwipe! endif ! CheckDefAndScriptFailure2(['term_start({})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['term_start([], [])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') CheckDefAndScriptFailure2(['term_start("", "")'], 'E1013: Argument 2: type mismatch, expected dict but got string', 'E1206: Dictionary required for argument 2') enddef def Test_term_wait() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_wait(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1174: String required for argument 1') CheckDefAndScriptFailure2(['term_wait(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') 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', '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_gui_drop_files() --- 3453,3482 ---- winnr()->assert_equal(winnr) bwipe! endif ! CheckDefAndScriptFailure2(['term_start({})'], 'E1013: Argument 1: type mismatch, expected string but got dict', 'E1222: String or List required for argument 1') CheckDefAndScriptFailure2(['term_start([], [])'], 'E1013: Argument 2: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 2') CheckDefAndScriptFailure2(['term_start("", "")'], 'E1013: Argument 2: type mismatch, expected dict but got string', 'E1206: Dictionary required for argument 2') enddef def Test_term_wait() CheckRunVimInTerminal ! CheckDefAndScriptFailure2(['term_wait(0z10, 1)'], 'E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1') CheckDefAndScriptFailure2(['term_wait(1, "a")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_test_alloc_fail() ! CheckDefAndScriptFailure2(['test_alloc_fail("a", 10, 20)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['test_alloc_fail(10, "b", 20)'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') ! CheckDefAndScriptFailure2(['test_alloc_fail(10, 20, "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') enddef def Test_test_feedinput() ! CheckDefAndScriptFailure2(['test_feedinput(test_void())'], 'E1013: Argument 1: type mismatch, expected string but got void', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['test_feedinput(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') enddef def Test_test_getvalue() ! CheckDefAndScriptFailure2(['test_getvalue(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1174: String required for argument 1') enddef def Test_test_gui_drop_files() *************** *** 3500,3511 **** enddef def Test_test_ignore_error() ! CheckDefAndScriptFailure2(['test_ignore_error([])'], 'E1013: Argument 1: type mismatch, expected string but got list', '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', 'E474: Invalid argument') enddef def Test_test_override() --- 3497,3508 ---- enddef def Test_test_ignore_error() ! CheckDefAndScriptFailure2(['test_ignore_error([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') 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', 'E1174: String required for argument 1') enddef def Test_test_override() *************** *** 3521,3541 **** 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', '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', '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)) assert_equal([], timer_info()) enddef --- 3518,3538 ---- enddef def Test_test_setmouse() ! CheckDefAndScriptFailure2(['test_setmouse("a", 10)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['test_setmouse(10, "b")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef def Test_test_settime() ! CheckDefAndScriptFailure2(['test_settime([1])'], 'E1013: Argument 1: type mismatch, expected number but got list', 'E1210: Number required for argument 1') enddef def Test_test_srand_seed() ! CheckDefAndScriptFailure2(['test_srand_seed([1])'], 'E1013: Argument 1: type mismatch, expected number but got list', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['test_srand_seed("10")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_timer_info() ! CheckDefAndScriptFailure2(['timer_info("id")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') assert_equal([], timer_info(100)) assert_equal([], timer_info()) enddef *************** *** 3559,3586 **** enddef def Test_timer_stop() ! CheckDefFailure(['timer_stop("x")'], 'E1013: Argument 1: type mismatch, expected number but got string') assert_equal(0, timer_stop(100)) enddef def Test_tolower() ! CheckDefFailure(['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', 'E730: Using a List as a String') ! CheckDefAndScriptFailure2(['trim("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected string but got list', '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() --- 3556,3583 ---- enddef def Test_timer_stop() ! CheckDefAndScriptFailure2(['timer_stop("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') assert_equal(0, timer_stop(100)) enddef def Test_tolower() ! CheckDefAndScriptFailure2(['tolower(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') enddef def Test_toupper() ! CheckDefAndScriptFailure2(['toupper(1)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') enddef def Test_tr() ! CheckDefAndScriptFailure2(['tr(1, "a", "b")'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['tr("a", 1, "b")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['tr("a", "a", 1)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') enddef def Test_trim() ! CheckDefAndScriptFailure2(['trim(["a"])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') ! CheckDefAndScriptFailure2(['trim("a", ["b"])'], 'E1013: Argument 2: type mismatch, expected string but got list', 'E1174: String required for argument 2') ! CheckDefAndScriptFailure2(['trim("a", "b", "c")'], 'E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3') enddef def Test_typename() *************** *** 3590,3596 **** enddef def Test_undofile() ! CheckDefFailure(['undofile(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') assert_equal('.abc.un~', fnamemodify(undofile('abc'), ':t')) enddef --- 3587,3593 ---- enddef def Test_undofile() ! CheckDefAndScriptFailure2(['undofile(10)'], 'E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1') assert_equal('.abc.un~', fnamemodify(undofile('abc'), ':t')) enddef *************** *** 3600,3612 **** enddef def Test_values() ! CheckDefFailure(['values([])'], 'E1013: Argument 1: type mismatch, expected dict but got list') assert_equal([], {}->values()) 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') new setline(1, ['abcdefgh']) cursor(1, 4) --- 3597,3609 ---- enddef def Test_values() ! CheckDefAndScriptFailure2(['values([])'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1') assert_equal([], {}->values()) assert_equal(['sun'], {star: 'sun'}->values()) enddef def Test_virtcol() ! CheckDefAndScriptFailure2(['virtcol(1.1)'], 'E1013: Argument 1: type mismatch, expected string but got float', 'E1222: String or List required for argument 1') new setline(1, ['abcdefgh']) cursor(1, 4) *************** *** 3618,3625 **** enddef def Test_visualmode() ! CheckDefFailure(['visualmode("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string') ! CheckDefFailure(['visualmode(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number') enddef def Test_win_execute() --- 3615,3622 ---- enddef def Test_visualmode() ! CheckDefAndScriptFailure2(['visualmode("1")'], 'E1013: Argument 1: type mismatch, expected bool but got string', 'E1212: Bool required for argument 1') ! CheckDefAndScriptFailure2(['visualmode(2)'], 'E1013: Argument 1: type mismatch, expected bool but got number', 'E1212: Bool required for argument 1') enddef def Test_win_execute() *************** *** 3627,3664 **** assert_equal("\n" .. winnr(), 'echo winnr()'->win_execute(win_getid())) assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()', 'silent')) assert_equal('', win_execute(342343, 'echo winnr()')) enddef def Test_win_findbuf() ! CheckDefFailure(['win_findbuf("a")'], 'E1013: Argument 1: type mismatch, expected number but got string') assert_equal([], win_findbuf(1000)) assert_equal([win_getid()], win_findbuf(bufnr(''))) enddef def Test_win_getid() ! CheckDefFailure(['win_getid(".")'], 'E1013: Argument 1: type mismatch, expected number but got string') ! CheckDefFailure(['win_getid(1, ".")'], 'E1013: Argument 2: type mismatch, expected number but got string') assert_equal(win_getid(), win_getid(1, 1)) enddef def Test_win_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_win_splitmove() --- 3624,3664 ---- assert_equal("\n" .. winnr(), 'echo winnr()'->win_execute(win_getid())) assert_equal("\n" .. winnr(), win_execute(win_getid(), 'echo winnr()', 'silent')) assert_equal('', win_execute(342343, 'echo winnr()')) + CheckDefAndScriptFailure2(['win_execute("a", "b", "c")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') + CheckDefAndScriptFailure2(['win_execute(1, 2, "c")'], 'E1013: Argument 2: type mismatch, expected string but got number', 'E1222: String or List required for argument 2') + CheckDefAndScriptFailure2(['win_execute(1, "b", 3)'], 'E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3') enddef def Test_win_findbuf() ! CheckDefAndScriptFailure2(['win_findbuf("a")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') assert_equal([], win_findbuf(1000)) assert_equal([win_getid()], win_findbuf(bufnr(''))) enddef def Test_win_getid() ! CheckDefAndScriptFailure2(['win_getid(".")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['win_getid(1, ".")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') assert_equal(win_getid(), win_getid(1, 1)) enddef def Test_win_gettype() ! CheckDefAndScriptFailure2(['win_gettype("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_win_gotoid() ! CheckDefAndScriptFailure2(['win_gotoid("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_win_id2tabwin() ! CheckDefAndScriptFailure2(['win_id2tabwin("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_win_id2win() ! CheckDefAndScriptFailure2(['win_id2win("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_win_screenpos() ! CheckDefAndScriptFailure2(['win_screenpos("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_win_splitmove() *************** *** 3671,3689 **** 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_winnr() ! CheckDefFailure(['winnr([])'], 'E1013: Argument 1: type mismatch, expected string but got list') assert_equal(1, winnr()) assert_equal(1, winnr('$')) enddef --- 3671,3689 ---- enddef def Test_winbufnr() ! CheckDefAndScriptFailure2(['winbufnr("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_winheight() ! CheckDefAndScriptFailure2(['winheight("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_winlayout() ! CheckDefAndScriptFailure2(['winlayout("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_winnr() ! CheckDefAndScriptFailure2(['winnr([])'], 'E1013: Argument 1: type mismatch, expected string but got list', 'E1174: String required for argument 1') assert_equal(1, winnr()) assert_equal(1, winnr('$')) enddef *************** *** 3698,3704 **** enddef def Test_winrestview() ! CheckDefFailure(['winrestview([])'], 'E1013: Argument 1: type mismatch, expected dict but got list') :%d _ setline(1, 'Hello World') winrestview({lnum: 1, col: 6}) --- 3698,3704 ---- enddef def Test_winrestview() ! CheckDefAndScriptFailure2(['winrestview([])'], 'E1013: Argument 1: type mismatch, expected dict but got list', 'E1206: Dictionary required for argument 1') :%d _ setline(1, 'Hello World') winrestview({lnum: 1, col: 6}) *************** *** 3715,3726 **** 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 --- 3715,3726 ---- enddef def Test_winwidth() ! CheckDefAndScriptFailure2(['winwidth("x")'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') enddef def Test_xor() ! CheckDefAndScriptFailure2(['xor("x", 0x2)'], 'E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1') ! CheckDefAndScriptFailure2(['xor(0x1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2') enddef " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker *** ../vim-8.2.3228/src/testdir/test_vim9_script.vim 2021-07-25 15:57:29.218219920 +0200 --- src/testdir/test_vim9_script.vim 2021-07-27 21:52:46.426688273 +0200 *************** *** 604,610 **** endtry END CheckScriptSuccess(lines) ! assert_match('E808: Number or Float required', g:caught) unlet g:caught # missing catch and/or finally --- 604,610 ---- endtry END CheckScriptSuccess(lines) ! assert_match('E1219: Float or Number required for argument 1', g:caught) unlet g:caught # missing catch and/or finally *** ../vim-8.2.3228/src/testing.c 2021-07-25 15:57:29.218219920 +0200 --- src/testing.c 2021-07-27 21:52:46.430688266 +0200 *************** *** 278,286 **** char_u buf1[NUMBUFLEN]; char_u buf2[NUMBUFLEN]; int called_emsg_before = called_emsg; ! char_u *pat = tv_get_string_buf_chk(&argvars[0], buf1); ! char_u *text = tv_get_string_buf_chk(&argvars[1], buf2); if (called_emsg == called_emsg_before && pattern_match(pat, text, FALSE) != (atype == ASSERT_MATCH)) { --- 278,294 ---- char_u buf1[NUMBUFLEN]; char_u buf2[NUMBUFLEN]; int called_emsg_before = called_emsg; ! char_u *pat; ! char_u *text; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_string_arg(argvars, 1) == FAIL + || check_for_opt_string_arg(argvars, 2) == FAIL)) + return 1; + + pat = tv_get_string_buf_chk(&argvars[0], buf1); + text = tv_get_string_buf_chk(&argvars[1], buf2); if (called_emsg == called_emsg_before && pattern_match(pat, text, FALSE) != (atype == ASSERT_MATCH)) { *************** *** 376,381 **** --- 384,392 ---- void f_assert_beeps(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + rettv->vval.v_number = assert_beeps(argvars, FALSE); } *************** *** 385,390 **** --- 396,404 ---- void f_assert_nobeep(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + rettv->vval.v_number = assert_beeps(argvars, TRUE); } *************** *** 519,524 **** --- 533,544 ---- void f_assert_equalfile(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_string_arg(argvars, 1) == FAIL + || check_for_opt_string_arg(argvars, 2) == FAIL)) + return; + rettv->vval.v_number = assert_equalfile(argvars); } *************** *** 538,545 **** f_assert_exception(typval_T *argvars, typval_T *rettv) { garray_T ga; ! char_u *error = tv_get_string_chk(&argvars[0]); if (*get_vim_var_str(VV_EXCEPTION) == NUL) { prepare_assert_error(&ga); --- 558,571 ---- f_assert_exception(typval_T *argvars, typval_T *rettv) { garray_T ga; ! char_u *error; ! ! if (in_vim9script() ! && (check_for_string_arg(argvars, 0) == FAIL ! || check_for_opt_string_arg(argvars, 1) == FAIL)) ! return; + error = tv_get_string_chk(&argvars[0]); if (*get_vim_var_str(VV_EXCEPTION) == NUL) { prepare_assert_error(&ga); *************** *** 870,875 **** --- 896,907 ---- void f_test_alloc_fail(typval_T *argvars, typval_T *rettv UNUSED) { + if (in_vim9script() + && (check_for_number_arg(argvars, 0) == FAIL + || check_for_number_arg(argvars, 1) == FAIL + || check_for_number_arg(argvars, 2) == FAIL)) + return; + if (argvars[0].v_type != VAR_NUMBER || argvars[0].vval.v_number <= 0 || argvars[1].v_type != VAR_NUMBER *************** *** 905,912 **** f_test_feedinput(typval_T *argvars, typval_T *rettv UNUSED) { #ifdef USE_INPUT_BUF ! char_u *val = tv_get_string_chk(&argvars[0]); # ifdef VIMDLL // this doesn't work in the console if (!gui.in_use) --- 937,948 ---- f_test_feedinput(typval_T *argvars, typval_T *rettv UNUSED) { #ifdef USE_INPUT_BUF ! char_u *val; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + + val = tv_get_string_chk(&argvars[0]); # ifdef VIMDLL // this doesn't work in the console if (!gui.in_use) *************** *** 927,932 **** --- 963,971 ---- void f_test_getvalue(typval_T *argvars, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_STRING) emsg(_(e_invarg)); else *************** *** 948,953 **** --- 987,995 ---- { char_u *name = (char_u *)""; + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_STRING) emsg(_(e_invarg)); else *************** *** 1125,1130 **** --- 1167,1175 ---- void f_test_ignore_error(typval_T *argvars, typval_T *rettv UNUSED) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_STRING) emsg(_(e_invarg)); else *************** *** 1248,1253 **** --- 1293,1303 ---- void f_test_setmouse(typval_T *argvars, typval_T *rettv UNUSED) { + if (in_vim9script() + && (check_for_number_arg(argvars, 0) == FAIL + || check_for_number_arg(argvars, 1) == FAIL)) + return; + if (argvars[0].v_type != VAR_NUMBER || (argvars[1].v_type) != VAR_NUMBER) { emsg(_(e_invarg)); *************** *** 1288,1293 **** --- 1338,1346 ---- void f_test_settime(typval_T *argvars, typval_T *rettv UNUSED) { + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + time_for_testing = (time_t)tv_get_number(&argvars[0]); } *** ../vim-8.2.3228/src/textprop.c 2021-07-20 17:51:48.251744105 +0200 --- src/textprop.c 2021-07-27 21:52:46.430688266 +0200 *************** *** 618,623 **** --- 618,628 ---- int dir = 1; // 1 = forward, -1 = backward int both; + if (in_vim9script() + && (check_for_dict_arg(argvars, 0) == FAIL + || check_for_opt_string_arg(argvars, 1) == FAIL)) + return; + if (argvars[0].v_type != VAR_DICT || argvars[0].vval.v_dict == NULL) { emsg(_(e_dictreq)); *************** *** 985,990 **** --- 990,1000 ---- dictitem_T *di; proptype_T *prop; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_dict_arg(argvars, 1) == FAIL)) + return; + name = tv_get_string(&argvars[0]); if (*name == NUL) { *************** *** 1115,1120 **** --- 1125,1135 ---- buf_T *buf = NULL; hashitem_T *hi; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_opt_dict_arg(argvars, 1) == FAIL)) + return; + name = tv_get_string(&argvars[0]); if (*name == NUL) { *************** *** 1149,1156 **** void f_prop_type_get(typval_T *argvars, typval_T *rettv) { ! char_u *name = tv_get_string(&argvars[0]); if (*name == NUL) { emsg(_(e_invarg)); --- 1164,1177 ---- void f_prop_type_get(typval_T *argvars, typval_T *rettv) { ! char_u *name; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_opt_dict_arg(argvars, 1) == FAIL)) + return; + + name = tv_get_string(&argvars[0]); if (*name == NUL) { emsg(_(e_invarg)); *************** *** 1216,1221 **** --- 1237,1245 ---- if (rettv_list_alloc(rettv) == OK) { + if (in_vim9script() && check_for_opt_dict_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { if (get_bufnr_from_arg(&argvars[0], &buf) == FAIL) *** ../vim-8.2.3228/src/time.c 2021-07-24 16:16:11.542239515 +0200 --- src/time.c 2021-07-27 21:52:46.430688266 +0200 *************** *** 174,179 **** --- 174,185 ---- if (rettv_list_alloc(rettv) != OK) return; + if (in_vim9script() + && (check_for_opt_list_arg(argvars, 0) == FAIL + || (argvars[0].v_type != VAR_UNKNOWN + && check_for_opt_list_arg(argvars, 1) == FAIL))) + return; + if (argvars[0].v_type == VAR_UNKNOWN) { // No arguments: get current time. *************** *** 228,233 **** --- 234,242 ---- rettv->v_type = VAR_FLOAT; rettv->vval.v_float = 0; # ifdef FEAT_RELTIME + if (in_vim9script() && check_for_list_arg(argvars, 0) == FAIL) + return; + if (list2proftime(&argvars[0], &tm) == OK) rettv->vval.v_float = profile_float(&tm); else if (in_vim9script()) *************** *** 249,254 **** --- 258,266 ---- rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; # ifdef FEAT_RELTIME + if (in_vim9script() && check_for_list_arg(argvars, 0) == FAIL) + return; + if (list2proftime(&argvars[0], &tm) == OK) rettv->vval.v_string = vim_strsave((char_u *)profile_msg(&tm)); else if (in_vim9script()) *************** *** 342,347 **** --- 354,364 ---- vimconv_T conv; char_u *enc; + if (in_vim9script() + && (check_for_string_arg(argvars, 0) == FAIL + || check_for_string_arg(argvars, 1) == FAIL)) + return; + CLEAR_FIELD(tmval); tmval.tm_isdst = -1; fmt = tv_get_string(&argvars[0]); *************** *** 754,759 **** --- 771,780 ---- if (rettv_list_alloc(rettv) != OK) return; + + if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_UNKNOWN) { if (argvars[0].v_type != VAR_NUMBER) *************** *** 849,854 **** --- 870,878 ---- { timer_T *timer; + if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL) + return; + if (argvars[0].v_type != VAR_NUMBER) { emsg(_(e_number_expected)); *** ../vim-8.2.3228/src/typval.c 2021-07-25 15:57:29.218219920 +0200 --- src/typval.c 2021-07-27 21:52:46.430688266 +0200 *************** *** 430,436 **** if (args[idx].v_type != VAR_FLOAT && args[idx].v_type != VAR_NUMBER) { if (idx >= 0) ! semsg(_(e_number_required_for_argument_nr), idx + 1); else emsg(_(e_numberreq)); return FAIL; --- 430,436 ---- if (args[idx].v_type != VAR_FLOAT && args[idx].v_type != VAR_NUMBER) { if (idx >= 0) ! semsg(_(e_float_or_number_required_for_argument_nr), idx + 1); else emsg(_(e_numberreq)); return FAIL; *************** *** 568,573 **** --- 568,583 ---- } /* + * Check for an optional job argument at 'idx'. + */ + int + check_for_opt_job_arg(typval_T *args, int idx) + { + return (args[idx].v_type == VAR_UNKNOWN + || check_for_job_arg(args, idx) != FAIL); + } + + /* * Give an error and return FAIL unless "args[idx]" is a string or * a number. */ *************** *** 577,583 **** if (args[idx].v_type != VAR_STRING && args[idx].v_type != VAR_NUMBER) { if (idx >= 0) ! semsg(_(e_string_required_for_argument_nr), idx + 1); else emsg(_(e_stringreq)); return FAIL; --- 587,593 ---- if (args[idx].v_type != VAR_STRING && args[idx].v_type != VAR_NUMBER) { if (idx >= 0) ! semsg(_(e_string_or_number_required_for_argument_nr), idx + 1); else emsg(_(e_stringreq)); return FAIL; *************** *** 644,650 **** if (args[idx].v_type != VAR_STRING && args[idx].v_type != VAR_BLOB) { if (idx >= 0) ! semsg(_(e_string_required_for_argument_nr), idx + 1); else emsg(_(e_stringreq)); return FAIL; --- 654,660 ---- if (args[idx].v_type != VAR_STRING && args[idx].v_type != VAR_BLOB) { if (idx >= 0) ! semsg(_(e_string_or_blob_required_for_argument_nr), idx + 1); else emsg(_(e_stringreq)); return FAIL; *************** *** 661,667 **** if (args[idx].v_type != VAR_STRING && args[idx].v_type != VAR_LIST) { if (idx >= 0) ! semsg(_(e_string_required_for_argument_nr), idx + 1); else emsg(_(e_stringreq)); return FAIL; --- 671,677 ---- if (args[idx].v_type != VAR_STRING && args[idx].v_type != VAR_LIST) { if (idx >= 0) ! semsg(_(e_string_or_list_required_for_argument_nr), idx + 1); else emsg(_(e_stringreq)); return FAIL; *************** *** 680,685 **** --- 690,752 ---- } /* + * Give an error and return FAIL unless "args[idx]" is a string or a dict. + */ + int + check_for_string_or_dict_arg(typval_T *args, int idx) + { + if (args[idx].v_type != VAR_STRING && args[idx].v_type != VAR_DICT) + { + if (idx >= 0) + semsg(_(e_string_or_dict_required_for_argument_nr), idx + 1); + else + emsg(_(e_stringreq)); + return FAIL; + } + return OK; + } + + /* + * Give an error and return FAIL unless "args[idx]" is a string or a number + * or a list. + */ + int + check_for_string_or_number_or_list_arg(typval_T *args, int idx) + { + if (args[idx].v_type != VAR_STRING + && args[idx].v_type != VAR_NUMBER + && args[idx].v_type != VAR_LIST) + { + if (idx >= 0) + semsg(_(e_string_or_number_or_list_required_for_argument_nr), idx + 1); + else + emsg(_(e_stringreq)); + return FAIL; + } + return OK; + } + + /* + * Give an error and return FAIL unless "args[idx]" is a string or a list + * or a dict. + */ + int + check_for_string_or_list_or_dict_arg(typval_T *args, int idx) + { + if (args[idx].v_type != VAR_STRING + && args[idx].v_type != VAR_LIST + && args[idx].v_type != VAR_DICT) + { + if (idx >= 0) + semsg(_(e_string_or_list_or_dict_required_for_argument_nr), idx + 1); + else + emsg(_(e_stringreq)); + return FAIL; + } + return OK; + } + + /* * Give an error and return FAIL unless "args[idx]" is a list or a blob. */ int *************** *** 688,694 **** if (args[idx].v_type != VAR_LIST && args[idx].v_type != VAR_BLOB) { if (idx >= 0) ! semsg(_(e_list_required_for_argument_nr), idx + 1); else emsg(_(e_listreq)); return FAIL; --- 755,779 ---- if (args[idx].v_type != VAR_LIST && args[idx].v_type != VAR_BLOB) { if (idx >= 0) ! semsg(_(e_list_or_blob_required_for_argument_nr), idx + 1); ! else ! emsg(_(e_listreq)); ! return FAIL; ! } ! return OK; ! } ! ! /* ! * Give an error and return FAIL unless "args[idx]" is a list or dict ! */ ! int ! check_for_list_or_dict_arg(typval_T *args, int idx) ! { ! if (args[idx].v_type != VAR_LIST ! && args[idx].v_type != VAR_DICT) ! { ! if (idx >= 0) ! semsg(_(e_list_or_dict_required_for_argument_nr), idx + 1); else emsg(_(e_listreq)); return FAIL; *************** *** 708,714 **** && args[idx].v_type != VAR_BLOB) { if (idx >= 0) ! semsg(_(e_list_required_for_argument_nr), idx + 1); else emsg(_(e_listreq)); return FAIL; --- 793,799 ---- && args[idx].v_type != VAR_BLOB) { if (idx >= 0) ! semsg(_(e_list_or_dict_or_blob_required_for_argument_nr), idx + 1); else emsg(_(e_listreq)); return FAIL; *************** *** 717,729 **** } /* ! * Give an error and return FAIL unless "args[idx]" is a buffer number or a ! * dict. */ int ! check_for_buffer_or_dict_arg(typval_T *args, int idx) { ! if (args[idx].v_type != VAR_STRING && args[idx].v_type != VAR_NUMBER && args[idx].v_type != VAR_DICT) { --- 802,815 ---- } /* ! * Give an error and return FAIL unless "args[idx]" is an optional buffer ! * number or a dict. */ int ! check_for_opt_buffer_or_dict_arg(typval_T *args, int idx) { ! if (args[idx].v_type != VAR_UNKNOWN ! && args[idx].v_type != VAR_STRING && args[idx].v_type != VAR_NUMBER && args[idx].v_type != VAR_DICT) { *** ../vim-8.2.3228/src/undo.c 2021-07-25 14:36:01.569551193 +0200 --- src/undo.c 2021-07-27 21:52:46.430688266 +0200 *************** *** 3646,3651 **** --- 3646,3654 ---- void f_undofile(typval_T *argvars UNUSED, typval_T *rettv) { + if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) + return; + rettv->v_type = VAR_STRING; #ifdef FEAT_PERSISTENT_UNDO { *** ../vim-8.2.3228/src/version.c 2021-07-27 21:17:28.483675842 +0200 --- src/version.c 2021-07-27 21:53:54.118558245 +0200 *************** *** 757,758 **** --- 757,760 ---- { /* Add new patch number below this line */ + /**/ + 3229, /**/ -- hundred-and-one symptoms of being an internet addict: 252. You vote for foreign officials. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///