patch 8.2.3794: Vim9: cannot find script-local func using "s:"
Problem: Vim9: cannot find script-local func using "s:". (Yegappan
Lakshmanan)
Solution: Skip the "s:".
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 6d098ff..12a4c59 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -1243,6 +1243,18 @@
&operatorfunc = ''
enddef
+def Test_use_script_func_name_with_prefix()
+ var lines =<< trim END
+ vim9script
+ func s:Getit()
+ return 'it'
+ endfunc
+ var Fn = s:Getit
+ assert_equal('it', Fn())
+ END
+ CheckScriptSuccess(lines)
+enddef
+
def Test_lambda_type_allocated()
# Check that unreferencing a partial using a lambda can use the variable type
# after the lambda has been freed and does not leak memory.
diff --git a/src/userfunc.c b/src/userfunc.c
index 5f35f35..034bf9e 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -1885,13 +1885,14 @@
{
char_u *after_script = NULL;
long sid = 0;
- int find_script_local = in_vim9script()
- && eval_isnamec1(*name) && name[1] != ':';
+ int find_script_local = in_vim9script() && eval_isnamec1(*name)
+ && (name[1] != ':' || *name == 's');
if (find_script_local)
{
// Find script-local function before global one.
- func = find_func_with_sid(name, current_sctx.sc_sid);
+ func = find_func_with_sid(name[0] == 's' && name[1] == ':'
+ ? name + 2 : name, current_sctx.sc_sid);
if (func != NULL)
return func;
}
diff --git a/src/version.c b/src/version.c
index 971510a..c21badc 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3794,
+/**/
3793,
/**/
3792,