diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/testdir/test_vim9_assign.vim | 6 | ||||
-rw-r--r-- | src/testdir/test_vim9_func.vim | 4 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9type.c | 9 |
4 files changed, 16 insertions, 5 deletions
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim index bff9c9f8f1..6d2858f6c0 100644 --- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -1890,7 +1890,7 @@ def Test_assign_funcref_args() var FuncAnyVA: func(...any): number FuncAnyVA = (v): number => v END - v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(...any): number but got func(any): number') + v9.CheckScriptFailure(lines, 'E1180: Variable arguments type must be a list: any') # varargs must match lines =<< trim END @@ -1898,7 +1898,7 @@ def Test_assign_funcref_args() var FuncAnyVA: func(...any): number FuncAnyVA = (v1, v2): number => v1 + v2 END - v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(...any): number but got func(any, any): number') + v9.CheckScriptFailure(lines, 'E1180: Variable arguments type must be a list: any') # varargs must match lines =<< trim END @@ -1906,7 +1906,7 @@ def Test_assign_funcref_args() var FuncAnyVA: func(...any): number FuncAnyVA = (v1: list<any>): number => 3 END - v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(...any): number but got func(list<any>): number') + v9.CheckScriptFailure(lines, 'E1180: Variable arguments type must be a list: any') enddef def Test_assign_funcref_arg_any() diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index 701a2f085d..cbbd572640 100644 --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -1995,7 +1995,7 @@ def Test_varargs_mismatch() var res = Map((v) => str2nr(v)) assert_equal(12, res) END - v9.CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected func(...any): number but got func(any): number') + v9.CheckScriptFailure(lines, 'E1180: Variable arguments type must be a list: any') enddef def Test_using_var_as_arg() @@ -2764,7 +2764,7 @@ def Test_func_type_fails() v9.CheckDefFailure(['var Ref1: func()', 'Ref1 = g:FuncOneArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(number): number') v9.CheckDefFailure(['var Ref1: func(bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(bool) but got func(bool, number)') v9.CheckDefFailure(['var Ref1: func(?bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(?bool) but got func(bool, number)') - v9.CheckDefFailure(['var Ref1: func(...bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(...bool) but got func(bool, number)') + v9.CheckDefFailure(['var Ref1: func(...bool)', 'Ref1 = g:FuncTwoArgNoRet'], 'E1180: Variable arguments type must be a list: bool') v9.CheckDefFailure(['var RefWrong: func(string ,number)'], 'E1068:') v9.CheckDefFailure(['var RefWrong: func(string,number)'], 'E1069:') diff --git a/src/version.c b/src/version.c index 7584e45fff..fbf2999dd3 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2057, +/**/ 2056, /**/ 2055, diff --git a/src/vim9type.c b/src/vim9type.c index 6a5848792b..c31e51b983 100644 --- a/src/vim9type.c +++ b/src/vim9type.c @@ -1231,6 +1231,15 @@ parse_type(char_u **arg, garray_T *type_gap, int give_error) type = parse_type(&p, type_gap, give_error); if (type == NULL) return NULL; + if ((flags & TTFLAG_VARARGS) != 0 + && type->tt_type != VAR_LIST) + { + char *tofree; + semsg(_(e_variable_arguments_type_must_be_list_str), + type_name(type, &tofree)); + vim_free(tofree); + return NULL; + } arg_type[argcount++] = type; // Nothing comes after "...{type}". |