diff options
author | Ernie Rael <errael@raelity.com> | 2023-10-17 18:15:01 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2023-10-17 18:15:01 +0200 |
commit | 96952b2e98cb5f05bc3b3adfb0029056f39cffef (patch) | |
tree | 9b0209c19864027fa6a30d2d52fee030fd1e34da /src/testdir/test_vim9_class.vim | |
parent | c290009e99405024a0d91ec7fab21ac7111c421b (diff) |
patch 9.0.2043: Vim9: issue with funcref assignmentand varargsv9.0.2043
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>
Diffstat (limited to 'src/testdir/test_vim9_class.vim')
-rw-r--r-- | src/testdir/test_vim9_class.vim | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim index 8b08dc1b2d..01cf3e128f 100644 --- 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_check() 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 |