changeset 21202:1a4e22aa2eb3 v8.2.1152

patch 8.2.1152: Vim9: function reference is missing script prefix Commit: https://github.com/vim/vim/commit/fe465a01cfbbbae5d870d6108e0ad0947f03b0c4 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jul 7 22:50:12 2020 +0200 patch 8.2.1152: Vim9: function reference is missing script prefix 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)
author Bram Moolenaar <Bram@vim.org>
date Tue, 07 Jul 2020 23:00:04 +0200
parents d58122a15756
children d9504387e01c
files src/testdir/test_vim9_script.vim src/version.c src/vim9compile.c
diffstat 3 files changed, 37 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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,
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -2676,7 +2676,8 @@ generate_funcref(cctx_T *cctx, char_u *n
     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);
 }
 
 /*