changeset 33632:2c66a4fe1513 v9.0.2057

patch 9.0.2057: Vim9: no strict type checks for funcrefs varargs Commit: https://github.com/vim/vim/commit/3ec6c1fe3bb1b366b710d3e7226f7eed3be1801a Author: Ernie Rael <errael@raelity.com> Date: Sat Oct 21 11:45:38 2023 +0200 patch 9.0.2057: Vim9: no strict type checks for funcrefs varargs Problem: Vim9: no strict type checks for funcrefs varargs Solution: Perform strict type checking when declaring funcrefs with vararg declaration, add tests closes: #13397 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Ernie Rael <errael@raelity.com>
author Christian Brabandt <cb@256bit.org>
date Sat, 21 Oct 2023 12:00:03 +0200
parents 9f55ea4702b1
children 902fc2ea0202
files runtime/doc/tags runtime/doc/vim9.txt src/testdir/test_vim9_assign.vim src/testdir/test_vim9_func.vim src/version.c src/vim9type.c
diffstat 6 files changed, 36 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -11010,6 +11010,7 @@ vim9-differences	vim9.txt	/*vim9-differe
 vim9-export	vim9.txt	/*vim9-export*
 vim9-false-true	vim9.txt	/*vim9-false-true*
 vim9-final	vim9.txt	/*vim9-final*
+vim9-func-declaration	vim9.txt	/*vim9-func-declaration*
 vim9-function-defined-later	vim9.txt	/*vim9-function-defined-later*
 vim9-gotchas	vim9.txt	/*vim9-gotchas*
 vim9-ignored-argument	vim9.txt	/*vim9-ignored-argument*
--- a/runtime/doc/vim9.txt
+++ b/runtime/doc/vim9.txt
@@ -1468,7 +1468,7 @@ return value) results in error *E1031*  
 There is no array type, use list<{type}> instead.  For a list constant an
 efficient implementation is used that avoids allocating a lot of small pieces
 of memory.
-							*E1005* *E1007*
+				    *vim9-func-declaration* *E1005* *E1007*
 A partial and function can be declared in more or less specific ways:
 func				any kind of function reference, no type
 				checking for arguments or return value
@@ -1669,6 +1669,26 @@ Same for |extend()|, use |extendnew()| i
 |flattennew()| instead.  Since |flatten()| is intended to always change the
 type, it can not be used in Vim9 script.
 
+Assigning to a funcref with specified arguments (see |vim9-func-declaration|)
+does strict type checking of the arguments. For variable number of arguments
+the type must match: >
+	var FuncRef: func(string, number, bool): number
+	FuncRef = (v1: string, v2: number, v3: bool) => 777	# OK
+	FuncRef = (v1: string, v2: number, v3: number) => 777	# Error!
+	# variable number of arguments must have same type
+	var FuncVA: func(...list<string>): number
+	FuncVA = (...v: list<number>): number => v  # Error!
+	FuncVA = (...v: list<any>): number => v	    # OK, `any` runtime check
+	FuncVA = (v1: string, v: string2): number => 333     # Error!
+	FuncVA = (v: list<string>): number => 3	    # Error!
+
+If the destinataion funcref has no specified arguments, then there is no
+argument type checking: >
+	var FuncUnknownArgs: func: number
+	FuncUnknownArgs = (v): number => v			# OK
+	FuncUnknownArgs = (v1: string, v2: string): number => 3	# OK
+<	FuncUnknownArgs = (...v1: list<string>): number => 333	# OK
+
 			 *E1211* *E1217* *E1218* *E1219* *E1220* *E1221*
 			 *E1222* *E1223* *E1224* *E1225* *E1226* *E1227*
 			 *E1228* *E1238* *E1250* *E1251* *E1252* *E1256*
--- 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()
index 701a2f085dd3a13a8d58e75f6c3ee8700d00c112..cbbd5726403016459946e79a4c320dd082df6392
GIT binary patch
literal 106639
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
bqY?HpjIdc;KYP*>XVdw!d6-?oarS=zQJRCL
--- 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,
--- a/src/vim9type.c
+++ b/src/vim9type.c
@@ -1231,6 +1231,15 @@ parse_type(char_u **arg, garray_T *type_
 			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}".