mirror of
https://github.com/vim/vim.git
synced 2025-07-24 10:45:12 -04:00
patch 8.0.0343: b:changedtick can be unlocked
Problem: b:changedtick can be unlocked, even though it has no effect. (Nikolai Pavlov) Solution: Add a check and error E940. (closes #1496)
This commit is contained in:
parent
673911457d
commit
e7877fe0de
@ -9082,9 +9082,12 @@ This does NOT work: >
|
|||||||
:lockvar v
|
:lockvar v
|
||||||
:let v = 'asdf' " fails!
|
:let v = 'asdf' " fails!
|
||||||
:unlet v
|
:unlet v
|
||||||
< *E741*
|
< *E741* *E940*
|
||||||
If you try to change a locked variable you get an
|
If you try to change a locked variable you get an
|
||||||
error message: "E741: Value is locked: {name}"
|
error message: "E741: Value is locked: {name}".
|
||||||
|
If you try to lock or unlock a built-in variable you
|
||||||
|
get an error message: "E940: Cannot lock or unlock
|
||||||
|
variable {name}".
|
||||||
|
|
||||||
[depth] is relevant when locking a |List| or
|
[depth] is relevant when locking a |List| or
|
||||||
|Dictionary|. It specifies how deep the locking goes:
|
|Dictionary|. It specifies how deep the locking goes:
|
||||||
|
@ -2882,6 +2882,12 @@ do_lock_var(
|
|||||||
di = find_var(lp->ll_name, NULL, TRUE);
|
di = find_var(lp->ll_name, NULL, TRUE);
|
||||||
if (di == NULL)
|
if (di == NULL)
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
|
else if ((di->di_flags & DI_FLAGS_FIX)
|
||||||
|
&& di->di_tv.v_type != VAR_DICT
|
||||||
|
&& di->di_tv.v_type != VAR_LIST)
|
||||||
|
/* For historic reasons this error is not given for a list or dict.
|
||||||
|
* E.g., the b: dict could be locked/unlocked. */
|
||||||
|
EMSG2(_("E940: Cannot lock or unlock variable %s"), lp->ll_name);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (lock)
|
if (lock)
|
||||||
|
@ -33,13 +33,19 @@ func Test_changedtick_bdel()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_changedtick_fixed()
|
func Test_changedtick_fixed()
|
||||||
call assert_fails('let b:changedtick = 4', 'E46')
|
call assert_fails('let b:changedtick = 4', 'E46:')
|
||||||
call assert_fails('let b:["changedtick"] = 4', 'E46')
|
call assert_fails('let b:["changedtick"] = 4', 'E46:')
|
||||||
|
|
||||||
call assert_fails('unlet b:changedtick', 'E795')
|
call assert_fails('lockvar b:changedtick', 'E940:')
|
||||||
call assert_fails('unlet b:["changedtick"]', 'E46')
|
call assert_fails('lockvar b:["changedtick"]', 'E46:')
|
||||||
|
call assert_fails('unlockvar b:changedtick', 'E940:')
|
||||||
|
call assert_fails('unlockvar b:["changedtick"]', 'E46:')
|
||||||
|
call assert_fails('unlet b:changedtick', 'E795:')
|
||||||
|
call assert_fails('unlet b:["changedtick"]', 'E46:')
|
||||||
|
|
||||||
let d = b:
|
let d = b:
|
||||||
call assert_fails('unlet d["changedtick"]', 'E46')
|
call assert_fails('lockvar d["changedtick"]', 'E46:')
|
||||||
|
call assert_fails('unlockvar d["changedtick"]', 'E46:')
|
||||||
|
call assert_fails('unlet d["changedtick"]', 'E46:')
|
||||||
|
|
||||||
endfunc
|
endfunc
|
||||||
|
@ -764,6 +764,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
343,
|
||||||
/**/
|
/**/
|
||||||
342,
|
342,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user