*** ../vim-7.1.300/src/eval.c	Thu Jun 26 08:57:54 2008
--- src/eval.c	Thu Jun 26 08:57:54 2008
***************
*** 9901,9916 ****
  
      if (buf != NULL && varname != NULL)
      {
  	if (*varname == '&')	/* buffer-local-option */
  	{
- 	    /* set curbuf to be our buf, temporarily */
- 	    save_curbuf = curbuf;
- 	    curbuf = buf;
- 
  	    get_option_tv(&varname, rettv, TRUE);
- 
- 	    /* restore previous notion of curbuf */
- 	    curbuf = save_curbuf;
  	}
  	else
  	{
--- 9901,9913 ----
  
      if (buf != NULL && varname != NULL)
      {
+ 	/* set curbuf to be our buf, temporarily */
+ 	save_curbuf = curbuf;
+ 	curbuf = buf;
+ 
  	if (*varname == '&')	/* buffer-local-option */
  	{
  	    get_option_tv(&varname, rettv, TRUE);
  	}
  	else
  	{
***************
*** 9920,9929 ****
  		 * 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);
  	    if (v != NULL)
  		copy_tv(&v->di_tv, rettv);
  	}
      }
  
      --emsg_off;
--- 9917,9929 ----
  		 * find_var_in_ht(). */
  		varname = (char_u *)"b:" + 2;
  	    /* look up the variable */
! 	    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;
