Mercurial > vim
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); } /*