diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-03-29 15:12:15 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-03-29 15:12:15 +0200 |
commit | 8601545338581c01e328cdc3a72c0b12d92c54cf (patch) | |
tree | 78d5007c98b2209e79775833915fec826d325f61 /src/evalvars.c | |
parent | 360bdbda817920657a2ec8bf329c96a749dd7224 (diff) |
patch 8.2.0473: variables declared in an outer scopev8.2.0473
Problem: Variables declared in an outer scope.
Solution: Decleare variables only in the scope where they are used.
Diffstat (limited to 'src/evalvars.c')
-rw-r--r-- | src/evalvars.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/src/evalvars.c b/src/evalvars.c index 40a22f6907..0ffff56863 100644 --- a/src/evalvars.c +++ b/src/evalvars.c @@ -3461,7 +3461,6 @@ f_getwinvar(typval_T *argvars, typval_T *rettv) 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 *rettv) 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 *rettv) 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 *rettv UNUSED) } 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); |