From da7c20c9531739bdefa9d4418e6765fb181066e9 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 30 Nov 2020 21:12:19 +0100 Subject: patch 8.2.2071: Vim9: list assign doesn't except empty remainder list Problem: Vim9: list assign doesn't except empty remainder list. Solution: Recognize list assignment with ";". --- src/ex_docmd.c | 9 ++++++- src/testdir/test_vim9_assign.vim | 51 +++++++++++++++++++++------------------- src/version.c | 2 ++ 3 files changed, 37 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/ex_docmd.c b/src/ex_docmd.c index d530c0823..1d5d2dedc 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -3356,7 +3356,14 @@ find_ex_command( if (*eap->cmd == '[') { p = to_name_const_end(eap->cmd); - if (p == eap->cmd || *skipwhite(p) != '=') + if (p == eap->cmd && *p == '[') + { + int count = 0; + int semicolon = FALSE; + + p = skip_var_list(eap->cmd, TRUE, &count, &semicolon, TRUE); + } + if (p == NULL || p == eap->cmd || *skipwhite(p) != '=') { eap->cmdidx = CMD_eval; return eap->cmd; diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim index 2e08e8bb7..421229fd0 100644 --- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -632,30 +632,33 @@ def Test_assignment_default() enddef def Test_assignment_var_list() - var v1: string - var v2: string - var vrem: list - [v1] = ['aaa'] - assert_equal('aaa', v1) - - [v1, v2] = ['one', 'two'] - assert_equal('one', v1) - assert_equal('two', v2) - - [v1, v2; vrem] = ['one', 'two'] - assert_equal('one', v1) - assert_equal('two', v2) - assert_equal([], vrem) - - [v1, v2; vrem] = ['one', 'two', 'three'] - assert_equal('one', v1) - assert_equal('two', v2) - assert_equal(['three'], vrem) - - [&ts, &sw] = [3, 4] - assert_equal(3, &ts) - assert_equal(4, &sw) - set ts=8 sw=4 + var lines =<< trim END + var v1: string + var v2: string + var vrem: list + [v1] = ['aaa'] + assert_equal('aaa', v1) + + [v1, v2] = ['one', 'two'] + assert_equal('one', v1) + assert_equal('two', v2) + + [v1, v2; vrem] = ['one', 'two'] + assert_equal('one', v1) + assert_equal('two', v2) + assert_equal([], vrem) + + [v1, v2; vrem] = ['one', 'two', 'three'] + assert_equal('one', v1) + assert_equal('two', v2) + assert_equal(['three'], vrem) + + [&ts, &sw] = [3, 4] + assert_equal(3, &ts) + assert_equal(4, &sw) + set ts=8 sw=4 + END + CheckDefAndScriptSuccess(lines) enddef def Test_assignment_vim9script() diff --git a/src/version.c b/src/version.c index 4eb7f4b59..845713367 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 */ +/**/ + 2071, /**/ 2070, /**/ -- cgit v1.2.1