summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-07-07 22:50:12 +0200
committerBram Moolenaar <Bram@vim.org>2020-07-07 22:50:12 +0200
commitfe465a01cfbbbae5d870d6108e0ad0947f03b0c4 (patch)
tree4c56928fbcb0e78d2effc270879792621b399ce1
parent0ab55d62012c1fb38c4b540a4233421820a59389 (diff)
downloadvim-git-fe465a01cfbbbae5d870d6108e0ad0947f03b0c4.tar.gz
patch 8.2.1152: Vim9: function reference is missing script prefixv8.2.1152
Problem: Vim9: function reference is missing script prefix. Solution: Use the actual function name instead of the name searched for in the script context. (closes #6412)
-rw-r--r--src/testdir/test_vim9_script.vim33
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c3
3 files changed, 37 insertions, 1 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 726ca9af6..63da00350 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -980,6 +980,39 @@ def Test_vim9script_reload_import()
delete('Ximport.vim')
enddef
+" Not exported function that is referenced needs to be accessed by the
+" script-local name.
+def Test_vim9script_funcref()
+ let sortlines =<< trim END
+ vim9script
+ def Compare(i1: number, i2: number): number
+ return 1
+ enddef
+
+ export def FastSort(): list<number>
+ return range(5)->sort(Compare)
+ enddef
+ END
+ writefile(sortlines, 'Xsort.vim')
+
+ let lines =<< trim END
+ vim9script
+ import FastSort from './Xsort.vim'
+ def Test()
+ g:result = FastSort()
+ enddef
+ Test()
+ END
+ writefile(lines, 'Xscript.vim')
+
+ source Xscript.vim
+ assert_equal([4, 3, 2, 1, 0], g:result)
+
+ unlet g:result
+ delete('Xsort.vim')
+ delete('Xscript.vim')
+enddef
+
def Test_vim9script_reload_delfunc()
let first_lines =<< trim END
vim9script
diff --git a/src/version.c b/src/version.c
index d8124ef4d..f5de446b5 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 */
/**/
+ 1152,
+/**/
1151,
/**/
1150,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index ff6668fe4..07e0d2727 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -2676,7 +2676,8 @@ generate_funcref(cctx_T *cctx, char_u *name)
if (ufunc == NULL)
return FAIL;
- return generate_PUSHFUNC(cctx, vim_strsave(name), ufunc->uf_func_type);
+ return generate_PUSHFUNC(cctx, vim_strsave(ufunc->uf_name),
+ ufunc->uf_func_type);
}
/*