patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Problem: Cannot make a funcref with "s:func" in a def function in legacy
script.
Solution: Allow for using a lower case function name after "s:". (Kota Kato,
closes #10926)
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index d67dd55..5c75457 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -1957,6 +1957,45 @@
g:listarg->assert_equal([1, 2, 3])
END
v9.CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ function s:func(num)
+ return a:num * 2
+ endfunction
+
+ def s:CallFuncref()
+ var Funcref = function('s:func')
+ Funcref(3)->assert_equal(6)
+ enddef
+ call s:CallFuncref()
+ END
+ v9.CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ function s:func(num)
+ return a:num * 2
+ endfunction
+
+ def s:CallFuncref()
+ var Funcref = function(s:func)
+ Funcref(3)->assert_equal(6)
+ enddef
+ call s:CallFuncref()
+ END
+ v9.CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ function s:func(num)
+ return a:num * 2
+ endfunction
+
+ def s:CallFuncref()
+ var Funcref = s:func
+ Funcref(3)->assert_equal(6)
+ enddef
+ call s:CallFuncref()
+ END
+ v9.CheckScriptSuccess(lines)
enddef
let SomeFunc = function('len')
diff --git a/src/userfunc.c b/src/userfunc.c
index ae3e202..f612160 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -3995,7 +3995,8 @@
{
if (!vim9_local)
{
- if (vim9script && lead == 2 && !ASCII_ISUPPER(*lv.ll_name))
+ if (vim9script && lead == 2 && !ASCII_ISUPPER(*lv.ll_name)
+ && current_script_is_vim9())
{
semsg(_(e_function_name_must_start_with_capital_str), start);
goto theend;
diff --git a/src/version.c b/src/version.c
index 5d9f9f7..3aff052 100644
--- a/src/version.c
+++ b/src/version.c
@@ -736,6 +736,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 219,
+/**/
218,
/**/
217,
diff --git a/src/vim9expr.c b/src/vim9expr.c
index b2bb405..8cd095c 100644
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -8,7 +8,7 @@
*/
/*
- * vim9cmds.c: Dealing with compiled function expressions
+ * vim9expr.c: Dealing with compiled function expressions
*/
#define USING_FLOAT_STUFF
@@ -451,8 +451,7 @@
vim_free(name);
return FAIL;
}
- if (is_expr && ASCII_ISUPPER(*name)
- && find_func(name, FALSE) != NULL)
+ if (is_expr && find_func(name, FALSE) != NULL)
res = generate_funcref(cctx, name, FALSE);
else
res = compile_load_scriptvar(cctx, name,