summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-08-11 22:30:42 +0200
committerBram Moolenaar <Bram@vim.org>2020-08-11 22:30:42 +0200
commit035d6e91bd83574cab5a913c5c3a924d9011696b (patch)
treed6acfae2cbc2700a7c184c6dfffce34606e1c185
parent097148e849136b49052b1b5123c714fb1d74db9b (diff)
downloadvim-git-035d6e91bd83574cab5a913c5c3a924d9011696b.tar.gz
patch 8.2.1423: Vim9: find global function when looking for script-localv8.2.1423
Problem: Vim9: find global function when looking for script-local. Solution: Don't strip prefix if name starts with "s:". (closes #6688)
-rw-r--r--src/testdir/test_vim9_func.vim9
-rw-r--r--src/userfunc.c4
-rw-r--r--src/version.c2
3 files changed, 13 insertions, 2 deletions
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 4a020c9af..772b52ab9 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -203,6 +203,15 @@ def Test_global_local_function()
assert_equal('local', Func())
END
CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+ def g:Funcy()
+ echo 'funcy'
+ enddef
+ s:Funcy()
+ END
+ CheckScriptFailure(lines, 'E117:')
enddef
func TakesOneArg(arg)
diff --git a/src/userfunc.c b/src/userfunc.c
index f38c978f4..9ab5ffe52 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -2132,8 +2132,8 @@ call_func(
char_u *p = untrans_function_name(rfname);
// If using Vim9 script try not local to the script.
- // TODO: should not do this if the name started with "s:".
- if (p != NULL)
+ // Don't do this if the name starts with "s:".
+ if (p != NULL && (funcname[0] != 's' || funcname[1] != ':'))
fp = find_func(p, is_global, NULL);
}
diff --git a/src/version.c b/src/version.c
index 8ebd3e0ad..f6257b58a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1423,
+/**/
1422,
/**/
1421,