Mercurial > vim
changeset 23223:98548b8fbc98 v8.2.2157
patch 8.2.2157: Vim9: can delete a Vim9 script variable from a function
Commit: https://github.com/vim/vim/commit/9aed729fe9e62536236875a42fb170d2c8fb3046
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Dec 18 15:38:00 2020 +0100
patch 8.2.2157: Vim9: can delete a Vim9 script variable from a function
Problem: Vim9: can delete a Vim9 script variable from a function.
Solution: Check the variable is defined in Vim9 script. (closes https://github.com/vim/vim/issues/7483)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 18 Dec 2020 15:45:05 +0100 |
parents | 02583af08913 |
children | ee10fbb1d6ed |
files | src/evalvars.c src/testdir/test_vim9_assign.vim src/version.c |
diffstat | 3 files changed, 20 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/evalvars.c +++ b/src/evalvars.c @@ -1663,10 +1663,20 @@ do_unlet(char_u *name, int forceit) dict_T *d; dictitem_T *di; + // can't :unlet a script variable in Vim9 script if (in_vim9script() && check_vim9_unlet(name) == FAIL) return FAIL; ht = find_var_ht(name, &varname); + + // can't :unlet a script variable in Vim9 script from a function + if (ht == get_script_local_ht() + && SCRIPT_ID_VALID(current_sctx.sc_sid) + && SCRIPT_ITEM(current_sctx.sc_sid)->sn_version + == SCRIPT_VERSION_VIM9 + && check_vim9_unlet(name) == FAIL) + return FAIL; + if (ht != NULL && *varname != NUL) { d = get_current_funccal_dict(ht);
--- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -1211,6 +1211,14 @@ def Test_unlet() CheckScriptFailure([ 'vim9script', 'var svar = 123', + 'func Func()', + ' unlet s:svar', + 'endfunc', + 'Func()', + ], 'E1081:') + CheckScriptFailure([ + 'vim9script', + 'var svar = 123', 'def Func()', ' unlet s:svar', 'enddef',