changeset 30590:d900f0561eee v9.0.0630

patch 9.0.0630: in Vim9 script a numbered function cannot be called Commit: https://github.com/vim/vim/commit/cfb4d4f312e740c2fbb70c29c47cf74a76f8b605 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Sep 30 19:19:04 2022 +0100 patch 9.0.0630: in Vim9 script a numbered function cannot be called Problem: In Vim9 script a numbered function cannot be called. Solution: Do not require "g:" before a numbered function name. (closes #11254)
author Bram Moolenaar <Bram@vim.org>
date Fri, 30 Sep 2022 20:30:04 +0200
parents 2ee5c536668e
children 38ef10db4a4e
files src/testdir/test_vim9_func.vim src/userfunc.c src/version.c
diffstat 3 files changed, 23 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -4210,6 +4210,25 @@ def Test_numbered_function_reference()
   unlet g:mydict
 enddef
 
+def Test_numbered_function_call()
+  var lines =<< trim END
+      let s:legacyscript = {}
+      func s:legacyscript.Helper() abort
+        return "Success"
+      endfunc
+      let g:legacyscript = deepcopy(s:legacyscript)
+
+      let g:legacy_result = eval("g:legacyscript.Helper()")
+      vim9cmd g:vim9_result = eval("g:legacyscript.Helper()")
+  END
+  v9.CheckScriptSuccess(lines)
+  assert_equal('Success', g:legacy_result)
+  assert_equal('Success', g:vim9_result)
+
+  unlet g:legacy_result
+  unlet g:vim9_result
+enddef
+
 def Test_go_beyond_end_of_cmd()
   # this was reading the byte after the end of the line
   var lines =<< trim END
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -2095,7 +2095,8 @@ func_requires_g_prefix(ufunc_T *ufunc)
 {
     return ufunc->uf_name[0] != K_SPECIAL
 	    && (ufunc->uf_flags & FC_LAMBDA) == 0
-	    && vim_strchr(ufunc->uf_name, AUTOLOAD_CHAR) == NULL;
+	    && vim_strchr(ufunc->uf_name, AUTOLOAD_CHAR) == NULL
+	    && !isdigit(ufunc->uf_name[0]);
 }
 
 /*
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    630,
+/**/
     629,
 /**/
     628,