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:
parent
ca68ae1311
commit
d25ec2cfa0
@ -738,6 +738,8 @@ def Test_expr7_dict()
|
||||
call CheckDefFailure("let x = {'a': xxx}", 'E1001:')
|
||||
call CheckDefFailure("let x = {xxx: 8}", 'E1001:')
|
||||
call CheckDefFailure("let x = #{a: 1, a: 2}", 'E721:')
|
||||
call CheckDefFailure("let x += 1", 'E1020:')
|
||||
call CheckDefFailure("let x = x + 1", 'E1001:')
|
||||
call CheckDefExecFailure("let x = g:anint.member", 'E715:')
|
||||
call CheckDefExecFailure("let x = g:dict_empty.member", 'E716:')
|
||||
enddef
|
||||
|
@ -738,6 +738,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
483,
|
||||
/**/
|
||||
482,
|
||||
/**/
|
||||
|
@ -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))
|
||||
|
Loading…
x
Reference in New Issue
Block a user