@@ -1863,6 +1863,62 @@ def Test_assign_lambda()
1863
1863
v9.CheckDefAndScriptFailure (lines , ' E1051:' )
1864
1864
enddef
1865
1865
1866
+ def Test_assign_funcref_args ()
1867
+ # unspecified arguments match everything, including varargs
1868
+ var lines = << trim END
1869
+ vim9script
1870
+
1871
+ var FuncUnknown: func : number
1872
+
1873
+ FuncUnknown = (v ): number = > v
1874
+ assert_equal (5 , FuncUnknown (5 ))
1875
+
1876
+ FuncUnknown = (v1, v2): number = > v1 + v2
1877
+ assert_equal (7 , FuncUnknown (3 , 4 ))
1878
+
1879
+ FuncUnknown = (... v1): number = > v1[0 ] + v1[1 ] + len (v1) * 1000
1880
+ assert_equal (4007 , FuncUnknown (3 , 4 , 5 , 6 ))
1881
+
1882
+ FuncUnknown = (v: list <any> ): number = > v [0 ] + v [1 ] + len (v ) * 1000
1883
+ assert_equal (5009 , FuncUnknown ([4 , 5 , 6 , 7 , 8 ]))
1884
+ END
1885
+ v9.CheckScriptSuccess (lines )
1886
+
1887
+ # varargs must match
1888
+ lines = << trim END
1889
+ vim9script
1890
+ var FuncAnyVA: func (... any): number
1891
+ FuncAnyVA = (v ): number = > v
1892
+ END
1893
+ v9.CheckScriptFailure (lines , ' E1012: Type mismatch; expected func(...any): number but got func(any): number' )
1894
+
1895
+ # varargs must match
1896
+ lines = << trim END
1897
+ vim9script
1898
+ var FuncAnyVA: func (... any): number
1899
+ FuncAnyVA = (v1, v2): number = > v1 + v2
1900
+ END
1901
+ v9.CheckScriptFailure (lines , ' E1012: Type mismatch; expected func(...any): number but got func(any, any): number' )
1902
+
1903
+ # varargs must match
1904
+ lines = << trim END
1905
+ vim9script
1906
+ var FuncAnyVA: func (... any): number
1907
+ FuncAnyVA = (v1: list <any> ): number = > 3
1908
+ END
1909
+ v9.CheckScriptFailure (lines , ' E1012: Type mismatch; expected func(...any): number but got func(list<any>): number' )
1910
+ enddef
1911
+
1912
+ def Test_assign_funcref_arg_any ()
1913
+ var lines = << trim END
1914
+ vim9script
1915
+ var FuncAnyVA: func (any): number
1916
+ FuncAnyVA = (v ): number = > v
1917
+ END
1918
+ # TODO : Verify this should succeed.
1919
+ v9.CheckScriptSuccess (lines )
1920
+ enddef
1921
+
1866
1922
def Test_heredoc ()
1867
1923
# simple heredoc
1868
1924
var lines = << trim END
0 commit comments