patch 8.2.2317: Vim9: command modifier before list unpack doesn't work
Problem: Vim9: command modifier before list unpack doesn't work.
Solution: Only recognize "[" directly after the name. (closes #7641)
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 9659c20..a71adb8 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2745,15 +2745,18 @@
// 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;
}
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 55b25ea..2148063 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -1466,21 +1466,27 @@
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 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 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
diff --git a/src/version.c b/src/version.c
index f4cfa2b..dc1114c 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2317,
+/**/
2316,
/**/
2315,