Mercurial > vim
changeset 26240:640b62dbf6cb v8.2.3651
patch 8.2.3651: Vim9: no error for :lock or :unlock with unknown variable
Commit: https://github.com/vim/vim/commit/04b568b38f848293e1ae0e680685280151acb386
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Nov 22 21:58:41 2021 +0000
patch 8.2.3651: Vim9: no error for :lock or :unlock with unknown variable
Problem: Vim9: no error for :lock or :unlock with unknown variable.
Solution: Give an error. (closes https://github.com/vim/vim/issues/9188)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 22 Nov 2021 23:00:03 +0100 |
parents | 5187470e768c |
children | ae5abfa1efc8 |
files | src/errors.h src/evalvars.c src/testdir/test_vim9_cmd.vim src/version.c |
diffstat | 4 files changed, 26 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/errors.h +++ b/src/errors.h @@ -686,3 +686,5 @@ EXTERN char e_bad_color_string_str[] INIT(= N_("E1244: Bad color string: %s")); EXTERN char e_cannot_expand_sfile_in_vim9_function[] INIT(= N_("E1245: Cannot expand <sfile> in a Vim9 function")); +EXTERN char e_cannot_find_variable_to_unlock_str[] + INIT(= N_("E1246: Cannot find variable to (un)lock: %s"));
--- a/src/evalvars.c +++ b/src/evalvars.c @@ -1827,7 +1827,12 @@ do_lock_var( // Normal name or expanded name. di = find_var(lp->ll_name, NULL, TRUE); if (di == NULL) + { + if (in_vim9script()) + semsg(_(e_cannot_find_variable_to_unlock_str), + lp->ll_name); ret = FAIL; + } else if ((di->di_flags & DI_FLAGS_FIX) && di->di_tv.v_type != VAR_DICT && di->di_tv.v_type != VAR_LIST)
--- a/src/testdir/test_vim9_cmd.vim +++ b/src/testdir/test_vim9_cmd.vim @@ -1370,6 +1370,23 @@ def Test_lockvar() unlockvar theList END CheckDefFailure(lines, 'E1178', 2) + + lines =<< trim END + vim9script + var name = 'john' + lockvar nameX + END + CheckScriptFailure(lines, 'E1246', 3) + + lines =<< trim END + vim9script + var name = 'john' + def LockIt() + lockvar nameX + enddef + LockIt() + END + CheckScriptFailure(lines, 'E1246', 1) enddef def Test_substitute_expr()