# HG changeset patch # User Bram Moolenaar # Date 1610190905 -3600 # Node ID 4156f972efb1708586561d809b364b0140d1d230 # Parent 32b16cb865943c7b0b8912719978457c2d0610ea patch 8.2.2317: Vim9: command modifier before list unpack doesn't work Commit: https://github.com/vim/vim/commit/9e0f883f89c915e08ef5fd9e6bf382af57fa9eb2 Author: Bram Moolenaar Date: Sat Jan 9 12:09:22 2021 +0100 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 https://github.com/vim/vim/issues/7641) diff --git a/src/ex_docmd.c b/src/ex_docmd.c --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -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; } diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim --- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -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 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 --- 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 */ /**/ + 2317, +/**/ 2316, /**/ 2315,