# HG changeset patch # User Bram Moolenaar # Date 1606767304 -3600 # Node ID 50442f932ff7d62d6e31eca920b2493dfcdf841e # Parent 0741c52bf9191f64d96b53f3ddbf26820efd6e8b patch 8.2.2071: Vim9: list assign doesn't except empty remainder list Commit: https://github.com/vim/vim/commit/da7c20c9531739bdefa9d4418e6765fb181066e9 Author: Bram Moolenaar Date: Mon Nov 30 21:12:19 2020 +0100 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 ";". diff --git a/src/ex_docmd.c b/src/ex_docmd.c --- 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 --- 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) + 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] = ['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'] + 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) + [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 + [&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 --- 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 */ /**/ + 2071, +/**/ 2070, /**/ 2069,