Mercurial > vim
changeset 19035:b920ae62c7b1 v8.2.0078
patch 8.2.0078: expanding <sfile> works differently the second time
Commit: https://github.com/vim/vim/commit/b9adef79eca6f95bc7376ff3a6a383e436c5d6ea
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jan 2 14:31:22 2020 +0100
patch 8.2.0078: expanding <sfile> works differently the second time
Problem: Expanding <sfile> works differently the second time.
Solution: Keep the expanded name when redefining a function. (closes https://github.com/vim/vim/issues/5425)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 02 Jan 2020 14:45:03 +0100 |
parents | a26574e0c267 |
children | dc1c53fdfb4e |
files | src/testdir/test_vimscript.vim src/userfunc.c src/version.c |
diffstat | 3 files changed, 24 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vimscript.vim +++ b/src/testdir/test_vimscript.vim @@ -1642,6 +1642,23 @@ func Test_script_local_func() enew! | close endfunc +func Test_script_expand_sfile() + let lines =<< trim END + func s:snr() + return expand('<sfile>') + endfunc + let g:result = s:snr() + END + call writefile(lines, 'Xexpand') + source Xexpand + call assert_match('<SNR>\d\+_snr', g:result) + source Xexpand + call assert_match('<SNR>\d\+_snr', g:result) + + call delete('Xexpand') + unlet g:result +endfunc + func Test_compound_assignment_operators() " Test for number let x = 1
--- a/src/userfunc.c +++ b/src/userfunc.c @@ -2572,9 +2572,13 @@ ex_function(exarg_T *eap) } else { - // redefine existing function + char_u *exp_name = fp->uf_name_exp; + + // redefine existing function, keep the expanded name VIM_CLEAR(name); + fp->uf_name_exp = NULL; func_clear_items(fp); + fp->uf_name_exp = exp_name; #ifdef FEAT_PROFILE fp->uf_profiling = FALSE; fp->uf_prof_initialized = FALSE;