1
0
forked from aniani/vim

patch 8.2.0483: Vim9: "let x = x + 1" does not give an error

Problem:    Vim9: "let x = x + 1" does not give an error.
Solution:   Hide the variable when compiling the expression.
This commit is contained in:
Bram Moolenaar
2020-03-30 21:05:45 +02:00
parent ca68ae1311
commit d25ec2cfa0
3 changed files with 14 additions and 2 deletions

View File

@@ -3685,6 +3685,8 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
}
else if (oplen > 0)
{
int r;
// for "+=", "*=", "..=" etc. first load the current value
if (*op != '=')
{
@@ -3717,10 +3719,16 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
}
}
// compile the expression
// Compile the expression. Temporarily hide the new local variable
// here, it is not available to this expression.
if (idx >= 0)
--cctx->ctx_locals.ga_len;
instr_count = instr->ga_len;
p = skipwhite(p + oplen);
if (compile_expr1(&p, cctx) == FAIL)
r = compile_expr1(&p, cctx);
if (idx >= 0)
++cctx->ctx_locals.ga_len;
if (r == FAIL)
goto theend;
if (idx >= 0 && (is_decl || !has_type))