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:
Yegappan Lakshmanan
2025-01-15 18:25:19 +01:00
committed by Christian Brabandt
parent 1aefe1de0b
commit 9904cbca41
4 changed files with 17 additions and 7 deletions

View File

@ -3769,14 +3769,17 @@ f_call(typval_T *argvars, typval_T *rettv)
if (func == NULL || *func == NUL)
return; // type error, empty name or null function
char_u *p = func;
tofree = trans_function_name(&p, NULL, FALSE, TFN_INT|TFN_QUIET);
if (tofree == NULL)
if (argvars[0].v_type == VAR_STRING)
{
emsg_funcname(e_unknown_function_str, func);
return;
char_u *p = func;
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)
{

View File

@ -2990,6 +2990,8 @@ endfunc
func Test_call()
call assert_equal(3, call('len', [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_equal(0, call('', []))
call assert_equal(0, call('len', test_null_list()))

View File

@ -4729,6 +4729,9 @@ def Test_call_modified_import_func()
export def Run()
done = 0
Setup()
call(Setup, [])
call("Setup", [])
call(() => Setup(), [])
done += 1
enddef
END
@ -4749,7 +4752,7 @@ def Test_call_modified_import_func()
imp.Run()
assert_equal(1, setup)
assert_equal(4, setup)
assert_equal(1, imp.done)
END
v9.CheckScriptSuccess(lines)

View File

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