--emsg_off;
}
+/*
+ * Set option "varname" to the value of "varp" for the current buffer/window.
+ */
+ static void
+set_option_from_tv(char_u *varname, typval_T *varp)
+{
+ long numval = 0;
+ char_u *strval;
+ char_u nbuf[NUMBUFLEN];
+ int error = FALSE;
+
+ if (!in_vim9script() || varp->v_type != VAR_STRING)
+ numval = (long)tv_get_number_chk(varp, &error);
+ strval = tv_get_string_buf_chk(varp, nbuf);
+ if (!error && strval != NULL)
+ set_option_value(varname, numval, strval, OPT_LOCAL);
+}
+
/*
* "setwinvar()" and "settabwinvar()" functions
*/
int need_switch_win;
char_u *varname, *winvarname;
typval_T *varp;
- char_u nbuf[NUMBUFLEN];
tabpage_T *tp = NULL;
if (check_secure())
|| switch_win(&save_curwin, &save_curtab, win, tp, TRUE) == OK)
{
if (*varname == '&')
- {
- long numval;
- char_u *strval;
- int error = FALSE;
-
- ++varname;
- numval = (long)tv_get_number_chk(varp, &error);
- strval = tv_get_string_buf_chk(varp, nbuf);
- if (!error && strval != NULL)
- set_option_value(varname, numval, strval, OPT_LOCAL);
- }
+ set_option_from_tv(varname + 1, varp);
else
{
winvarname = alloc(STRLEN(varname) + 3);
buf_T *buf;
char_u *varname, *bufvarname;
typval_T *varp;
- char_u nbuf[NUMBUFLEN];
if (check_secure())
return;
{
if (*varname == '&')
{
- long numval;
- char_u *strval;
- int error = FALSE;
aco_save_T aco;
// set curbuf to be our buf, temporarily
aucmd_prepbuf(&aco, buf);
- ++varname;
- numval = (long)tv_get_number_chk(varp, &error);
- strval = tv_get_string_buf_chk(varp, nbuf);
- if (!error && strval != NULL)
- set_option_value(varname, numval, strval, OPT_LOCAL);
+ set_option_from_tv(varname + 1, varp);
// reset notion of buffer
aucmd_restbuf(&aco);
eval expand('.')->readdirex({e -> e.name[0] !=# '.'})
enddef
+def Test_setbufvar()
+ setbufvar(bufnr('%'), '&syntax', 'vim')
+ assert_equal('vim', &syntax)
+ setbufvar(bufnr('%'), '&ts', 16)
+ assert_equal(16, &ts)
+ settabwinvar(1, 1, '&syntax', 'vam')
+ assert_equal('vam', &syntax)
+ settabwinvar(1, 1, '&ts', 15)
+ assert_equal(15, &ts)
+ setlocal ts=8
+enddef
+
def Fibonacci(n: number): number
if n < 2
return n