Mercurial > vim
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 == '&') |