# HG changeset patch # User Bram Moolenaar # Date 1577972703 -3600 # Node ID b920ae62c7b1a8c4126465b07719b7349c233929 # Parent a26574e0c26713a7b93c0cacfc3ed63443987cdb patch 8.2.0078: expanding works differently the second time Commit: https://github.com/vim/vim/commit/b9adef79eca6f95bc7376ff3a6a383e436c5d6ea Author: Bram Moolenaar Date: Thu Jan 2 14:31:22 2020 +0100 patch 8.2.0078: expanding works differently the second time Problem: Expanding works differently the second time. Solution: Keep the expanded name when redefining a function. (closes https://github.com/vim/vim/issues/5425) diff --git a/src/testdir/test_vimscript.vim b/src/testdir/test_vimscript.vim --- 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('') + endfunc + let g:result = s:snr() + END + call writefile(lines, 'Xexpand') + source Xexpand + call assert_match('\d\+_snr', g:result) + source Xexpand + call assert_match('\d\+_snr', g:result) + + call delete('Xexpand') + unlet g:result +endfunc + func Test_compound_assignment_operators() " Test for number let x = 1 diff --git a/src/userfunc.c b/src/userfunc.c --- 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; diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -743,6 +743,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 78, +/**/ 77, /**/ 76,