From 9e0f883f89c915e08ef5fd9e6bf382af57fa9eb2 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 9 Jan 2021 12:09:22 +0100 Subject: [PATCH] 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) --- src/ex_docmd.c | 11 ++++++---- src/testdir/test_vim9_assign.vim | 36 +++++++++++++++++++------------- src/version.c | 2 ++ 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 9659c20b1f..a71adb874c 100644 --- 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 index 55b25ea174..21480633c7 100644 --- 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 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 diff --git a/src/version.c b/src/version.c index f4cfa2ba00..dc1114cc6a 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2317, /**/ 2316, /**/ -- 2.47.2