Mercurial > vim
changeset 21791:d504fcd3d2c0 v8.2.1445
patch 8.2.1445: Vim9: function expanded name is cleared when sourcing again
Commit: https://github.com/vim/vim/commit/c4ce36d48698669f81ec90f7c9dc9ab8c362e538
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Aug 14 17:08:15 2020 +0200
patch 8.2.1445: Vim9: function expanded name is cleared when sourcing again
Problem: Vim9: function expanded name is cleared when sourcing a script
again.
Solution: Only clear the expanded name when deleting the function.
(closes #6707)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 14 Aug 2020 17:15:04 +0200 |
parents | 75be6f383577 |
children | 4eb35250b54e |
files | src/testdir/test_vim9_script.vim src/userfunc.c src/version.c |
diffstat | 3 files changed, 28 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -1796,6 +1796,29 @@ def Test_import_compile_error() delete('Ximport.vim') enddef +def Test_func_redefine_error() + let lines = [ + 'vim9script', + 'def Func()', + ' eval [][0]', + 'enddef', + 'Func()', + ] + writefile(lines, 'Xtestscript.vim') + + for count in range(3) + try + source Xtestscript.vim + catch /E684/ + # function name should contain <SNR> every time + assert_match('E684: list index out of range', v:exception) + assert_match('function <SNR>\d\+_Func, line 1', v:throwpoint) + endtry + endfor + + delete('Xtestscript.vim') +enddef + def Test_func_overrules_import_fails() let export_lines =<< trim END vim9script
--- a/src/userfunc.c +++ b/src/userfunc.c @@ -1090,7 +1090,6 @@ func_clear_items(ufunc_T *fp) ga_clear_strings(&(fp->uf_args)); ga_clear_strings(&(fp->uf_def_args)); ga_clear_strings(&(fp->uf_lines)); - VIM_CLEAR(fp->uf_name_exp); VIM_CLEAR(fp->uf_arg_types); VIM_CLEAR(fp->uf_def_arg_idx); VIM_CLEAR(fp->uf_va_name); @@ -1146,7 +1145,10 @@ func_free(ufunc_T *fp, int force) func_remove(fp); if ((fp->uf_flags & FC_DEAD) == 0 || force) + { + VIM_CLEAR(fp->uf_name_exp); vim_free(fp); + } } /*