changeset 33598:1fcb7c9dc546 v9.0.2043

patch 9.0.2043: Vim9: issue with funcref assignmentand varargs Commit: https://github.com/vim/vim/commit/96952b2e98cb5f05bc3b3adfb0029056f39cffef Author: Ernie Rael <errael@raelity.com> Date: Tue Oct 17 18:15:01 2023 +0200 patch 9.0.2043: Vim9: issue with funcref assignmentand varargs Problem: Vim9: issue with funcref assignmentand varargs Solution: Fix funcref type checking closes: #13351 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Ernie Rael <errael@raelity.com>
author Christian Brabandt <cb@256bit.org>
date Tue, 17 Oct 2023 18:30:02 +0200
parents d005b860bdc5
children 4e3510adf87c
files src/testdir/test_vim9_assign.vim src/testdir/test_vim9_class.vim src/testdir/test_vim9_func.vim src/version.c src/vim9type.c
diffstat 5 files changed, 126 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -1863,6 +1863,62 @@ def Test_assign_lambda()
   v9.CheckDefAndScriptFailure(lines, 'E1051:')
 enddef
 
+def Test_assign_funcref_args()
+  # unspecified arguments match everything, including varargs
+  var lines =<< trim END
+    vim9script
+
+    var FuncUnknown: func: number
+
+    FuncUnknown = (v): number => v
+    assert_equal(5, FuncUnknown(5))
+
+    FuncUnknown = (v1, v2): number => v1 + v2
+    assert_equal(7, FuncUnknown(3, 4))
+
+    FuncUnknown = (...v1): number => v1[0] + v1[1] + len(v1) * 1000
+    assert_equal(4007, FuncUnknown(3, 4, 5, 6))
+
+    FuncUnknown = (v: list<any>): number => v[0] + v[1] + len(v) * 1000
+    assert_equal(5009, FuncUnknown([4, 5, 6, 7, 8]))
+  END
+  v9.CheckScriptSuccess(lines)
+
+  # varargs must match
+  lines =<< trim END
+    vim9script
+    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')
+
+  # varargs must match
+  lines =<< trim END
+    vim9script
+    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')
+
+  # varargs must match
+  lines =<< trim END
+    vim9script
+    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')
+enddef
+
+def Test_assign_funcref_arg_any()
+  var lines =<< trim END
+    vim9script
+    var FuncAnyVA: func(any): number
+    FuncAnyVA = (v): number => v
+  END
+  # TODO: Verify this should succeed.
+  v9.CheckScriptSuccess(lines)
+enddef
+
 def Test_heredoc()
   # simple heredoc
   var lines =<< trim END
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -6953,6 +6953,21 @@ def Test_extended_obj_method_type_check(
     endclass
   END
   v9.CheckSourceFailure(lines, 'E1383: Method "Doit": type mismatch, expected func(object<B>): object<B> but got func(object<B>): object<A>', 20)
+
+  # check varargs type mismatch
+  lines =<< trim END
+    vim9script
+
+    class B
+      def F(...xxx: list<any>)
+      enddef
+    endclass
+    class C extends B
+      def F(xxx: list<any>)
+      enddef
+    endclass
+  END
+  v9.CheckSourceFailure(lines, 'E1383: Method "F": type mismatch, expected func(...list<any>) but got func(list<any>)', 10)
 enddef
 
 " Test type checking for class variable in assignments
@@ -7431,6 +7446,54 @@ def Test_funcref_argtype_returntype_chec
   v9.CheckSourceFailure(lines, 'E1012: Type mismatch; expected func(object<A>): object<A> but got func(object<B>): object<B>', 1)
 enddef
 
+def Test_funcref_argtype_invariance_check()
+  var lines =<< trim END
+    vim9script
+
+    class A
+    endclass
+    class B extends A
+    endclass
+    class C extends B
+    endclass
+
+    var Func: func(B): number
+    Func = (o: B): number => 3
+    assert_equal(3, Func(B.new()))
+  END
+  v9.CheckSourceSuccess(lines)
+
+  lines =<< trim END
+    vim9script
+
+    class A
+    endclass
+    class B extends A
+    endclass
+    class C extends B
+    endclass
+
+    var Func: func(B): number
+    Func = (o: A): number => 3
+  END
+  v9.CheckSourceFailure(lines, 'E1012: Type mismatch; expected func(object<B>): number but got func(object<A>): number', 11)
+
+  lines =<< trim END
+    vim9script
+
+    class A
+    endclass
+    class B extends A
+    endclass
+    class C extends B
+    endclass
+
+    var Func: func(B): number
+    Func = (o: C): number => 3
+  END
+  v9.CheckSourceFailure(lines, 'E1012: Type mismatch; expected func(object<B>): number but got func(object<C>): number', 11)
+enddef
+
 " Test for using an operator (e.g. +) with an assignment
 def Test_op_and_assignment()
   # Using += with a class variable
index 597a10c581882c180a1f96a5ae1000680c2edeb0..701a2f085dd3a13a8d58e75f6c3ee8700d00c112
GIT binary patch
literal 106698
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
T>t|1T;%qv9HV?B)IL`hLfdZD=
--- 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 */
 /**/
+    2043,
+/**/
     2042,
 /**/
     2041,
--- a/src/vim9type.c
+++ b/src/vim9type.c
@@ -884,6 +884,11 @@ check_type_maybe(
 		else
 		    ret = MAYBE;
 	    }
+	    if (ret != FAIL
+		    && ((expected->tt_flags & TTFLAG_VARARGS)
+			!= (actual->tt_flags & TTFLAG_VARARGS))
+		    && expected->tt_argcount != -1)
+		ret = FAIL;
 	    if (ret != FAIL && expected->tt_argcount != -1
 		    && actual->tt_min_argcount != -1
 		    && (actual->tt_argcount == -1