mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 8.2.4016: Vim9: incorrect error for argument that is shadowing var
Problem: Vim9: incorrect error for argument that is shadowing var. Solution: Ignore variable that is not in block where the function was defined.
This commit is contained in:
@@ -933,6 +933,21 @@ def Test_local_function_shadows_global()
|
|||||||
delfunc g:Func
|
delfunc g:Func
|
||||||
END
|
END
|
||||||
CheckScriptSuccess(lines)
|
CheckScriptSuccess(lines)
|
||||||
|
|
||||||
|
# This does not shadow "i" which is visible only inside the for loop
|
||||||
|
lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
|
||||||
|
def Foo(i: number)
|
||||||
|
echo i
|
||||||
|
enddef
|
||||||
|
|
||||||
|
for i in range(3)
|
||||||
|
# Foo() is compiled here
|
||||||
|
Foo(i)
|
||||||
|
endfor
|
||||||
|
END
|
||||||
|
CheckScriptSuccess(lines)
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
func TakesOneArg(arg)
|
func TakesOneArg(arg)
|
||||||
|
@@ -750,6 +750,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 */
|
||||||
|
/**/
|
||||||
|
4016,
|
||||||
/**/
|
/**/
|
||||||
4015,
|
4015,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -162,7 +162,6 @@ find_script_var(char_u *name, size_t len, cctx_T *cctx)
|
|||||||
hashitem_T *hi;
|
hashitem_T *hi;
|
||||||
int cc;
|
int cc;
|
||||||
sallvar_T *sav;
|
sallvar_T *sav;
|
||||||
sallvar_T *found_sav;
|
|
||||||
ufunc_T *ufunc;
|
ufunc_T *ufunc;
|
||||||
|
|
||||||
// Find the list of all script variables with the right name.
|
// Find the list of all script variables with the right name.
|
||||||
@@ -198,7 +197,6 @@ find_script_var(char_u *name, size_t len, cctx_T *cctx)
|
|||||||
// Go over the variables with this name and find one that was visible
|
// Go over the variables with this name and find one that was visible
|
||||||
// from the function.
|
// from the function.
|
||||||
ufunc = cctx->ctx_ufunc;
|
ufunc = cctx->ctx_ufunc;
|
||||||
found_sav = sav;
|
|
||||||
while (sav != NULL)
|
while (sav != NULL)
|
||||||
{
|
{
|
||||||
int idx;
|
int idx;
|
||||||
@@ -211,8 +209,8 @@ find_script_var(char_u *name, size_t len, cctx_T *cctx)
|
|||||||
sav = sav->sav_next;
|
sav = sav->sav_next;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not found, assume variable at script level was visible.
|
// Not found, variable was not visible.
|
||||||
return found_sav;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user