# HG changeset patch # User Bram Moolenaar # Date 1625416203 -7200 # Node ID 5731bcaaabcbb67a1803b63fea6ca997f088563b # Parent 2edd38379795246e7f97c7fc007a48775b6caf13 patch 8.2.3104: Vim9: unspecified function type causes type error Commit: https://github.com/vim/vim/commit/b7480cd8931fa1696265f75c7d4d9fdf0be69e12 Author: Bram Moolenaar Date: Sun Jul 4 18:28:15 2021 +0200 patch 8.2.3104: Vim9: unspecified function type causes type error Problem: Vim9: unspecified function type causes type error. Solution: Don't check type when min_argcount is negative. (issue https://github.com/vim/vim/issues/8492) diff --git a/src/globals.h b/src/globals.h --- a/src/globals.h +++ b/src/globals.h @@ -421,7 +421,7 @@ EXTERN type_T t_channel INIT6(VAR_CHANNE // 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 --- 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 = [1, 2] for [x, y, _] diff --git a/src/version.c b/src/version.c --- 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 --- a/src/vim9type.c +++ b/src/vim9type.c @@ -526,6 +526,7 @@ check_type(type_T *expected, type_T *act 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)))