forked from aniani/vim
patch 9.1.1017: Vim9: Patch 9.1.1013 causes a few problems
Problem: Vim9: Patch 9.1.1013 causes a few problems
Solution: Translate the function name only when it is a string
(Yegappan Lakshmanan)
fixes: #16453
closes: #16450
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
1aefe1de0b
commit
9904cbca41
@@ -3769,14 +3769,17 @@ f_call(typval_T *argvars, typval_T *rettv)
|
|||||||
if (func == NULL || *func == NUL)
|
if (func == NULL || *func == NUL)
|
||||||
return; // type error, empty name or null function
|
return; // type error, empty name or null function
|
||||||
|
|
||||||
char_u *p = func;
|
if (argvars[0].v_type == VAR_STRING)
|
||||||
tofree = trans_function_name(&p, NULL, FALSE, TFN_INT|TFN_QUIET);
|
|
||||||
if (tofree == NULL)
|
|
||||||
{
|
{
|
||||||
emsg_funcname(e_unknown_function_str, func);
|
char_u *p = func;
|
||||||
return;
|
tofree = trans_function_name(&p, NULL, FALSE, TFN_INT|TFN_QUIET);
|
||||||
|
if (tofree == NULL)
|
||||||
|
{
|
||||||
|
emsg_funcname(e_unknown_function_str, func);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
func = tofree;
|
||||||
}
|
}
|
||||||
func = tofree;
|
|
||||||
|
|
||||||
if (argvars[2].v_type != VAR_UNKNOWN)
|
if (argvars[2].v_type != VAR_UNKNOWN)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2990,6 +2990,8 @@ endfunc
|
|||||||
func Test_call()
|
func Test_call()
|
||||||
call assert_equal(3, call('len', [123]))
|
call assert_equal(3, call('len', [123]))
|
||||||
call assert_equal(3, 'len'->call([123]))
|
call assert_equal(3, 'len'->call([123]))
|
||||||
|
call assert_equal(4, call({ x -> len(x) }, ['xxxx']))
|
||||||
|
call assert_equal(2, call(function('len'), ['xx']))
|
||||||
call assert_fails("call call('len', 123)", 'E1211:')
|
call assert_fails("call call('len', 123)", 'E1211:')
|
||||||
call assert_equal(0, call('', []))
|
call assert_equal(0, call('', []))
|
||||||
call assert_equal(0, call('len', test_null_list()))
|
call assert_equal(0, call('len', test_null_list()))
|
||||||
|
|||||||
@@ -4729,6 +4729,9 @@ def Test_call_modified_import_func()
|
|||||||
export def Run()
|
export def Run()
|
||||||
done = 0
|
done = 0
|
||||||
Setup()
|
Setup()
|
||||||
|
call(Setup, [])
|
||||||
|
call("Setup", [])
|
||||||
|
call(() => Setup(), [])
|
||||||
done += 1
|
done += 1
|
||||||
enddef
|
enddef
|
||||||
END
|
END
|
||||||
@@ -4749,7 +4752,7 @@ def Test_call_modified_import_func()
|
|||||||
|
|
||||||
imp.Run()
|
imp.Run()
|
||||||
|
|
||||||
assert_equal(1, setup)
|
assert_equal(4, setup)
|
||||||
assert_equal(1, imp.done)
|
assert_equal(1, imp.done)
|
||||||
END
|
END
|
||||||
v9.CheckScriptSuccess(lines)
|
v9.CheckScriptSuccess(lines)
|
||||||
|
|||||||
@@ -704,6 +704,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 */
|
||||||
|
/**/
|
||||||
|
1017,
|
||||||
/**/
|
/**/
|
||||||
1016,
|
1016,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user