# HG changeset patch # User Bram Moolenaar # Date 1585487704 -7200 # Node ID 2ef25a007bb72e7e9de3019e3fa167f3f325c62d # Parent 7f50fd15954b020835444720299d5db06d00a156 patch 8.2.0473: variables declared in an outer scope Commit: https://github.com/vim/vim/commit/8601545338581c01e328cdc3a72c0b12d92c54cf Author: Bram Moolenaar Date: Sun Mar 29 15:12:15 2020 +0200 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. diff --git a/src/evalvars.c b/src/evalvars.c --- a/src/evalvars.c +++ b/src/evalvars.c @@ -3461,7 +3461,6 @@ f_getwinvar(typval_T *argvars, typval_T f_getbufvar(typval_T *argvars, typval_T *rettv) { buf_T *buf; - buf_T *save_curbuf; char_u *varname; dictitem_T *v; int done = FALSE; @@ -3476,12 +3475,13 @@ f_getbufvar(typval_T *argvars, typval_T if (buf != NULL && varname != NULL) { - // set curbuf to be our buf, temporarily - save_curbuf = curbuf; - curbuf = buf; - if (*varname == '&') { + buf_T *save_curbuf = curbuf; + + // set curbuf to be our buf, temporarily + curbuf = buf; + if (varname[1] == NUL) { // get all buffer-local options in a dict @@ -3496,22 +3496,21 @@ f_getbufvar(typval_T *argvars, typval_T else if (get_option_tv(&varname, rettv, TRUE) == OK) // buffer-local-option done = TRUE; + + // restore previous notion of curbuf + curbuf = save_curbuf; } else { // Look up the variable. // Let getbufvar({nr}, "") return the "b:" dictionary. - v = find_var_in_ht(&curbuf->b_vars->dv_hashtab, - 'b', varname, FALSE); + v = find_var_in_ht(&buf->b_vars->dv_hashtab, 'b', varname, FALSE); if (v != NULL) { copy_tv(&v->di_tv, rettv); done = TRUE; } } - - // restore previous notion of curbuf - curbuf = save_curbuf; } if (!done && argvars[2].v_type != VAR_UNKNOWN) @@ -3618,11 +3617,11 @@ f_setbufvar(typval_T *argvars, typval_T } else { - buf_T *save_curbuf = curbuf; - bufvarname = alloc(STRLEN(varname) + 3); if (bufvarname != NULL) { + buf_T *save_curbuf = curbuf; + curbuf = buf; STRCPY(bufvarname, "b:"); STRCPY(bufvarname + 2, varname); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -739,6 +739,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 473, +/**/ 472, /**/ 471,