]> granicus.if.org Git - vim/commitdiff
patch 8.2.4227: Vim9: using "lockvar!" in :def function does not work v8.2.4227
authorBram Moolenaar <Bram@vim.org>
Wed, 26 Jan 2022 21:32:59 +0000 (21:32 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 26 Jan 2022 21:32:59 +0000 (21:32 +0000)
Problem:    Vim9: using "lockvar!" in :def function does not work.
Solution:   Add "!" instead of "-1". (closes #9634)

src/testdir/test_vim9_cmd.vim
src/version.c
src/vim9cmds.c

index 7b2edfd1b1e18d7f196c1c626faa16db0a86436b..cfbac9aafa00666dd1dcafc720f5812ab754516f 100644 (file)
@@ -1425,6 +1425,17 @@ def Test_lockvar()
   assert_equal([0, 1, 2], g:therange)
   unlet g:therange
 
+  # use exclamation mark for locking deeper
+  g:nestedlist = [1, [2, 3], 4]
+  lockvar! g:nestedlist
+  try
+    g:nestedlist[1][0] = 9
+  catch /E1119:/
+    caught = true
+  endtry
+  assert_true(caught)
+  unlet g:nestedlist
+
   var d = {a: 1, b: 2}
   d.a = 3
   d.b = 4
index 576c06c25271c955120beb07e0e63d624de111a5..e77826c079ac2d138c9b0f68c73e29d066ad173d 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4227,
 /**/
     4226,
 /**/
index 1af2a157ec4e75043c144fadb74cea581d5ea4b2..716a4041113e25a99c718a78ea03838bb110ec25 100644 (file)
@@ -223,10 +223,12 @@ compile_lock_unlock(
        ret = FAIL;
     else
     {
-       vim_snprintf((char *)buf, len, "%s %d %s",
-               eap->cmdidx == CMD_lockvar ? "lockvar" : "unlockvar",
-               deep,
-               p);
+       char *cmd = eap->cmdidx == CMD_lockvar ? "lockvar" : "unlockvar";
+
+       if (deep < 0)
+           vim_snprintf((char *)buf, len, "%s! %s", cmd, p);
+       else
+           vim_snprintf((char *)buf, len, "%s %d %s", cmd, deep, p);
        ret = generate_EXEC_copy(cctx, isn, buf);
 
        vim_free(buf);