# HG changeset patch # User Bram Moolenaar # Date 1608671703 -3600 # Node ID d5919c5fd3dcf398e35b237fb22afa44ed7f01c3 # Parent 553475a18c8c202f85038b2884fc179b7efb13cc patch 8.2.2195: failing tests for :const Commit: https://github.com/vim/vim/commit/1dcf55d4f1aa34b6d22001038d43f3e46407fa2e Author: Bram Moolenaar Date: Tue Dec 22 22:07:30 2020 +0100 patch 8.2.2195: failing tests for :const Problem: Failing tests for :const. Solution: Add missing check for ASSIGN_FINAL. diff --git a/src/eval.c b/src/eval.c --- a/src/eval.c +++ b/src/eval.c @@ -1334,7 +1334,7 @@ set_var_lval( { typval_T tv; - if (flags & ASSIGN_CONST) + if (flags & (ASSIGN_CONST | ASSIGN_FINAL)) { emsg(_(e_cannot_mod)); *endp = cc; @@ -1372,7 +1372,7 @@ set_var_lval( listitem_T *ll_li = lp->ll_li; int ll_n1 = lp->ll_n1; - if (flags & ASSIGN_CONST) + if (flags & (ASSIGN_CONST | ASSIGN_FINAL)) { emsg(_("E996: Cannot lock a range")); return; @@ -1431,7 +1431,7 @@ set_var_lval( /* * Assign to a List or Dictionary item. */ - if (flags & ASSIGN_CONST) + if (flags & (ASSIGN_CONST | ASSIGN_FINAL)) { emsg(_("E996: Cannot lock a list or dict")); return; diff --git a/src/evalvars.c b/src/evalvars.c --- a/src/evalvars.c +++ b/src/evalvars.c @@ -752,9 +752,6 @@ ex_let(exarg_T *eap) emsg(_(e_cannot_use_let_in_vim9_script)); return; } - if (eap->cmdidx == CMD_const && !vim9script && !eap->forceit) - // In legacy Vim script ":const" works like ":final". - eap->cmdidx = CMD_final; if (eap->cmdidx == CMD_const) flags |= ASSIGN_CONST; @@ -3231,7 +3228,8 @@ set_var_const( init_tv(tv); } - // ":const var = val" locks the value + // ":const var = value" locks the value + // ":final var = value" locks "var" if (flags & ASSIGN_CONST) // Like :lockvar! name: lock the value and what it contains, but only // if the reference count is up to one. That locks only literal diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -1032,7 +1032,7 @@ def Test_vim9script_call_fail_const() call Change() unlet g:Aconst END - CheckScriptFailure(lines, 'E1122: Variable is locked: Aconst', 2) + CheckScriptFailure(lines, 'E741: Value is locked: Aconst', 2) enddef " Test that inside :function a Python function can be defined, :def is not diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2195, +/**/ 2194, /**/ 2193,