comparison src/evalvars.c @ 22027:ee967cdcf749 v8.2.1563

patch 8.2.1563: Vim9: error when using '%" with setbufvar() r getbufvar() Commit: https://github.com/vim/vim/commit/6f84b6db10ab86bca85e33f3fc6ee735eec8bbe5 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Sep 1 23:16:32 2020 +0200 patch 8.2.1563: Vim9: error when using '%" with setbufvar() r getbufvar() Problem: Vim9: error when using '%" with setbufvar() or getbufvar(). Solution: Use tv_get_buf_from_arg(). (closes https://github.com/vim/vim/issues/6816)
author Bram Moolenaar <Bram@vim.org>
date Tue, 01 Sep 2020 23:30:03 +0200
parents a98211c3e14e
children 7899b4e2880c
comparison
equal deleted inserted replaced
22026:bb8eb10491b8 22027:ee967cdcf749
3660 buf_T *buf; 3660 buf_T *buf;
3661 char_u *varname; 3661 char_u *varname;
3662 dictitem_T *v; 3662 dictitem_T *v;
3663 int done = FALSE; 3663 int done = FALSE;
3664 3664
3665 (void)tv_get_number(&argvars[0]); // issue errmsg if type error
3666 varname = tv_get_string_chk(&argvars[1]); 3665 varname = tv_get_string_chk(&argvars[1]);
3667 ++emsg_off; 3666 buf = tv_get_buf_from_arg(&argvars[0]);
3668 buf = tv_get_buf(&argvars[0], FALSE);
3669 3667
3670 rettv->v_type = VAR_STRING; 3668 rettv->v_type = VAR_STRING;
3671 rettv->vval.v_string = NULL; 3669 rettv->vval.v_string = NULL;
3672 3670
3673 if (buf != NULL && varname != NULL) 3671 if (buf != NULL && varname != NULL)
3715 } 3713 }
3716 3714
3717 if (!done && argvars[2].v_type != VAR_UNKNOWN) 3715 if (!done && argvars[2].v_type != VAR_UNKNOWN)
3718 // use the default value 3716 // use the default value
3719 copy_tv(&argvars[2], rettv); 3717 copy_tv(&argvars[2], rettv);
3720
3721 --emsg_off;
3722 } 3718 }
3723 3719
3724 /* 3720 /*
3725 * "settabvar()" function 3721 * "settabvar()" function
3726 */ 3722 */
3787 char_u *varname, *bufvarname; 3783 char_u *varname, *bufvarname;
3788 typval_T *varp; 3784 typval_T *varp;
3789 3785
3790 if (check_secure()) 3786 if (check_secure())
3791 return; 3787 return;
3792 (void)tv_get_number(&argvars[0]); // issue errmsg if type error
3793 varname = tv_get_string_chk(&argvars[1]); 3788 varname = tv_get_string_chk(&argvars[1]);
3794 buf = tv_get_buf(&argvars[0], FALSE); 3789 buf = tv_get_buf_from_arg(&argvars[0]);
3795 varp = &argvars[2]; 3790 varp = &argvars[2];
3796 3791
3797 if (buf != NULL && varname != NULL && varp != NULL) 3792 if (buf != NULL && varname != NULL && varp != NULL)
3798 { 3793 {
3799 if (*varname == '&') 3794 if (*varname == '&')