]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.2317: Vim9: command modifier before list unpack doesn't work v8.2.2317
authorBram Moolenaar <Bram@vim.org>
Sat, 9 Jan 2021 11:09:22 +0000 (12:09 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 9 Jan 2021 11:09:22 +0000 (12:09 +0100)
Problem:    Vim9: command modifier before list unpack doesn't work.
Solution:   Only recognize "[" directly after the name. (closes #7641)

src/ex_docmd.c
src/testdir/test_vim9_assign.vim
src/version.c

index 9659c20b1f574ff0166702999524cfb2ecacb72d..a71adb874c408f01be0ad0056a2cdefca11caa4b 100644 (file)
@@ -2745,15 +2745,18 @@ parse_command_modifiers(
        //   silent! verbose = func()
        //   verbose.member = 2
        //   verbose[expr] = 2
+       // But not:
+       //   verbose [a, b] = list
        if (in_vim9script())
        {
-           char_u *s;
+           char_u *s, *n;
 
            for (s = p; ASCII_ISALPHA(*s); ++s)
                ;
-           s = skipwhite(s);
-           if (vim_strchr((char_u *)".[=", *s) != NULL
-                                                || (*s != NUL && s[1] == '='))
+           n = skipwhite(s);
+           if (vim_strchr((char_u *)".=", *n) != NULL
+                   || *s == '['
+                   || (*n != NUL && n[1] == '='))
                break;
        }
 
index 55b25ea174af0cc77a98d837d6cb11e503324523..21480633c794dbeed8a68cbe5b98c1f34b5fe260 100644 (file)
@@ -1466,21 +1466,27 @@ enddef
 
 def Test_assign_command_modifier()
   var lines =<< trim END
-    var verbose = 0
-    verbose = 1
-    assert_equal(1, verbose)
-    silent verbose = 2
-    assert_equal(2, verbose)
-    silent verbose += 2
-    assert_equal(4, verbose)
-    silent verbose -= 1
-    assert_equal(3, verbose)
-
-    var topleft = {one: 1}
-    sandbox topleft.one = 3
-    assert_equal({one: 3}, topleft)
-    leftabove topleft[' '] = 4
-    assert_equal({one: 3, ' ': 4}, topleft)
+      var verbose = 0
+      verbose = 1
+      assert_equal(1, verbose)
+      silent verbose = 2
+      assert_equal(2, verbose)
+      silent verbose += 2
+      assert_equal(4, verbose)
+      silent verbose -= 1
+      assert_equal(3, verbose)
+
+      var topleft = {one: 1}
+      sandbox topleft.one = 3
+      assert_equal({one: 3}, topleft)
+      leftabove topleft[' '] = 4
+      assert_equal({one: 3, ' ': 4}, topleft)
+
+      var x: number
+      var y: number
+      silent [x, y] = [1, 2]
+      assert_equal(1, x)
+      assert_equal(2, y)
   END
   CheckDefAndScriptSuccess(lines)
 enddef
index f4cfa2ba0029016cae99fae0accfe2cb786565f8..dc1114cc6a8a95fa588d0e6cfa689d59e73158b5 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2317,
 /**/
     2316,
 /**/