forked from aniani/vim
patch 8.2.0473: variables declared in an outer scope
Problem: Variables declared in an outer scope. Solution: Decleare variables only in the scope where they are used.
This commit is contained in:
@@ -3461,7 +3461,6 @@ f_getwinvar(typval_T *argvars, typval_T *rettv)
|
|||||||
f_getbufvar(typval_T *argvars, typval_T *rettv)
|
f_getbufvar(typval_T *argvars, typval_T *rettv)
|
||||||
{
|
{
|
||||||
buf_T *buf;
|
buf_T *buf;
|
||||||
buf_T *save_curbuf;
|
|
||||||
char_u *varname;
|
char_u *varname;
|
||||||
dictitem_T *v;
|
dictitem_T *v;
|
||||||
int done = FALSE;
|
int done = FALSE;
|
||||||
@@ -3476,12 +3475,13 @@ f_getbufvar(typval_T *argvars, typval_T *rettv)
|
|||||||
|
|
||||||
if (buf != NULL && varname != NULL)
|
if (buf != NULL && varname != NULL)
|
||||||
{
|
{
|
||||||
// set curbuf to be our buf, temporarily
|
|
||||||
save_curbuf = curbuf;
|
|
||||||
curbuf = buf;
|
|
||||||
|
|
||||||
if (*varname == '&')
|
if (*varname == '&')
|
||||||
{
|
{
|
||||||
|
buf_T *save_curbuf = curbuf;
|
||||||
|
|
||||||
|
// set curbuf to be our buf, temporarily
|
||||||
|
curbuf = buf;
|
||||||
|
|
||||||
if (varname[1] == NUL)
|
if (varname[1] == NUL)
|
||||||
{
|
{
|
||||||
// get all buffer-local options in a dict
|
// get all buffer-local options in a dict
|
||||||
@@ -3496,22 +3496,21 @@ f_getbufvar(typval_T *argvars, typval_T *rettv)
|
|||||||
else if (get_option_tv(&varname, rettv, TRUE) == OK)
|
else if (get_option_tv(&varname, rettv, TRUE) == OK)
|
||||||
// buffer-local-option
|
// buffer-local-option
|
||||||
done = TRUE;
|
done = TRUE;
|
||||||
|
|
||||||
|
// restore previous notion of curbuf
|
||||||
|
curbuf = save_curbuf;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Look up the variable.
|
// Look up the variable.
|
||||||
// Let getbufvar({nr}, "") return the "b:" dictionary.
|
// Let getbufvar({nr}, "") return the "b:" dictionary.
|
||||||
v = find_var_in_ht(&curbuf->b_vars->dv_hashtab,
|
v = find_var_in_ht(&buf->b_vars->dv_hashtab, 'b', varname, FALSE);
|
||||||
'b', varname, FALSE);
|
|
||||||
if (v != NULL)
|
if (v != NULL)
|
||||||
{
|
{
|
||||||
copy_tv(&v->di_tv, rettv);
|
copy_tv(&v->di_tv, rettv);
|
||||||
done = TRUE;
|
done = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// restore previous notion of curbuf
|
|
||||||
curbuf = save_curbuf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!done && argvars[2].v_type != VAR_UNKNOWN)
|
if (!done && argvars[2].v_type != VAR_UNKNOWN)
|
||||||
@@ -3618,11 +3617,11 @@ f_setbufvar(typval_T *argvars, typval_T *rettv UNUSED)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buf_T *save_curbuf = curbuf;
|
|
||||||
|
|
||||||
bufvarname = alloc(STRLEN(varname) + 3);
|
bufvarname = alloc(STRLEN(varname) + 3);
|
||||||
if (bufvarname != NULL)
|
if (bufvarname != NULL)
|
||||||
{
|
{
|
||||||
|
buf_T *save_curbuf = curbuf;
|
||||||
|
|
||||||
curbuf = buf;
|
curbuf = buf;
|
||||||
STRCPY(bufvarname, "b:");
|
STRCPY(bufvarname, "b:");
|
||||||
STRCPY(bufvarname + 2, varname);
|
STRCPY(bufvarname + 2, varname);
|
||||||
|
@@ -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 */
|
||||||
|
/**/
|
||||||
|
473,
|
||||||
/**/
|
/**/
|
||||||
472,
|
472,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user