Skip to content

Commit ce2c544

Browse files
committed
patch 8.2.2066: Vim9: assignment with += doesn't work
Problem: Vim9: assignment with += doesn't work. Solution: Do not see the "+" as an addition operator.
1 parent f8ca03b commit ce2c544

4 files changed

Lines changed: 22 additions & 16 deletions

File tree

src/eval.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2769,10 +2769,11 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
27692769
int vim9script = in_vim9script();
27702770

27712771
// "." is only string concatenation when scriptversion is 1
2772+
// "+=" and "-=" are assignment
27722773
p = eval_next_non_blank(*arg, evalarg, &getnext);
27732774
op = *p;
27742775
concat = op == '.' && (*(p + 1) == '.' || current_sctx.sc_version < 2);
2775-
if (op != '+' && op != '-' && !concat)
2776+
if ((op != '+' && op != '-' && !concat) || p[1] == '=')
27762777
break;
27772778

27782779
evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);

src/ex_docmd.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3332,9 +3332,13 @@ find_ex_command(
33323332

33333333
// When followed by "=" or "+=" then it is an assignment.
33343334
++emsg_silent;
3335-
if (skip_expr(&after, NULL) == OK
3336-
&& (*after == '='
3337-
|| (*after != NUL && after[1] == '=')))
3335+
if (skip_expr(&after, NULL) == OK)
3336+
after = skipwhite(after);
3337+
else
3338+
after = (char_u *)"";
3339+
if (*after == '=' || (*after != NUL && after[1] == '=')
3340+
|| (after[0] == '.' && after[1] == '.'
3341+
&& after[2] == '='))
33383342
eap->cmdidx = CMD_var;
33393343
else
33403344
eap->cmdidx = CMD_eval;

src/testdir/test_vim9_assign.vim

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -866,18 +866,17 @@ def Test_assign_dict_unknown_type()
866866
END
867867
CheckScriptSuccess(lines)
868868

869-
# doesn't work yet
870-
#lines =<< trim END
871-
# vim9script
872-
# var mylist = [[]]
873-
# mylist[0] += [#{one: 'one'}]
874-
# def Func()
875-
# var dd = mylist[0][0]
876-
# assert_equal('one', dd.one)
877-
# enddef
878-
# Func()
879-
#END
880-
#CheckScriptSuccess(lines)
869+
lines =<< trim END
870+
vim9script
871+
var mylist = [[]]
872+
mylist[0] += [#{one: 'one'}]
873+
def Func()
874+
var dd = mylist[0][0]
875+
assert_equal('one', dd.one)
876+
enddef
877+
Func()
878+
END
879+
CheckScriptSuccess(lines)
881880
enddef
882881

883882
def Test_assign_lambda()

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,8 @@ static char *(features[]) =
750750

751751
static int included_patches[] =
752752
{ /* Add new patch number below this line */
753+
/**/
754+
2066,
753755
/**/
754756
2065,
755757
/**/

0 commit comments

Comments
 (0)