@@ -1863,6 +1863,62 @@ def Test_assign_lambda()
18631863 v9.CheckDefAndScriptFailure (lines , ' E1051:' )
18641864enddef
18651865
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+
18661922def Test_heredoc ()
18671923 # simple heredoc
18681924 var lines = << trim END
0 commit comments