summaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/eval.c b/src/eval.c
index fada51d646..67880cfb7d 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -10442,17 +10442,12 @@ f_getbufvar(argvars, rettv)
if (buf != NULL && varname != NULL)
{
- if (*varname == '&') /* buffer-local-option */
- {
- /* set curbuf to be our buf, temporarily */
- save_curbuf = curbuf;
- curbuf = buf;
+ /* set curbuf to be our buf, temporarily */
+ save_curbuf = curbuf;
+ curbuf = buf;
+ if (*varname == '&') /* buffer-local-option */
get_option_tv(&varname, rettv, TRUE);
-
- /* restore previous notion of curbuf */
- curbuf = save_curbuf;
- }
else
{
if (*varname == NUL)
@@ -10461,10 +10456,13 @@ f_getbufvar(argvars, rettv)
* find_var_in_ht(). */
varname = (char_u *)"b:" + 2;
/* look up the variable */
- v = find_var_in_ht(&buf->b_vars.dv_hashtab, varname, FALSE);
+ v = find_var_in_ht(&curbuf->b_vars.dv_hashtab, varname, FALSE);
if (v != NULL)
copy_tv(&v->di_tv, rettv);
}
+
+ /* restore previous notion of curbuf */
+ curbuf = save_curbuf;
}
--emsg_off;