Skip to content

Commit 122616d

Browse files
committed
patch 8.2.1502: Vim9: can use += with a :let command at script level
Problem: Vim9: can use += with a :let command at script level. Solution: Give an error.
1 parent 3fc7128 commit 122616d

4 files changed

Lines changed: 13 additions & 4 deletions

File tree

src/evalvars.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -786,7 +786,13 @@ ex_let(exarg_T *eap)
786786
op[1] = NUL;
787787
if (*expr != '=')
788788
{
789-
if (vim_strchr((char_u *)"+-*/%.", *expr) != NULL)
789+
if (vim9script && (flags & LET_NO_COMMAND) == 0)
790+
{
791+
// +=, /=, etc. require an existing variable
792+
semsg(_(e_cannot_use_operator_on_new_variable), eap->arg);
793+
i = FAIL;
794+
}
795+
else if (vim_strchr((char_u *)"+-*/%.", *expr) != NULL)
790796
{
791797
op[0] = *expr; // +=, -=, *=, /=, %= or .=
792798
++len;

src/testdir/test_vim9_expr.vim

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1682,8 +1682,6 @@ def Test_expr7_dict()
16821682
call CheckDefFailure(["let x = {xxx: 8}"], 'E1001:', 1)
16831683
call CheckDefFailure(["let x = #{a: 1, a: 2}"], 'E721:', 1)
16841684
call CheckDefFailure(["let x = #"], 'E1015:', 1)
1685-
call CheckDefFailure(["let x += 1"], 'E1020:', 1)
1686-
call CheckDefFailure(["let x = x + 1"], 'E1001:', 1)
16871685
call CheckDefExecFailure(["let x = g:anint.member"], 'E715:', 1)
16881686
call CheckDefExecFailure(["let x = g:dict_empty.member"], 'E716:', 1)
16891687

src/testdir/test_vim9_script.vim

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,10 @@ def Test_assignment_failure()
569569
call CheckDefFailure(['let t:var = 5'], 'E1016: Cannot declare a tab variable:')
570570

571571
call CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:')
572-
call CheckDefFailure(['let xnr += 4'], 'E1020:')
572+
call CheckDefFailure(['let xnr += 4'], 'E1020:', 1)
573+
call CheckScriptFailure(['vim9script', 'let xnr += 4'], 'E1020:')
574+
call CheckDefFailure(["let xnr = xnr + 1"], 'E1001:', 1)
575+
call CheckScriptFailure(['vim9script', 'let xnr = xnr + 4'], 'E121:')
573576

574577
call CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:')
575578

src/version.c

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

755755
static int included_patches[] =
756756
{ /* Add new patch number below this line */
757+
/**/
758+
1502,
757759
/**/
758760
1501,
759761
/**/

0 commit comments

Comments
 (0)