0
0
mirror of https://github.com/vim/vim.git synced 2025-08-23 19:34:27 -04:00

patch 8.2.1722: Vim9: cannot assign a lambda to a variable of type function

Problem:    Vim9: cannot assign a lambda to a variable of type function.
Solution:   Allow for assigning a partial to a variable of type function.
            (Naruhiko Nishino, closes #6996)
This commit is contained in:
Bram Moolenaar 2020-09-21 21:48:21 +02:00
parent 7f9c9c51a3
commit dbd759309b
3 changed files with 19 additions and 1 deletions

View File

@ -1687,6 +1687,18 @@ def Test_expr7_lambda_vim9script()
->map({_, v -> synIDattr(v, 'name')})->len()}) ->map({_, v -> synIDattr(v, 'name')})->len()})
END END
CheckScriptSuccess(lines) CheckScriptSuccess(lines)
# check if assign a lambda to a variable which type is func or any.
lines =<< trim END
vim9script
let FuncRef = {->123}
assert_equal(123, FuncRef())
let FuncRef_Func: func = {->123}
assert_equal(123, FuncRef_Func())
let FuncRef_Any: any = {->123}
assert_equal(123, FuncRef_Any())
END
CheckScriptSuccess(lines)
enddef enddef
def Test_epxr7_funcref() def Test_epxr7_funcref()

View File

@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1722,
/**/ /**/
1721, 1721,
/**/ /**/

View File

@ -463,7 +463,11 @@ check_type(type_T *expected, type_T *actual, int give_msg, int argidx)
&& !(expected->tt_type == VAR_ANY && actual->tt_type != VAR_VOID)) && !(expected->tt_type == VAR_ANY && actual->tt_type != VAR_VOID))
{ {
if (expected->tt_type != actual->tt_type) // tt_type should match, except that a "partial" can be assigned to a
// variable with type "func".
if (!(expected->tt_type == actual->tt_type
|| (expected->tt_type == VAR_FUNC
&& actual->tt_type == VAR_PARTIAL)))
{ {
if (expected->tt_type == VAR_BOOL if (expected->tt_type == VAR_BOOL
&& (actual->tt_flags & TTFLAG_BOOL_OK)) && (actual->tt_flags & TTFLAG_BOOL_OK))