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:
parent
7f9c9c51a3
commit
dbd759309b
@ -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()
|
||||||
|
@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
@ -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))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user