Problem: Vim9: incorrect error for argument that is shadowing var.
Solution: Ignore variable that is not in block where the function was
defined.
delfunc g:Func
END
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
func TakesOneArg(arg)
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 4016,
/**/
4015,
/**/
hashitem_T *hi;
int cc;
sallvar_T *sav;
- sallvar_T *found_sav;
ufunc_T *ufunc;
// Find the list of all script variables with the right name.
// Go over the variables with this name and find one that was visible
// from the function.
ufunc = cctx->ctx_ufunc;
- found_sav = sav;
while (sav != NULL)
{
int idx;
sav = sav->sav_next;
}
- // Not found, assume variable at script level was visible.
- return found_sav;
+ // Not found, variable was not visible.
+ return NULL;
}
/*