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