summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-11-28 21:21:17 +0100
committerBram Moolenaar <Bram@vim.org>2020-11-28 21:21:17 +0100
commitce2c5444e2556d8d156ab447d6d196f9ecd11ddc (patch)
tree121e5ec45094164dae53a41f13e578313af127b1
parentf8ca03bf9161ab9ee1a29db1d13c02b317c10029 (diff)
downloadvim-git-ce2c5444e2556d8d156ab447d6d196f9ecd11ddc.tar.gz
patch 8.2.2066: Vim9: assignment with += doesn't workv8.2.2066
Problem: Vim9: assignment with += doesn't work. Solution: Do not see the "+" as an addition operator.
-rw-r--r--src/eval.c3
-rw-r--r--src/ex_docmd.c10
-rw-r--r--src/testdir/test_vim9_assign.vim23
-rw-r--r--src/version.c2
4 files changed, 22 insertions, 16 deletions
diff --git a/src/eval.c b/src/eval.c
index f23d721df..199dc9c0a 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2769,10 +2769,11 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
int vim9script = in_vim9script();
// "." is only string concatenation when scriptversion is 1
+ // "+=" and "-=" are assignment
p = eval_next_non_blank(*arg, evalarg, &getnext);
op = *p;
concat = op == '.' && (*(p + 1) == '.' || current_sctx.sc_version < 2);
- if (op != '+' && op != '-' && !concat)
+ if ((op != '+' && op != '-' && !concat) || p[1] == '=')
break;
evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index a06e8a89d..d530c0823 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3332,9 +3332,13 @@ find_ex_command(
// When followed by "=" or "+=" then it is an assignment.
++emsg_silent;
- if (skip_expr(&after, NULL) == OK
- && (*after == '='
- || (*after != NUL && after[1] == '=')))
+ if (skip_expr(&after, NULL) == OK)
+ after = skipwhite(after);
+ else
+ after = (char_u *)"";
+ if (*after == '=' || (*after != NUL && after[1] == '=')
+ || (after[0] == '.' && after[1] == '.'
+ && after[2] == '='))
eap->cmdidx = CMD_var;
else
eap->cmdidx = CMD_eval;
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index fe9fc44e1..2e08e8bb7 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -866,18 +866,17 @@ def Test_assign_dict_unknown_type()
END
CheckScriptSuccess(lines)
- # doesn't work yet
- #lines =<< trim END
- # vim9script
- # var mylist = [[]]
- # mylist[0] += [#{one: 'one'}]
- # def Func()
- # var dd = mylist[0][0]
- # assert_equal('one', dd.one)
- # enddef
- # Func()
- #END
- #CheckScriptSuccess(lines)
+ lines =<< trim END
+ vim9script
+ var mylist = [[]]
+ mylist[0] += [#{one: 'one'}]
+ def Func()
+ var dd = mylist[0][0]
+ assert_equal('one', dd.one)
+ enddef
+ Func()
+ END
+ CheckScriptSuccess(lines)
enddef
def Test_assign_lambda()
diff --git a/src/version.c b/src/version.c
index dac3d5cf7..b94f0df80 100644
--- 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 */
/**/
+ 2066,
+/**/
2065,
/**/
2064,