summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/testdir/test_vim9_func.vim9
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c20
3 files changed, 24 insertions, 7 deletions
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index bbfce23c4..e11564f08 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -1456,6 +1456,15 @@ def Test_nested_lambda()
CheckScriptSuccess(lines)
enddef
+def Shadowed(): list<number>
+ var FuncList: list<func: number> = [{ -> 42}]
+ return FuncList->map({_, Shadowed -> Shadowed()})
+enddef
+
+def Test_lambda_arg_shadows_func()
+ assert_equal([42], Shadowed())
+enddef
+
def Line_continuation_in_def(dir: string = ''): string
var path: string = empty(dir)
\ ? 'empty'
diff --git a/src/version.c b/src/version.c
index 4b91cf1ca..7f4996761 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2002,
+/**/
2001,
/**/
2000,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 6b2b766be..ebe48548e 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -2712,13 +2712,19 @@ compile_call(
goto theend;
}
- // If we can find the function by name generate the right call.
- // Skip global functions here, a local funcref takes precedence.
- ufunc = find_func(name, FALSE, cctx);
- if (ufunc != NULL && !func_is_global(ufunc))
- {
- res = generate_CALL(cctx, ufunc, argcount);
- goto theend;
+ // An argument or local variable can be a function reference, this
+ // overrules a function name.
+ if (lookup_local(namebuf, varlen, cctx) == NULL
+ && arg_exists(namebuf, varlen, NULL, NULL, NULL, cctx) != OK)
+ {
+ // If we can find the function by name generate the right call.
+ // Skip global functions here, a local funcref takes precedence.
+ ufunc = find_func(name, FALSE, cctx);
+ if (ufunc != NULL && !func_is_global(ufunc))
+ {
+ res = generate_CALL(cctx, ufunc, argcount);
+ goto theend;
+ }
}
// If the name is a variable, load it and use PCALL.