changeset 26530:2fbd05a873e3 v8.2.3794

patch 8.2.3794: Vim9: cannot find script-local func using "s:" Commit: https://github.com/vim/vim/commit/33b968dc60c5fa39451098e680c7559ebc65d1a7 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Dec 13 11:31:04 2021 +0000 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:".
author Bram Moolenaar <Bram@vim.org>
date Mon, 13 Dec 2021 12:45:03 +0100
parents 1de68d78a929
children b8398b0fb0ed
files src/testdir/test_vim9_func.vim src/userfunc.c src/version.c
diffstat 3 files changed, 18 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -1243,6 +1243,18 @@ def Test_set_opfunc_to_global_function()
   &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.
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -1885,13 +1885,14 @@ find_func_even_dead(char_u *name, int is
     {
 	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;
 	}
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3794,
+/**/
     3793,
 /**/
     3792,