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 = {'a': xxx}", 'E1001:')
|
||||||
call CheckDefFailure("let x = {xxx: 8}", 'E1001:')
|
call CheckDefFailure("let x = {xxx: 8}", 'E1001:')
|
||||||
call CheckDefFailure("let x = #{a: 1, a: 2}", 'E721:')
|
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:anint.member", 'E715:')
|
||||||
call CheckDefExecFailure("let x = g:dict_empty.member", 'E716:')
|
call CheckDefExecFailure("let x = g:dict_empty.member", 'E716:')
|
||||||
enddef
|
enddef
|
||||||
|
@ -738,6 +738,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
483,
|
||||||
/**/
|
/**/
|
||||||
482,
|
482,
|
||||||
/**/
|
/**/
|
||||||
|
@ -3685,6 +3685,8 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
}
|
}
|
||||||
else if (oplen > 0)
|
else if (oplen > 0)
|
||||||
{
|
{
|
||||||
|
int r;
|
||||||
|
|
||||||
// for "+=", "*=", "..=" etc. first load the current value
|
// for "+=", "*=", "..=" etc. first load the current value
|
||||||
if (*op != '=')
|
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;
|
instr_count = instr->ga_len;
|
||||||
p = skipwhite(p + oplen);
|
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;
|
goto theend;
|
||||||
|
|
||||||
if (idx >= 0 && (is_decl || !has_type))
|
if (idx >= 0 && (is_decl || !has_type))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user