]> granicus.if.org Git - vim/commitdiff
patch 8.2.2195: failing tests for :const v8.2.2195
authorBram Moolenaar <Bram@vim.org>
Tue, 22 Dec 2020 21:07:30 +0000 (22:07 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 22 Dec 2020 21:07:30 +0000 (22:07 +0100)
Problem:    Failing tests for :const.
Solution:   Add missing check for ASSIGN_FINAL.

src/eval.c
src/evalvars.c
src/testdir/test_vim9_func.vim
src/version.c

index f08ae578f5ba3c49f64f8c3d8c3b05075a40ba64..e4149ab9d2c3c29dd0e7b50d3f8f89c88291f584 100644 (file)
@@ -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;
index 7c4cc7a1a815a58d981cc70f678892cc8aefbbd9..e671b8711d88065e447e8de3112b0cd7e5f6a5dc 100644 (file)
@@ -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
index 749b8e8428b06823eb485cc5f21d45496f8d9924..bdced0257b60e44b15c00f26ea5f3402d2195d44 100644 (file)
@@ -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
index d4ca3c42a0c80ba130510c0e4247ba938216145b..45b69bd314554e3fa411a44b8e3b5872f9a34234 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2195,
 /**/
     2194,
 /**/