changeset 23050:50442f932ff7 v8.2.2071

patch 8.2.2071: Vim9: list assign doesn't except empty remainder list Commit: https://github.com/vim/vim/commit/da7c20c9531739bdefa9d4418e6765fb181066e9 Author: Bram Moolenaar <Bram@vim.org> 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 ";".
author Bram Moolenaar <Bram@vim.org>
date Mon, 30 Nov 2020 21:15:04 +0100
parents 0741c52bf919
children 4f0a99b7b4cb
files src/ex_docmd.c src/testdir/test_vim9_assign.vim src/version.c
diffstat 3 files changed, 33 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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<string>
-  [v1] = ['aaa']
-  assert_equal('aaa', v1)
+  var lines =<< trim END
+      var v1: string
+      var v2: string
+      var vrem: list<string>
+      [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()
--- 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,