summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-07-04 18:28:15 +0200
committerBram Moolenaar <Bram@vim.org>2021-07-04 18:28:15 +0200
commitb7480cd8931fa1696265f75c7d4d9fdf0be69e12 (patch)
tree5cfa8ff369a76cfb7065eddaaca21a2c782260b5
parentf33cae605064c8bdb908a8069d936f752572cd76 (diff)
patch 8.2.3104: Vim9: unspecified function type causes type errorv8.2.3104
Problem: Vim9: unspecified function type causes type error. Solution: Don't check type when min_argcount is negative. (issue #8492)
-rw-r--r--src/globals.h2
-rw-r--r--src/testdir/test_vim9_assign.vim9
-rw-r--r--src/version.c2
-rw-r--r--src/vim9type.c1
4 files changed, 13 insertions, 1 deletions
diff --git a/src/globals.h b/src/globals.h
index dd24cbbae3..b6076df5bb 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -421,7 +421,7 @@ EXTERN type_T t_channel INIT6(VAR_CHANNEL, 0, 0, TTFLAG_STATIC, NULL, NULL);
// Special value used for @#.
EXTERN type_T t_number_or_string INIT6(VAR_STRING, 0, 0, TTFLAG_STATIC, NULL, NULL);
-EXTERN type_T t_func_unknown INIT6(VAR_FUNC, -1, 0, TTFLAG_STATIC, &t_unknown, NULL);
+EXTERN type_T t_func_unknown INIT6(VAR_FUNC, -1, -1, TTFLAG_STATIC, &t_unknown, NULL);
EXTERN type_T t_func_void INIT6(VAR_FUNC, -1, 0, TTFLAG_STATIC, &t_void, NULL);
EXTERN type_T t_func_any INIT6(VAR_FUNC, -1, 0, TTFLAG_STATIC, &t_any, NULL);
EXTERN type_T t_func_number INIT6(VAR_FUNC, -1, 0, TTFLAG_STATIC, &t_number, NULL);
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 92ffa0055c..5f5b5d740a 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -661,6 +661,15 @@ def Test_assignment_list()
CheckDefExecAndScriptFailure(lines, 'E1012:', 5)
enddef
+def PartFunc(b: bool): string
+ return 'done'
+enddef
+
+def Test_assignment_partial()
+ var Partial: func(): string = function(PartFunc, [true])
+ assert_equal('done', Partial())
+enddef
+
def Test_assignment_list_any_index()
var l: list<number> = [1, 2]
for [x, y, _]
diff --git a/src/version.c b/src/version.c
index a9c29582a2..1f2b18f0f4 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3104,
+/**/
3103,
/**/
3102,
diff --git a/src/vim9type.c b/src/vim9type.c
index c92e063bb1..b34940447d 100644
--- a/src/vim9type.c
+++ b/src/vim9type.c
@@ -526,6 +526,7 @@ check_type(type_T *expected, type_T *actual, int give_msg, where_T where)
ret = check_type(expected->tt_member, actual->tt_member,
FALSE, where);
if (ret == OK && expected->tt_argcount != -1
+ && actual->tt_min_argcount != -1
&& (actual->tt_argcount == -1
|| (actual->tt_argcount < expected->tt_min_argcount
|| actual->tt_argcount > expected->tt_argcount)))