]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.1152: Vim9: function reference is missing script prefix v8.2.1152
authorBram Moolenaar <Bram@vim.org>
Tue, 7 Jul 2020 20:50:12 +0000 (22:50 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 7 Jul 2020 20:50:12 +0000 (22:50 +0200)
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)

src/testdir/test_vim9_script.vim
src/version.c
src/vim9compile.c

index 726ca9af6ddc2a1f659a84ec2847db16c38f29e6..63da00350005fa7ff873a593063c40c214a65dad 100644 (file)
@@ -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
index d8124ef4d18b271045f39a1f83c3d0be5bb2de3c..f5de446b5446110982fd559d76afd7b89b3bcc12 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1152,
 /**/
     1151,
 /**/
index ff6668fe46ceca5ecf1031cc05c88c4a977b7bfe..07e0d2727769434d407a7312f623680ebda6eebd 100644 (file)
@@ -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);
 }
 
 /*