diff options
Diffstat (limited to 'data/vim/patches/8.1.0615')
-rw-r--r-- | data/vim/patches/8.1.0615 | 8621 |
1 files changed, 8621 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0615 b/data/vim/patches/8.1.0615 new file mode 100644 index 000000000..19004a485 --- /dev/null +++ b/data/vim/patches/8.1.0615 @@ -0,0 +1,8621 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0615 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0615 +Problem: Get_tv function names are not consistent. +Solution: Rename to tv_get. +Files: src/eval.c, src/proto/eval.pro, src/channel.c, src/dict.c, + src/evalfunc.c, src/list.c, src/message.c, src/tag.c, + src/terminal.c, src/textprop.c, src/window.c, src/ex_cmds.c, + src/os_unix.c, src/os_win32.c, src/json.c, src/regexp.c, + src/edit.c, src/misc2.c, src/popupmnu.c + + +*** ../vim-8.1.0614/src/eval.c 2018-12-14 15:38:28.327597664 +0100 +--- src/eval.c 2018-12-21 15:59:46.202241682 +0100 +*************** +*** 681,687 **** + *error = FALSE; + if (!skip) + { +! retval = (get_tv_number_chk(&tv, error) != 0); + clear_tv(&tv); + } + } +--- 681,687 ---- + *error = FALSE; + if (!skip) + { +! retval = (tv_get_number_chk(&tv, error) != 0); + clear_tv(&tv); + } + } +*************** +*** 720,726 **** + } + else + { +! s = get_tv_string_buf_chk(expr, buf); + if (s == NULL) + return FAIL; + s = skipwhite(s); +--- 720,726 ---- + } + else + { +! s = tv_get_string_buf_chk(expr, buf); + if (s == NULL) + return FAIL; + s = skipwhite(s); +*************** +*** 751,757 **** + *error = TRUE; + return FALSE; + } +! res = (get_tv_number_chk(&rettv, error) != 0); + clear_tv(&rettv); + return res; + } +--- 751,757 ---- + *error = TRUE; + return FALSE; + } +! res = (tv_get_number_chk(&rettv, error) != 0); + clear_tv(&rettv); + return res; + } +*************** +*** 776,782 **** + retval = NULL; + else + { +! retval = vim_strsave(get_tv_string(&tv)); + clear_tv(&tv); + } + if (skip) +--- 776,782 ---- + retval = NULL; + else + { +! retval = vim_strsave(tv_get_string(&tv)); + clear_tv(&tv); + } + if (skip) +*************** +*** 841,847 **** + } + #endif + else +! retval = vim_strsave(get_tv_string(&tv)); + clear_tv(&tv); + } + +--- 841,847 ---- + } + #endif + else +! retval = vim_strsave(tv_get_string(&tv)); + clear_tv(&tv); + } + +*************** +*** 891,897 **** + retval = -1; + else + { +! retval = get_tv_number_chk(&rettv, NULL); + clear_tv(&rettv); + } + --emsg_off; +--- 891,897 ---- + retval = -1; + else + { +! retval = tv_get_number_chk(&rettv, NULL); + clear_tv(&rettv); + } + --emsg_off; +*************** +*** 982,993 **** + li = list->lv_first; + if (li == NULL) + return -1; +! *pp = get_tv_string(&li->li_tv); + + li = li->li_next; + if (li == NULL) + return -1; +! return (int)get_tv_number(&li->li_tv); + } + #endif + +--- 982,993 ---- + li = list->lv_first; + if (li == NULL) + return -1; +! *pp = tv_get_string(&li->li_tv); + + li = li->li_next; + if (li == NULL) + return -1; +! return (int)tv_get_number(&li->li_tv); + } + #endif + +*************** +*** 1053,1059 **** + if (call_vim_function(func, argc, argv, &rettv) == FAIL) + return -1; + +! retval = get_tv_number_chk(&rettv, NULL); + clear_tv(&rettv); + return retval; + } +--- 1053,1059 ---- + if (call_vim_function(func, argc, argv, &rettv) == FAIL) + return -1; + +! retval = tv_get_number_chk(&rettv, NULL); + clear_tv(&rettv); + return retval; + } +*************** +*** 1080,1086 **** + if (call_vim_function(func, argc, argv, &rettv) == FAIL) + return NULL; + +! retval = vim_strsave(get_tv_string(&rettv)); + clear_tv(&rettv); + return retval; + } +--- 1080,1086 ---- + if (call_vim_function(func, argc, argv, &rettv) == FAIL) + return NULL; + +! retval = vim_strsave(tv_get_string(&rettv)); + clear_tv(&rettv); + return retval; + } +*************** +*** 1654,1660 **** + { + c1 = name[len]; + name[len] = NUL; +! p = get_tv_string_chk(tv); + if (p != NULL && op != NULL && *op == '.') + { + int mustfree = FALSE; +--- 1654,1660 ---- + { + c1 = name[len]; + name[len] = NUL; +! p = tv_get_string_chk(tv); + if (p != NULL && op != NULL && *op == '.') + { + int mustfree = FALSE; +*************** +*** 1708,1715 **** + c1 = *p; + *p = NUL; + +! n = (long)get_tv_number(tv); +! s = get_tv_string_chk(tv); /* != NULL if number or string */ + if (s != NULL && op != NULL && *op != '=') + { + opt_type = get_option_value(arg, &numval, +--- 1708,1715 ---- + c1 = *p; + *p = NUL; + +! n = (long)tv_get_number(tv); +! s = tv_get_string_chk(tv); /* != NULL if number or string */ + if (s != NULL && op != NULL && *op != '=') + { + opt_type = get_option_value(arg, &numval, +*************** +*** 1763,1769 **** + char_u *ptofree = NULL; + char_u *s; + +! p = get_tv_string_chk(tv); + if (p != NULL && op != NULL && *op == '.') + { + s = get_reg_contents(*arg == '@' ? '"' : *arg, GREG_EXPR_SRC); +--- 1763,1769 ---- + char_u *ptofree = NULL; + char_u *s; + +! p = tv_get_string_chk(tv); + if (p != NULL && op != NULL && *op == '.') + { + s = get_reg_contents(*arg == '@' ? '"' : *arg, GREG_EXPR_SRC); +*************** +*** 1956,1962 **** + empty1 = FALSE; + if (eval1(&p, &var1, TRUE) == FAIL) /* recursive! */ + return NULL; +! if (get_tv_string_chk(&var1) == NULL) + { + /* not a number or string */ + clear_tv(&var1); +--- 1956,1962 ---- + empty1 = FALSE; + if (eval1(&p, &var1, TRUE) == FAIL) /* recursive! */ + return NULL; +! if (tv_get_string_chk(&var1) == NULL) + { + /* not a number or string */ + clear_tv(&var1); +*************** +*** 1993,1999 **** + clear_tv(&var1); + return NULL; + } +! if (get_tv_string_chk(&var2) == NULL) + { + /* not a number or string */ + clear_tv(&var1); +--- 1993,1999 ---- + clear_tv(&var1); + return NULL; + } +! if (tv_get_string_chk(&var2) == NULL) + { + /* not a number or string */ + clear_tv(&var1); +*************** +*** 2024,2030 **** + if (len == -1) + { + /* "[key]": get key from "var1" */ +! key = get_tv_string_chk(&var1); /* is number or string */ + if (key == NULL) + { + clear_tv(&var1); +--- 2024,2030 ---- + if (len == -1) + { + /* "[key]": get key from "var1" */ +! key = tv_get_string_chk(&var1); /* is number or string */ + if (key == NULL) + { + clear_tv(&var1); +*************** +*** 2106,2112 **** + lp->ll_n1 = 0; + else + /* is number or string */ +! lp->ll_n1 = (long)get_tv_number(&var1); + clear_tv(&var1); + + lp->ll_dict = NULL; +--- 2106,2112 ---- + lp->ll_n1 = 0; + else + /* is number or string */ +! lp->ll_n1 = (long)tv_get_number(&var1); + clear_tv(&var1); + + lp->ll_dict = NULL; +*************** +*** 2136,2142 **** + */ + if (lp->ll_range && !lp->ll_empty2) + { +! lp->ll_n2 = (long)get_tv_number(&var2); + /* is number or string */ + clear_tv(&var2); + if (lp->ll_n2 < 0) +--- 2136,2142 ---- + */ + if (lp->ll_range && !lp->ll_empty2) + { +! lp->ll_n2 = (long)tv_get_number(&var2); + /* is number or string */ + clear_tv(&var2); + if (lp->ll_n2 < 0) +*************** +*** 2367,2373 **** + if (*op == '+' || *op == '-') + { + /* nr += nr or nr -= nr*/ +! n = get_tv_number(tv1); + #ifdef FEAT_FLOAT + if (tv2->v_type == VAR_FLOAT) + { +--- 2367,2373 ---- + if (*op == '+' || *op == '-') + { + /* nr += nr or nr -= nr*/ +! n = tv_get_number(tv1); + #ifdef FEAT_FLOAT + if (tv2->v_type == VAR_FLOAT) + { +*************** +*** 2385,2393 **** + #endif + { + if (*op == '+') +! n += get_tv_number(tv2); + else +! n -= get_tv_number(tv2); + clear_tv(tv1); + tv1->v_type = VAR_NUMBER; + tv1->vval.v_number = n; +--- 2385,2393 ---- + #endif + { + if (*op == '+') +! n += tv_get_number(tv2); + else +! n -= tv_get_number(tv2); + clear_tv(tv1); + tv1->v_type = VAR_NUMBER; + tv1->vval.v_number = n; +*************** +*** 2399,2406 **** + break; + + /* str .= str */ +! s = get_tv_string(tv1); +! s = concat_str(s, get_tv_string_buf(tv2, numbuf)); + clear_tv(tv1); + tv1->v_type = VAR_STRING; + tv1->vval.v_string = s; +--- 2399,2406 ---- + break; + + /* str .= str */ +! s = tv_get_string(tv1); +! s = concat_str(s, tv_get_string_buf(tv2, numbuf)); + clear_tv(tv1); + tv1->v_type = VAR_STRING; + tv1->vval.v_string = s; +*************** +*** 2419,2425 **** + if (tv2->v_type == VAR_FLOAT) + f = tv2->vval.v_float; + else +! f = get_tv_number(tv2); + if (*op == '+') + tv1->vval.v_float += f; + else +--- 2419,2425 ---- + if (tv2->v_type == VAR_FLOAT) + f = tv2->vval.v_float; + else +! f = tv_get_number(tv2); + if (*op == '+') + tv1->vval.v_float += f; + else +*************** +*** 3271,3277 **** + { + int error = FALSE; + +! if (get_tv_number_chk(rettv, &error) != 0) + result = TRUE; + clear_tv(rettv); + if (error) +--- 3271,3277 ---- + { + int error = FALSE; + +! if (tv_get_number_chk(rettv, &error) != 0) + result = TRUE; + clear_tv(rettv); + if (error) +*************** +*** 3345,3351 **** + { + if (evaluate && first) + { +! if (get_tv_number_chk(rettv, &error) != 0) + result = TRUE; + clear_tv(rettv); + if (error) +--- 3345,3351 ---- + { + if (evaluate && first) + { +! if (tv_get_number_chk(rettv, &error) != 0) + result = TRUE; + clear_tv(rettv); + if (error) +*************** +*** 3365,3371 **** + */ + if (evaluate && !result) + { +! if (get_tv_number_chk(&var2, &error) != 0) + result = TRUE; + clear_tv(&var2); + if (error) +--- 3365,3371 ---- + */ + if (evaluate && !result) + { +! if (tv_get_number_chk(&var2, &error) != 0) + result = TRUE; + clear_tv(&var2); + if (error) +*************** +*** 3413,3419 **** + { + if (evaluate && first) + { +! if (get_tv_number_chk(rettv, &error) == 0) + result = FALSE; + clear_tv(rettv); + if (error) +--- 3413,3419 ---- + { + if (evaluate && first) + { +! if (tv_get_number_chk(rettv, &error) == 0) + result = FALSE; + clear_tv(rettv); + if (error) +*************** +*** 3433,3439 **** + */ + if (evaluate && result) + { +! if (get_tv_number_chk(&var2, &error) == 0) + result = FALSE; + clear_tv(&var2); + if (error) +--- 3433,3439 ---- + */ + if (evaluate && result) + { +! if (tv_get_number_chk(&var2, &error) == 0) + result = FALSE; + clear_tv(&var2); + if (error) +*************** +*** 3622,3628 **** + * we know that the first operand needs to be a string or number + * without evaluating the 2nd operand. So check before to avoid + * side effects after an error. */ +! if (evaluate && get_tv_string_chk(rettv) == NULL) + { + clear_tv(rettv); + return FAIL; +--- 3622,3628 ---- + * we know that the first operand needs to be a string or number + * without evaluating the 2nd operand. So check before to avoid + * side effects after an error. */ +! if (evaluate && tv_get_string_chk(rettv) == NULL) + { + clear_tv(rettv); + return FAIL; +*************** +*** 3646,3653 **** + */ + if (op == '.') + { +! s1 = get_tv_string_buf(rettv, buf1); /* already checked */ +! s2 = get_tv_string_buf_chk(&var2, buf2); + if (s2 == NULL) /* type error ? */ + { + clear_tv(rettv); +--- 3646,3653 ---- + */ + if (op == '.') + { +! s1 = tv_get_string_buf(rettv, buf1); /* already checked */ +! s2 = tv_get_string_buf_chk(&var2, buf2); + if (s2 == NULL) /* type error ? */ + { + clear_tv(rettv); +*************** +*** 3686,3692 **** + else + #endif + { +! n1 = get_tv_number_chk(rettv, &error); + if (error) + { + /* This can only happen for "list + non-list". For +--- 3686,3692 ---- + else + #endif + { +! n1 = tv_get_number_chk(rettv, &error); + if (error) + { + /* This can only happen for "list + non-list". For +*************** +*** 3709,3715 **** + else + #endif + { +! n2 = get_tv_number_chk(&var2, &error); + if (error) + { + clear_tv(rettv); +--- 3709,3715 ---- + else + #endif + { +! n2 = tv_get_number_chk(&var2, &error); + if (error) + { + clear_tv(rettv); +*************** +*** 3804,3810 **** + } + else + #endif +! n1 = get_tv_number_chk(rettv, &error); + clear_tv(rettv); + if (error) + return FAIL; +--- 3804,3810 ---- + } + else + #endif +! n1 = tv_get_number_chk(rettv, &error); + clear_tv(rettv); + if (error) + return FAIL; +*************** +*** 3835,3841 **** + else + #endif + { +! n2 = get_tv_number_chk(&var2, &error); + clear_tv(&var2); + if (error) + return FAIL; +--- 3835,3841 ---- + else + #endif + { +! n2 = tv_get_number_chk(&var2, &error); + clear_tv(&var2); + if (error) + return FAIL; +*************** +*** 4200,4206 **** + f = rettv->vval.v_float; + else + #endif +! val = get_tv_number_chk(rettv, &error); + if (error) + { + clear_tv(rettv); +--- 4200,4206 ---- + f = rettv->vval.v_float; + else + #endif +! val = tv_get_number_chk(rettv, &error); + if (error) + { + clear_tv(rettv); +*************** +*** 4326,4332 **** + empty1 = TRUE; + else if (eval1(arg, &var1, evaluate) == FAIL) /* recursive! */ + return FAIL; +! else if (evaluate && get_tv_string_chk(&var1) == NULL) + { + /* not a number or string */ + clear_tv(&var1); +--- 4326,4332 ---- + empty1 = TRUE; + else if (eval1(arg, &var1, evaluate) == FAIL) /* recursive! */ + return FAIL; +! else if (evaluate && tv_get_string_chk(&var1) == NULL) + { + /* not a number or string */ + clear_tv(&var1); +*************** +*** 4348,4354 **** + clear_tv(&var1); + return FAIL; + } +! else if (evaluate && get_tv_string_chk(&var2) == NULL) + { + /* not a number or string */ + if (!empty1) +--- 4348,4354 ---- + clear_tv(&var1); + return FAIL; + } +! else if (evaluate && tv_get_string_chk(&var2) == NULL) + { + /* not a number or string */ + if (!empty1) +*************** +*** 4376,4382 **** + n1 = 0; + if (!empty1 && rettv->v_type != VAR_DICT) + { +! n1 = get_tv_number(&var1); + clear_tv(&var1); + } + if (range) +--- 4376,4382 ---- + n1 = 0; + if (!empty1 && rettv->v_type != VAR_DICT) + { +! n1 = tv_get_number(&var1); + clear_tv(&var1); + } + if (range) +*************** +*** 4385,4391 **** + n2 = -1; + else + { +! n2 = get_tv_number(&var2); + clear_tv(&var2); + } + } +--- 4385,4391 ---- + n2 = -1; + else + { +! n2 = tv_get_number(&var2); + clear_tv(&var2); + } + } +*************** +*** 4403,4409 **** + + case VAR_NUMBER: + case VAR_STRING: +! s = get_tv_string(rettv); + len = (long)STRLEN(s); + if (range) + { +--- 4403,4409 ---- + + case VAR_NUMBER: + case VAR_STRING: +! s = tv_get_string(rettv); + len = (long)STRLEN(s); + if (range) + { +*************** +*** 4504,4510 **** + + if (len == -1) + { +! key = get_tv_string_chk(&var1); + if (key == NULL) + { + clear_tv(&var1); +--- 4504,4510 ---- + + if (len == -1) + { +! key = tv_get_string_chk(&var1); + if (key == NULL) + { + clear_tv(&var1); +*************** +*** 4974,4981 **** + return tv1->vval.v_number == tv2->vval.v_number; + + case VAR_STRING: +! s1 = get_tv_string_buf(tv1, buf1); +! s2 = get_tv_string_buf(tv2, buf2); + return ((ic ? MB_STRICMP(s1, s2) : STRCMP(s1, s2)) == 0); + + case VAR_SPECIAL: +--- 4974,4981 ---- + return tv1->vval.v_number == tv2->vval.v_number; + + case VAR_STRING: +! s1 = tv_get_string_buf(tv1, buf1); +! s2 = tv_get_string_buf(tv2, buf2); + return ((ic ? MB_STRICMP(s1, s2) : STRCMP(s1, s2)) == 0); + + case VAR_SPECIAL: +*************** +*** 5652,5664 **** + case VAR_NUMBER: + case VAR_UNKNOWN: + *tofree = NULL; +! r = get_tv_string_buf(tv, numbuf); + break; + + case VAR_JOB: + case VAR_CHANNEL: + *tofree = NULL; +! r = get_tv_string_buf(tv, numbuf); + if (composite_val) + { + *tofree = string_quote(r, FALSE); +--- 5652,5664 ---- + case VAR_NUMBER: + case VAR_UNKNOWN: + *tofree = NULL; +! r = tv_get_string_buf(tv, numbuf); + break; + + case VAR_JOB: + case VAR_CHANNEL: + *tofree = NULL; +! r = tv_get_string_buf(tv, numbuf); + if (composite_val) + { + *tofree = string_quote(r, FALSE); +*************** +*** 5913,5919 **** + return &pos; + } + +! name = get_tv_string_chk(varp); + if (name == NULL) + return NULL; + if (name[0] == '.') /* cursor */ +--- 5913,5919 ---- + return &pos; + } + +! name = tv_get_string_chk(varp); + if (name == NULL) + return NULL; + if (name[0] == '.') /* cursor */ +*************** +*** 6363,6369 **** + char_u * + get_vim_var_str(int idx) + { +! return get_tv_string(&vimvars[idx].vv_tv); + } + + /* +--- 6363,6369 ---- + char_u * + get_vim_var_str(int idx) + { +! return tv_get_string(&vimvars[idx].vv_tv); + } + + /* +*************** +*** 6936,6955 **** + * Get the number value of a variable. + * If it is a String variable, uses vim_str2nr(). + * For incompatible types, return 0. +! * get_tv_number_chk() is similar to get_tv_number(), but informs the + * caller of incompatible types: it sets *denote to TRUE if "denote" + * is not NULL or returns -1 otherwise. + */ + varnumber_T +! get_tv_number(typval_T *varp) + { + int error = FALSE; + +! return get_tv_number_chk(varp, &error); /* return 0L on error */ + } + + varnumber_T +! get_tv_number_chk(typval_T *varp, int *denote) + { + varnumber_T n = 0L; + +--- 6936,6955 ---- + * Get the number value of a variable. + * If it is a String variable, uses vim_str2nr(). + * For incompatible types, return 0. +! * tv_get_number_chk() is similar to tv_get_number(), but informs the + * caller of incompatible types: it sets *denote to TRUE if "denote" + * is not NULL or returns -1 otherwise. + */ + varnumber_T +! tv_get_number(typval_T *varp) + { + int error = FALSE; + +! return tv_get_number_chk(varp, &error); /* return 0L on error */ + } + + varnumber_T +! tv_get_number_chk(typval_T *varp, int *denote) + { + varnumber_T n = 0L; + +*************** +*** 6991,6997 **** + break; + #endif + case VAR_UNKNOWN: +! internal_error("get_tv_number(UNKNOWN)"); + break; + } + if (denote == NULL) /* useful for values that must be unsigned */ +--- 6991,6997 ---- + break; + #endif + case VAR_UNKNOWN: +! internal_error("tv_get_number(UNKNOWN)"); + break; + } + if (denote == NULL) /* useful for values that must be unsigned */ +*************** +*** 7003,7009 **** + + #ifdef FEAT_FLOAT + float_T +! get_tv_float(typval_T *varp) + { + switch (varp->v_type) + { +--- 7003,7009 ---- + + #ifdef FEAT_FLOAT + float_T +! tv_get_float(typval_T *varp) + { + switch (varp->v_type) + { +*************** +*** 7038,7044 **** + break; + # endif + case VAR_UNKNOWN: +! internal_error("get_tv_float(UNKNOWN)"); + break; + } + return 0; +--- 7038,7044 ---- + break; + # endif + case VAR_UNKNOWN: +! internal_error("tv_get_float(UNKNOWN)"); + break; + } + return 0; +*************** +*** 7048,7072 **** + /* + * Get the string value of a variable. + * If it is a Number variable, the number is converted into a string. +! * get_tv_string() uses a single, static buffer. YOU CAN ONLY USE IT ONCE! +! * get_tv_string_buf() uses a given buffer. + * If the String variable has never been set, return an empty string. + * Never returns NULL; +! * get_tv_string_chk() and get_tv_string_buf_chk() are similar, but return + * NULL on error. + */ + char_u * +! get_tv_string(typval_T *varp) + { + static char_u mybuf[NUMBUFLEN]; + +! return get_tv_string_buf(varp, mybuf); + } + + char_u * +! get_tv_string_buf(typval_T *varp, char_u *buf) + { +! char_u *res = get_tv_string_buf_chk(varp, buf); + + return res != NULL ? res : (char_u *)""; + } +--- 7048,7072 ---- + /* + * Get the string value of a variable. + * If it is a Number variable, the number is converted into a string. +! * tv_get_string() uses a single, static buffer. YOU CAN ONLY USE IT ONCE! +! * tv_get_string_buf() uses a given buffer. + * If the String variable has never been set, return an empty string. + * Never returns NULL; +! * tv_get_string_chk() and tv_get_string_buf_chk() are similar, but return + * NULL on error. + */ + char_u * +! tv_get_string(typval_T *varp) + { + static char_u mybuf[NUMBUFLEN]; + +! return tv_get_string_buf(varp, mybuf); + } + + char_u * +! tv_get_string_buf(typval_T *varp, char_u *buf) + { +! char_u *res = tv_get_string_buf_chk(varp, buf); + + return res != NULL ? res : (char_u *)""; + } +*************** +*** 7075,7089 **** + * Careful: This uses a single, static buffer. YOU CAN ONLY USE IT ONCE! + */ + char_u * +! get_tv_string_chk(typval_T *varp) + { + static char_u mybuf[NUMBUFLEN]; + +! return get_tv_string_buf_chk(varp, mybuf); + } + + char_u * +! get_tv_string_buf_chk(typval_T *varp, char_u *buf) + { + switch (varp->v_type) + { +--- 7075,7089 ---- + * Careful: This uses a single, static buffer. YOU CAN ONLY USE IT ONCE! + */ + char_u * +! tv_get_string_chk(typval_T *varp) + { + static char_u mybuf[NUMBUFLEN]; + +! return tv_get_string_buf_chk(varp, mybuf); + } + + char_u * +! tv_get_string_buf_chk(typval_T *varp, char_u *buf) + { + switch (varp->v_type) + { +*************** +*** 7298,7304 **** + + /* + * Get the string value of a (global/local) variable. +! * Note: see get_tv_string() for how long the pointer remains valid. + * Returns NULL when it doesn't exist. + */ + char_u * +--- 7298,7304 ---- + + /* + * Get the string value of a (global/local) variable. +! * Note: see tv_get_string() for how long the pointer remains valid. + * Returns NULL when it doesn't exist. + */ + char_u * +*************** +*** 7309,7315 **** + v = find_var(name, NULL, FALSE); + if (v == NULL) + return NULL; +! return get_tv_string(&v->di_tv); + } + + /* +--- 7309,7315 ---- + v = find_var(name, NULL, FALSE); + if (v == NULL) + return NULL; +! return tv_get_string(&v->di_tv); + } + + /* +*************** +*** 7544,7550 **** + { + vim_free(v->di_tv.vval.v_string); + if (copy || tv->v_type != VAR_STRING) +! v->di_tv.vval.v_string = vim_strsave(get_tv_string(tv)); + else + { + /* Take over the string to avoid an extra alloc/free. */ +--- 7544,7550 ---- + { + vim_free(v->di_tv.vval.v_string); + if (copy || tv->v_type != VAR_STRING) +! v->di_tv.vval.v_string = vim_strsave(tv_get_string(tv)); + else + { + /* Take over the string to avoid an extra alloc/free. */ +*************** +*** 7555,7561 **** + } + else if (v->di_tv.v_type == VAR_NUMBER) + { +! v->di_tv.vval.v_number = get_tv_number(tv); + if (STRCMP(varname, "searchforward") == 0) + set_search_direction(v->di_tv.vval.v_number ? '/' : '?'); + #ifdef FEAT_SEARCH_EXTRA +--- 7555,7561 ---- + } + else if (v->di_tv.v_type == VAR_NUMBER) + { +! v->di_tv.vval.v_number = tv_get_number(tv); + if (STRCMP(varname, "searchforward") == 0) + set_search_direction(v->di_tv.vval.v_number ? '/' : '?'); + #ifdef FEAT_SEARCH_EXTRA +*************** +*** 7894,7900 **** + int inputdialog, + int secret) + { +! char_u *prompt = get_tv_string_chk(&argvars[0]); + char_u *p = NULL; + int c; + char_u buf[NUMBUFLEN]; +--- 7894,7900 ---- + int inputdialog, + int secret) + { +! char_u *prompt = tv_get_string_chk(&argvars[0]); + char_u *p = NULL; + int c; + char_u buf[NUMBUFLEN]; +*************** +*** 7937,7943 **** + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! defstr = get_tv_string_buf_chk(&argvars[1], buf); + if (defstr != NULL) + stuffReadbuffSpec(defstr); + +--- 7937,7943 ---- + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! defstr = tv_get_string_buf_chk(&argvars[1], buf); + if (defstr != NULL) + stuffReadbuffSpec(defstr); + +*************** +*** 7950,7956 **** + /* input() with a third argument: completion */ + rettv->vval.v_string = NULL; + +! xp_name = get_tv_string_buf_chk(&argvars[2], buf); + if (xp_name == NULL) + return; + +--- 7950,7956 ---- + /* input() with a third argument: completion */ + rettv->vval.v_string = NULL; + +! xp_name = tv_get_string_buf_chk(&argvars[2], buf); + if (xp_name == NULL) + return; + +*************** +*** 7975,7981 **** + if (inputdialog && rettv->vval.v_string == NULL + && argvars[1].v_type != VAR_UNKNOWN + && argvars[2].v_type != VAR_UNKNOWN) +! rettv->vval.v_string = vim_strsave(get_tv_string_buf( + &argvars[2], buf)); + + vim_free(xp_arg); +--- 7975,7981 ---- + if (inputdialog && rettv->vval.v_string == NULL + && argvars[1].v_type != VAR_UNKNOWN + && argvars[2].v_type != VAR_UNKNOWN) +! rettv->vval.v_string = vim_strsave(tv_get_string_buf( + &argvars[2], buf)); + + vim_free(xp_arg); +*************** +*** 8142,8148 **** + + if (!eap->skip) + { +! p = get_tv_string(&rettv); + len = (int)STRLEN(p); + if (ga_grow(&ga, len + 2) == FAIL) + { +--- 8142,8148 ---- + + if (!eap->skip) + { +! p = tv_get_string(&rettv); + len = (int)STRLEN(p); + if (ga_grow(&ga, len + 2) == FAIL) + { +*************** +*** 8205,8211 **** + tabpage_T *tp) /* NULL for current tab page */ + { + win_T *wp; +! int nr = (int)get_tv_number_chk(vp, NULL); + + if (nr < 0) + return NULL; +--- 8205,8211 ---- + tabpage_T *tp) /* NULL for current tab page */ + { + win_T *wp; +! int nr = (int)tv_get_number_chk(vp, NULL); + + if (nr < 0) + return NULL; +*************** +*** 8234,8240 **** + win_T * + find_win_by_nr_or_id(typval_T *vp) + { +! int nr = (int)get_tv_number_chk(vp, NULL); + + if (nr >= LOWEST_WIN_ID) + return win_id2wp(vp); +--- 8234,8240 ---- + win_T * + find_win_by_nr_or_id(typval_T *vp) + { +! int nr = (int)tv_get_number_chk(vp, NULL); + + if (nr >= LOWEST_WIN_ID) + return win_id2wp(vp); +*************** +*** 8257,8263 **** + { + if (tvp->v_type != VAR_UNKNOWN) + { +! n = (long)get_tv_number(tvp); + if (n >= 0) + tp = find_tabpage(n); + } +--- 8257,8263 ---- + { + if (tvp->v_type != VAR_UNKNOWN) + { +! n = (long)tv_get_number(tvp); + if (n >= 0) + tp = find_tabpage(n); + } +*************** +*** 8292,8302 **** + int need_switch_win; + + if (off == 1) +! tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL)); + else + tp = curtab; + win = find_win_by_nr(&argvars[off], tp); +! varname = get_tv_string_chk(&argvars[off + 1]); + ++emsg_off; + + rettv->v_type = VAR_STRING; +--- 8292,8302 ---- + int need_switch_win; + + if (off == 1) +! tp = find_tabpage((int)tv_get_number_chk(&argvars[0], NULL)); + else + tp = curtab; + win = find_win_by_nr(&argvars[off], tp); +! varname = tv_get_string_chk(&argvars[off + 1]); + ++emsg_off; + + rettv->v_type = VAR_STRING; +*************** +*** 8373,8383 **** + return; + + if (off == 1) +! tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL)); + else + tp = curtab; + win = find_win_by_nr(&argvars[off], tp); +! varname = get_tv_string_chk(&argvars[off + 1]); + varp = &argvars[off + 2]; + + if (win != NULL && varname != NULL && varp != NULL) +--- 8373,8383 ---- + return; + + if (off == 1) +! tp = find_tabpage((int)tv_get_number_chk(&argvars[0], NULL)); + else + tp = curtab; + win = find_win_by_nr(&argvars[off], tp); +! varname = tv_get_string_chk(&argvars[off + 1]); + varp = &argvars[off + 2]; + + if (win != NULL && varname != NULL && varp != NULL) +*************** +*** 8393,8400 **** + int error = FALSE; + + ++varname; +! numval = (long)get_tv_number_chk(varp, &error); +! strval = get_tv_string_buf_chk(varp, nbuf); + if (!error && strval != NULL) + set_option_value(varname, numval, strval, OPT_LOCAL); + } +--- 8393,8400 ---- + 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); + } +*************** +*** 8697,8703 **** + { + /* Escape special characters with a backslash. Turn a LF and + * CR into \n and \r. */ +! p = vim_strsave_escaped(get_tv_string(&this_var->di_tv), + (char_u *)"\\\"\n\r"); + if (p == NULL) /* out of memory */ + break; +--- 8697,8703 ---- + { + /* Escape special characters with a backslash. Turn a LF and + * CR into \n and \r. */ +! p = vim_strsave_escaped(tv_get_string(&this_var->di_tv), + (char_u *)"\\\"\n\r"); + if (p == NULL) /* out of memory */ + break; +*************** +*** 8842,8849 **** + { + char_u buf1[NUMBUFLEN]; + char_u buf2[NUMBUFLEN]; +! char_u *fname1 = get_tv_string_buf_chk(&argvars[0], buf1); +! char_u *fname2 = get_tv_string_buf_chk(&argvars[1], buf2); + garray_T ga; + FILE *fd1; + FILE *fd2; +--- 8842,8849 ---- + { + char_u buf1[NUMBUFLEN]; + char_u buf2[NUMBUFLEN]; +! char_u *fname1 = tv_get_string_buf_chk(&argvars[0], buf1); +! char_u *fname2 = tv_get_string_buf_chk(&argvars[1], buf2); + garray_T ga; + FILE *fd1; + FILE *fd2; +*************** +*** 8914,8921 **** + garray_T ga; + char_u buf1[NUMBUFLEN]; + char_u buf2[NUMBUFLEN]; +! char_u *pat = get_tv_string_buf_chk(&argvars[0], buf1); +! char_u *text = get_tv_string_buf_chk(&argvars[1], buf2); + + if (pat == NULL || text == NULL) + EMSG(_(e_invarg)); +--- 8914,8921 ---- + garray_T ga; + char_u buf1[NUMBUFLEN]; + char_u buf2[NUMBUFLEN]; +! char_u *pat = tv_get_string_buf_chk(&argvars[0], buf1); +! char_u *text = tv_get_string_buf_chk(&argvars[1], buf2); + + if (pat == NULL || text == NULL) + EMSG(_(e_invarg)); +*************** +*** 8936,8944 **** + { + garray_T ga; + int error = FALSE; +! varnumber_T lower = get_tv_number_chk(&argvars[0], &error); +! varnumber_T upper = get_tv_number_chk(&argvars[1], &error); +! varnumber_T actual = get_tv_number_chk(&argvars[2], &error); + char_u *tofree; + char msg[200]; + char_u numbuf[NUMBUFLEN]; +--- 8936,8944 ---- + { + garray_T ga; + int error = FALSE; +! varnumber_T lower = tv_get_number_chk(&argvars[0], &error); +! varnumber_T upper = tv_get_number_chk(&argvars[1], &error); +! varnumber_T actual = tv_get_number_chk(&argvars[2], &error); + char_u *tofree; + char msg[200]; + char_u numbuf[NUMBUFLEN]; +*************** +*** 8980,8986 **** + && argvars[0].vval.v_number == (isTrue ? VVAL_TRUE : VVAL_FALSE)) + return 0; + if (argvars[0].v_type != VAR_NUMBER +! || (get_tv_number_chk(&argvars[0], &error) == 0) == isTrue + || error) + { + prepare_assert_error(&ga); +--- 8980,8986 ---- + && argvars[0].vval.v_number == (isTrue ? VVAL_TRUE : VVAL_FALSE)) + return 0; + if (argvars[0].v_type != VAR_NUMBER +! || (tv_get_number_chk(&argvars[0], &error) == 0) == isTrue + || error) + { + prepare_assert_error(&ga); +*************** +*** 9000,9006 **** + garray_T ga; + + prepare_assert_error(&ga); +! ga_concat(&ga, get_tv_string(&argvars[0])); + assert_error(&ga); + ga_clear(&ga); + return 1; +--- 9000,9006 ---- + garray_T ga; + + prepare_assert_error(&ga); +! ga_concat(&ga, tv_get_string(&argvars[0])); + assert_error(&ga); + ga_clear(&ga); + return 1; +*************** +*** 9010,9016 **** + assert_exception(typval_T *argvars) + { + garray_T ga; +! char_u *error = get_tv_string_chk(&argvars[0]); + + if (vimvars[VV_EXCEPTION].vv_str == NULL) + { +--- 9010,9016 ---- + assert_exception(typval_T *argvars) + { + garray_T ga; +! char_u *error = tv_get_string_chk(&argvars[0]); + + if (vimvars[VV_EXCEPTION].vv_str == NULL) + { +*************** +*** 9036,9042 **** + int + assert_beeps(typval_T *argvars) + { +! char_u *cmd = get_tv_string_chk(&argvars[0]); + garray_T ga; + int ret = 0; + +--- 9036,9042 ---- + int + assert_beeps(typval_T *argvars) + { +! char_u *cmd = tv_get_string_chk(&argvars[0]); + garray_T ga; + int ret = 0; + +*************** +*** 9062,9068 **** + int + assert_fails(typval_T *argvars) + { +! char_u *cmd = get_tv_string_chk(&argvars[0]); + garray_T ga; + int ret = 0; + char_u numbuf[NUMBUFLEN]; +--- 9062,9068 ---- + int + assert_fails(typval_T *argvars) + { +! char_u *cmd = tv_get_string_chk(&argvars[0]); + garray_T ga; + int ret = 0; + char_u numbuf[NUMBUFLEN]; +*************** +*** 9091,9097 **** + else if (argvars[1].v_type != VAR_UNKNOWN) + { + char_u buf[NUMBUFLEN]; +! char *error = (char *)get_tv_string_buf_chk(&argvars[1], buf); + + if (error == NULL + || strstr((char *)vimvars[VV_ERRMSG].vv_str, error) == NULL) +--- 9091,9097 ---- + else if (argvars[1].v_type != VAR_UNKNOWN) + { + char_u buf[NUMBUFLEN]; +! char *error = (char *)tv_get_string_buf_chk(&argvars[1], buf); + + if (error == NULL + || strstr((char *)vimvars[VV_ERRMSG].vv_str, error) == NULL) +*************** +*** 9325,9335 **** + if (typ1->v_type == VAR_FLOAT) + f1 = typ1->vval.v_float; + else +! f1 = get_tv_number(typ1); + if (typ2->v_type == VAR_FLOAT) + f2 = typ2->vval.v_float; + else +! f2 = get_tv_number(typ2); + n1 = FALSE; + switch (type) + { +--- 9325,9335 ---- + if (typ1->v_type == VAR_FLOAT) + f1 = typ1->vval.v_float; + else +! f1 = tv_get_number(typ1); + if (typ2->v_type == VAR_FLOAT) + f2 = typ2->vval.v_float; + else +! f2 = tv_get_number(typ2); + n1 = FALSE; + switch (type) + { +*************** +*** 9353,9360 **** + else if ((typ1->v_type == VAR_NUMBER || typ2->v_type == VAR_NUMBER) + && type != TYPE_MATCH && type != TYPE_NOMATCH) + { +! n1 = get_tv_number(typ1); +! n2 = get_tv_number(typ2); + switch (type) + { + case TYPE_EQUAL: n1 = (n1 == n2); break; +--- 9353,9360 ---- + else if ((typ1->v_type == VAR_NUMBER || typ2->v_type == VAR_NUMBER) + && type != TYPE_MATCH && type != TYPE_NOMATCH) + { +! n1 = tv_get_number(typ1); +! n2 = tv_get_number(typ2); + switch (type) + { + case TYPE_EQUAL: n1 = (n1 == n2); break; +*************** +*** 9370,9377 **** + } + else + { +! s1 = get_tv_string_buf(typ1, buf1); +! s2 = get_tv_string_buf(typ2, buf2); + if (type != TYPE_MATCH && type != TYPE_NOMATCH) + i = ic ? MB_STRICMP(s1, s2) : STRCMP(s1, s2); + else +--- 9370,9377 ---- + } + else + { +! s1 = tv_get_string_buf(typ1, buf1); +! s2 = tv_get_string_buf(typ2, buf2); + if (type != TYPE_MATCH && type != TYPE_NOMATCH) + i = ic ? MB_STRICMP(s1, s2) : STRCMP(s1, s2); + else +*************** +*** 10220,10229 **** + int error = FALSE; + + /* filter(): when expr is zero remove the item */ +! *remp = (get_tv_number_chk(&rettv, &error) == 0); + clear_tv(&rettv); + /* On type error, nothing has been removed; return FAIL to stop the +! * loop. The error message was given by get_tv_number_chk(). */ + if (error) + goto theend; + } +--- 10220,10229 ---- + int error = FALSE; + + /* filter(): when expr is zero remove the item */ +! *remp = (tv_get_number_chk(&rettv, &error) == 0); + clear_tv(&rettv); + /* On type error, nothing has been removed; return FAIL to stop the +! * loop. The error message was given by tv_get_number_chk(). */ + if (error) + goto theend; + } +*** ../vim-8.1.0614/src/proto/eval.pro 2018-10-25 12:30:52.274659868 +0200 +--- src/proto/eval.pro 2018-12-21 16:01:29.181557577 +0100 +*************** +*** 82,94 **** + void free_tv(typval_T *varp); + void clear_tv(typval_T *varp); + void init_tv(typval_T *varp); +! varnumber_T get_tv_number(typval_T *varp); +! varnumber_T get_tv_number_chk(typval_T *varp, int *denote); +! float_T get_tv_float(typval_T *varp); +! char_u *get_tv_string(typval_T *varp); +! char_u *get_tv_string_buf(typval_T *varp, char_u *buf); +! char_u *get_tv_string_chk(typval_T *varp); +! char_u *get_tv_string_buf_chk(typval_T *varp, char_u *buf); + dictitem_T *find_var(char_u *name, hashtab_T **htp, int no_autoload); + dictitem_T *find_var_in_ht(hashtab_T *ht, int htname, char_u *varname, int no_autoload); + hashtab_T *find_var_ht(char_u *name, char_u **varname); +--- 82,94 ---- + void free_tv(typval_T *varp); + void clear_tv(typval_T *varp); + void init_tv(typval_T *varp); +! varnumber_T tv_get_number(typval_T *varp); +! varnumber_T tv_get_number_chk(typval_T *varp, int *denote); +! float_T tv_get_float(typval_T *varp); +! char_u *tv_get_string(typval_T *varp); +! char_u *tv_get_string_buf(typval_T *varp, char_u *buf); +! char_u *tv_get_string_chk(typval_T *varp); +! char_u *tv_get_string_buf_chk(typval_T *varp, char_u *buf); + dictitem_T *find_var(char_u *name, hashtab_T **htp, int no_autoload); + dictitem_T *find_var_in_ht(hashtab_T *ht, int htname, char_u *varname, int no_autoload); + hashtab_T *find_var_ht(char_u *name, char_u **varname); +*** ../vim-8.1.0614/src/channel.c 2018-12-14 21:31:58.008319718 +0100 +--- src/channel.c 2018-12-21 15:59:11.838468714 +0100 +*************** +*** 938,944 **** + jobopt_T opt; + channel_T *channel = NULL; + +! address = get_tv_string(&argvars[0]); + if (argvars[1].v_type != VAR_UNKNOWN + && (argvars[1].v_type != VAR_DICT || argvars[1].vval.v_dict == NULL)) + { +--- 938,944 ---- + jobopt_T opt; + channel_T *channel = NULL; + +! address = tv_get_string(&argvars[0]); + if (argvars[1].v_type != VAR_UNKNOWN + && (argvars[1].v_type != VAR_DICT || argvars[1].vval.v_dict == NULL)) + { +*************** +*** 4003,4009 **** + rettv->v_type = VAR_STRING; + rettv->vval.v_string = NULL; + +! text = get_tv_string_buf(&argvars[1], buf); + channel = send_common(argvars, text, 0, eval, &opt, + eval ? "ch_evalraw" : "ch_sendraw", &part_read); + if (channel != NULL && eval) +--- 4003,4009 ---- + rettv->v_type = VAR_STRING; + rettv->vval.v_string = NULL; + +! text = tv_get_string_buf(&argvars[1], buf); + channel = send_common(argvars, text, 0, eval, &opt, + eval ? "ch_evalraw" : "ch_sendraw", &part_read); + if (channel != NULL && eval) +*************** +*** 4402,4408 **** + static int + handle_mode(typval_T *item, jobopt_T *opt, ch_mode_T *modep, int jo) + { +! char_u *val = get_tv_string(item); + + opt->jo_set |= jo; + if (STRCMP(val, "nl") == 0) +--- 4402,4408 ---- + static int + handle_mode(typval_T *item, jobopt_T *opt, ch_mode_T *modep, int jo) + { +! char_u *val = tv_get_string(item); + + opt->jo_set |= jo; + if (STRCMP(val, "nl") == 0) +*************** +*** 4424,4430 **** + static int + handle_io(typval_T *item, ch_part_T part, jobopt_T *opt) + { +! char_u *val = get_tv_string(item); + + opt->jo_set |= JO_OUT_IO << (part - PART_OUT); + if (STRCMP(val, "null") == 0) +--- 4424,4430 ---- + static int + handle_io(typval_T *item, ch_part_T part, jobopt_T *opt) + { +! char_u *val = tv_get_string(item); + + opt->jo_set |= JO_OUT_IO << (part - PART_OUT); + if (STRCMP(val, "null") == 0) +*************** +*** 4561,4567 **** + { + if (!(supported & JO_MODE)) + break; +! opt->jo_noblock = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "in_io") == 0 + || STRCMP(hi->hi_key, "out_io") == 0 +--- 4561,4567 ---- + { + if (!(supported & JO_MODE)) + break; +! opt->jo_noblock = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "in_io") == 0 + || STRCMP(hi->hi_key, "out_io") == 0 +*************** +*** 4582,4594 **** + break; + opt->jo_set |= JO_OUT_NAME << (part - PART_OUT); + opt->jo_io_name[part] = +! get_tv_string_buf_chk(item, opt->jo_io_name_buf[part]); + } + else if (STRCMP(hi->hi_key, "pty") == 0) + { + if (!(supported & JO_MODE)) + break; +! opt->jo_pty = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "in_buf") == 0 + || STRCMP(hi->hi_key, "out_buf") == 0 +--- 4582,4594 ---- + break; + opt->jo_set |= JO_OUT_NAME << (part - PART_OUT); + opt->jo_io_name[part] = +! tv_get_string_buf_chk(item, opt->jo_io_name_buf[part]); + } + else if (STRCMP(hi->hi_key, "pty") == 0) + { + if (!(supported & JO_MODE)) + break; +! opt->jo_pty = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "in_buf") == 0 + || STRCMP(hi->hi_key, "out_buf") == 0 +*************** +*** 4599,4608 **** + if (!(supported & JO_OUT_IO)) + break; + opt->jo_set |= JO_OUT_BUF << (part - PART_OUT); +! opt->jo_io_buf[part] = get_tv_number(item); + if (opt->jo_io_buf[part] <= 0) + { +! EMSG3(_(e_invargNval), hi->hi_key, get_tv_string(item)); + return FAIL; + } + if (buflist_findnr(opt->jo_io_buf[part]) == NULL) +--- 4599,4608 ---- + if (!(supported & JO_OUT_IO)) + break; + opt->jo_set |= JO_OUT_BUF << (part - PART_OUT); +! opt->jo_io_buf[part] = tv_get_number(item); + if (opt->jo_io_buf[part] <= 0) + { +! EMSG3(_(e_invargNval), hi->hi_key, tv_get_string(item)); + return FAIL; + } + if (buflist_findnr(opt->jo_io_buf[part]) == NULL) +*************** +*** 4619,4625 **** + if (!(supported & JO_OUT_IO)) + break; + opt->jo_set |= JO_OUT_MODIFIABLE << (part - PART_OUT); +! opt->jo_modifiable[part] = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "out_msg") == 0 + || STRCMP(hi->hi_key, "err_msg") == 0) +--- 4619,4625 ---- + if (!(supported & JO_OUT_IO)) + break; + opt->jo_set |= JO_OUT_MODIFIABLE << (part - PART_OUT); +! opt->jo_modifiable[part] = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "out_msg") == 0 + || STRCMP(hi->hi_key, "err_msg") == 0) +*************** +*** 4629,4635 **** + if (!(supported & JO_OUT_IO)) + break; + opt->jo_set2 |= JO2_OUT_MSG << (part - PART_OUT); +! opt->jo_message[part] = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "in_top") == 0 + || STRCMP(hi->hi_key, "in_bot") == 0) +--- 4629,4635 ---- + if (!(supported & JO_OUT_IO)) + break; + opt->jo_set2 |= JO2_OUT_MSG << (part - PART_OUT); +! opt->jo_message[part] = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "in_top") == 0 + || STRCMP(hi->hi_key, "in_bot") == 0) +*************** +*** 4648,4657 **** + lp = &opt->jo_in_bot; + opt->jo_set |= JO_IN_BOT; + } +! *lp = get_tv_number(item); + if (*lp < 0) + { +! EMSG3(_(e_invargNval), hi->hi_key, get_tv_string(item)); + return FAIL; + } + } +--- 4648,4657 ---- + lp = &opt->jo_in_bot; + opt->jo_set |= JO_IN_BOT; + } +! *lp = tv_get_number(item); + if (*lp < 0) + { +! EMSG3(_(e_invargNval), hi->hi_key, tv_get_string(item)); + return FAIL; + } + } +*************** +*** 4718,4724 **** + else if (STRCMP(hi->hi_key, "drop") == 0) + { + int never = FALSE; +! val = get_tv_string(item); + + if (STRCMP(val, "never") == 0) + never = TRUE; +--- 4718,4724 ---- + else if (STRCMP(hi->hi_key, "drop") == 0) + { + int never = FALSE; +! val = tv_get_string(item); + + if (STRCMP(val, "never") == 0) + never = TRUE; +*************** +*** 4747,4753 **** + if (!(supported2 & JO2_TERM_NAME)) + break; + opt->jo_set2 |= JO2_TERM_NAME; +! opt->jo_term_name = get_tv_string_chk(item); + if (opt->jo_term_name == NULL) + { + EMSG2(_(e_invargval), "term_name"); +--- 4747,4753 ---- + if (!(supported2 & JO2_TERM_NAME)) + break; + opt->jo_set2 |= JO2_TERM_NAME; +! opt->jo_term_name = tv_get_string_chk(item); + if (opt->jo_term_name == NULL) + { + EMSG2(_(e_invargval), "term_name"); +*************** +*** 4758,4764 **** + { + if (!(supported2 & JO2_TERM_FINISH)) + break; +! val = get_tv_string(item); + if (STRCMP(val, "open") != 0 && STRCMP(val, "close") != 0) + { + EMSG3(_(e_invargNval), "term_finish", val); +--- 4758,4764 ---- + { + if (!(supported2 & JO2_TERM_FINISH)) + break; +! val = tv_get_string(item); + if (STRCMP(val, "open") != 0 && STRCMP(val, "close") != 0) + { + EMSG3(_(e_invargNval), "term_finish", val); +*************** +*** 4774,4780 **** + if (!(supported2 & JO2_TERM_OPENCMD)) + break; + opt->jo_set2 |= JO2_TERM_OPENCMD; +! p = opt->jo_term_opencmd = get_tv_string_chk(item); + if (p != NULL) + { + /* Must have %d and no other %. */ +--- 4774,4780 ---- + if (!(supported2 & JO2_TERM_OPENCMD)) + break; + opt->jo_set2 |= JO2_TERM_OPENCMD; +! p = opt->jo_term_opencmd = tv_get_string_chk(item); + if (p != NULL) + { + /* Must have %d and no other %. */ +*************** +*** 4796,4802 **** + if (!(supported2 & JO2_EOF_CHARS)) + break; + opt->jo_set2 |= JO2_EOF_CHARS; +! p = opt->jo_eof_chars = get_tv_string_chk(item); + if (p == NULL) + { + EMSG2(_(e_invargval), "eof_chars"); +--- 4796,4802 ---- + if (!(supported2 & JO2_EOF_CHARS)) + break; + opt->jo_set2 |= JO2_EOF_CHARS; +! p = opt->jo_eof_chars = tv_get_string_chk(item); + if (p == NULL) + { + EMSG2(_(e_invargval), "eof_chars"); +*************** +*** 4808,4861 **** + if (!(supported2 & JO2_TERM_ROWS)) + break; + opt->jo_set2 |= JO2_TERM_ROWS; +! opt->jo_term_rows = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "term_cols") == 0) + { + if (!(supported2 & JO2_TERM_COLS)) + break; + opt->jo_set2 |= JO2_TERM_COLS; +! opt->jo_term_cols = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "vertical") == 0) + { + if (!(supported2 & JO2_VERTICAL)) + break; + opt->jo_set2 |= JO2_VERTICAL; +! opt->jo_vertical = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "curwin") == 0) + { + if (!(supported2 & JO2_CURWIN)) + break; + opt->jo_set2 |= JO2_CURWIN; +! opt->jo_curwin = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "hidden") == 0) + { + if (!(supported2 & JO2_HIDDEN)) + break; + opt->jo_set2 |= JO2_HIDDEN; +! opt->jo_hidden = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "norestore") == 0) + { + if (!(supported2 & JO2_NORESTORE)) + break; + opt->jo_set2 |= JO2_NORESTORE; +! opt->jo_term_norestore = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "term_kill") == 0) + { + if (!(supported2 & JO2_TERM_KILL)) + break; + opt->jo_set2 |= JO2_TERM_KILL; +! opt->jo_term_kill = get_tv_string_chk(item); + } + # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) + else if (STRCMP(hi->hi_key, "ansi_colors") == 0) + { +! int n = 0; + listitem_T *li; + long_u rgb[16]; + +--- 4808,4861 ---- + if (!(supported2 & JO2_TERM_ROWS)) + break; + opt->jo_set2 |= JO2_TERM_ROWS; +! opt->jo_term_rows = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "term_cols") == 0) + { + if (!(supported2 & JO2_TERM_COLS)) + break; + opt->jo_set2 |= JO2_TERM_COLS; +! opt->jo_term_cols = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "vertical") == 0) + { + if (!(supported2 & JO2_VERTICAL)) + break; + opt->jo_set2 |= JO2_VERTICAL; +! opt->jo_vertical = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "curwin") == 0) + { + if (!(supported2 & JO2_CURWIN)) + break; + opt->jo_set2 |= JO2_CURWIN; +! opt->jo_curwin = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "hidden") == 0) + { + if (!(supported2 & JO2_HIDDEN)) + break; + opt->jo_set2 |= JO2_HIDDEN; +! opt->jo_hidden = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "norestore") == 0) + { + if (!(supported2 & JO2_NORESTORE)) + break; + opt->jo_set2 |= JO2_NORESTORE; +! opt->jo_term_norestore = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "term_kill") == 0) + { + if (!(supported2 & JO2_TERM_KILL)) + break; + opt->jo_set2 |= JO2_TERM_KILL; +! opt->jo_term_kill = tv_get_string_chk(item); + } + # if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) + else if (STRCMP(hi->hi_key, "ansi_colors") == 0) + { +! int n = 0; + listitem_T *li; + long_u rgb[16]; + +*************** +*** 4873,4881 **** + for (; li != NULL && n < 16; li = li->li_next, n++) + { + char_u *color_name; +! guicolor_T guicolor; + +! color_name = get_tv_string_chk(&li->li_tv); + if (color_name == NULL) + return FAIL; + +--- 4873,4881 ---- + for (; li != NULL && n < 16; li = li->li_next, n++) + { + char_u *color_name; +! guicolor_T guicolor; + +! color_name = tv_get_string_chk(&li->li_tv); + if (color_name == NULL) + return FAIL; + +*************** +*** 4915,4921 **** + { + if (!(supported2 & JO2_CWD)) + break; +! opt->jo_cwd = get_tv_string_buf_chk(item, opt->jo_cwd_buf); + if (opt->jo_cwd == NULL || !mch_isdir(opt->jo_cwd) + #ifndef WIN32 // Win32 directories don't have the concept of "executable" + || mch_access((char *)opt->jo_cwd, X_OK) != 0 +--- 4915,4921 ---- + { + if (!(supported2 & JO2_CWD)) + break; +! opt->jo_cwd = tv_get_string_buf_chk(item, opt->jo_cwd_buf); + if (opt->jo_cwd == NULL || !mch_isdir(opt->jo_cwd) + #ifndef WIN32 // Win32 directories don't have the concept of "executable" + || mch_access((char *)opt->jo_cwd, X_OK) != 0 +*************** +*** 4932,4966 **** + if (!(supported & JO_WAITTIME)) + break; + opt->jo_set |= JO_WAITTIME; +! opt->jo_waittime = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "timeout") == 0) + { + if (!(supported & JO_TIMEOUT)) + break; + opt->jo_set |= JO_TIMEOUT; +! opt->jo_timeout = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "out_timeout") == 0) + { + if (!(supported & JO_OUT_TIMEOUT)) + break; + opt->jo_set |= JO_OUT_TIMEOUT; +! opt->jo_out_timeout = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "err_timeout") == 0) + { + if (!(supported & JO_ERR_TIMEOUT)) + break; + opt->jo_set |= JO_ERR_TIMEOUT; +! opt->jo_err_timeout = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "part") == 0) + { + if (!(supported & JO_PART)) + break; + opt->jo_set |= JO_PART; +! val = get_tv_string(item); + if (STRCMP(val, "err") == 0) + opt->jo_part = PART_ERR; + else if (STRCMP(val, "out") == 0) +--- 4932,4966 ---- + if (!(supported & JO_WAITTIME)) + break; + opt->jo_set |= JO_WAITTIME; +! opt->jo_waittime = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "timeout") == 0) + { + if (!(supported & JO_TIMEOUT)) + break; + opt->jo_set |= JO_TIMEOUT; +! opt->jo_timeout = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "out_timeout") == 0) + { + if (!(supported & JO_OUT_TIMEOUT)) + break; + opt->jo_set |= JO_OUT_TIMEOUT; +! opt->jo_out_timeout = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "err_timeout") == 0) + { + if (!(supported & JO_ERR_TIMEOUT)) + break; + opt->jo_set |= JO_ERR_TIMEOUT; +! opt->jo_err_timeout = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "part") == 0) + { + if (!(supported & JO_PART)) + break; + opt->jo_set |= JO_PART; +! val = tv_get_string(item); + if (STRCMP(val, "err") == 0) + opt->jo_part = PART_ERR; + else if (STRCMP(val, "out") == 0) +*************** +*** 4976,4989 **** + if (!(supported & JO_ID)) + break; + opt->jo_set |= JO_ID; +! opt->jo_id = get_tv_number(item); + } + else if (STRCMP(hi->hi_key, "stoponexit") == 0) + { + if (!(supported & JO_STOPONEXIT)) + break; + opt->jo_set |= JO_STOPONEXIT; +! opt->jo_stoponexit = get_tv_string_buf_chk(item, + opt->jo_soe_buf); + if (opt->jo_stoponexit == NULL) + { +--- 4976,4989 ---- + if (!(supported & JO_ID)) + break; + opt->jo_set |= JO_ID; +! opt->jo_id = tv_get_number(item); + } + else if (STRCMP(hi->hi_key, "stoponexit") == 0) + { + if (!(supported & JO_STOPONEXIT)) + break; + opt->jo_set |= JO_STOPONEXIT; +! opt->jo_stoponexit = tv_get_string_buf_chk(item, + opt->jo_soe_buf); + if (opt->jo_stoponexit == NULL) + { +*************** +*** 4996,5002 **** + if (!(supported & JO_BLOCK_WRITE)) + break; + opt->jo_set |= JO_BLOCK_WRITE; +! opt->jo_block_write = get_tv_number(item); + } + else + break; +--- 4996,5002 ---- + if (!(supported & JO_BLOCK_WRITE)) + break; + opt->jo_set |= JO_BLOCK_WRITE; +! opt->jo_block_write = tv_get_number(item); + } + else + break; +*************** +*** 5035,5041 **** + } + else + { +! EMSG2(_(e_invarg2), get_tv_string(tv)); + return NULL; + } + if (channel != NULL && reading) +--- 5035,5041 ---- + } + else + { +! EMSG2(_(e_invarg2), tv_get_string(tv)); + return NULL; + } + if (channel != NULL && reading) +*************** +*** 5262,5268 **** + + for (li = l->lv_first; li != NULL; li = li->li_next) + { +! s = get_tv_string_chk(&li->li_tv); + if (s == NULL) + return FAIL; + s = win32_escape_arg(s); +--- 5262,5268 ---- + + for (li = l->lv_first; li != NULL; li = li->li_next) + { +! s = tv_get_string_chk(&li->li_tv); + if (s == NULL) + return FAIL; + s = win32_escape_arg(s); +*************** +*** 5832,5838 **** + arg = (char_u *)""; + else + { +! arg = get_tv_string_chk(&argvars[1]); + if (arg == NULL) + { + EMSG(_(e_invarg)); +--- 5832,5838 ---- + arg = (char_u *)""; + else + { +! arg = tv_get_string_chk(&argvars[1]); + if (arg == NULL) + { + EMSG(_(e_invarg)); +*** ../vim-8.1.0614/src/dict.c 2018-12-14 15:38:28.323597695 +0100 +--- src/dict.c 2018-12-21 15:57:01.811321106 +0100 +*************** +*** 495,501 **** + di = dict_find(d, key, -1); + if (di == NULL) + return NULL; +! s = get_tv_string(&di->di_tv); + if (save && s != NULL) + s = vim_strsave(s); + return s; +--- 495,501 ---- + di = dict_find(d, key, -1); + if (di == NULL) + return NULL; +! s = tv_get_string(&di->di_tv); + if (save && s != NULL) + s = vim_strsave(s); + return s; +*************** +*** 513,519 **** + di = dict_find(d, key, -1); + if (di == NULL) + return 0; +! return get_tv_number(&di->di_tv); + } + + /* +--- 513,519 ---- + di = dict_find(d, key, -1); + if (di == NULL) + return 0; +! return tv_get_number(&di->di_tv); + } + + /* +*************** +*** 630,639 **** + } + if (evaluate) + { +! key = get_tv_string_buf_chk(&tvkey, buf); + if (key == NULL) + { +! /* "key" is NULL when get_tv_string_buf_chk() gave an errmsg */ + clear_tv(&tvkey); + goto failret; + } +--- 630,639 ---- + } + if (evaluate) + { +! key = tv_get_string_buf_chk(&tvkey, buf); + if (key == NULL) + { +! /* "key" is NULL when tv_get_string_buf_chk() gave an errmsg */ + clear_tv(&tvkey); + goto failret; + } +*** ../vim-8.1.0614/src/evalfunc.c 2018-12-21 15:16:57.479579788 +0100 +--- src/evalfunc.c 2018-12-21 16:00:34.913918741 +0100 +*************** +*** 1133,1144 **** + * Returns -1 on error. + */ + static linenr_T +! get_tv_lnum(typval_T *argvars) + { + typval_T rettv; + linenr_T lnum; + +! lnum = (linenr_T)get_tv_number_chk(&argvars[0], NULL); + if (lnum == 0) /* no valid number, try using line() */ + { + rettv.v_type = VAR_NUMBER; +--- 1133,1144 ---- + * Returns -1 on error. + */ + static linenr_T +! tv_get_lnum(typval_T *argvars) + { + typval_T rettv; + linenr_T lnum; + +! lnum = (linenr_T)tv_get_number_chk(&argvars[0], NULL); + if (lnum == 0) /* no valid number, try using line() */ + { + rettv.v_type = VAR_NUMBER; +*************** +*** 1149,1154 **** +--- 1149,1170 ---- + return lnum; + } + ++ /* ++ * Get the lnum from the first argument. ++ * Also accepts "$", then "buf" is used. ++ * Returns 0 on error. ++ */ ++ static linenr_T ++ tv_get_lnum_buf(typval_T *argvars, buf_T *buf) ++ { ++ if (argvars[0].v_type == VAR_STRING ++ && argvars[0].vval.v_string != NULL ++ && argvars[0].vval.v_string[0] == '$' ++ && buf != NULL) ++ return buf->b_ml.ml_line_count; ++ return (linenr_T)tv_get_number_chk(&argvars[0], NULL); ++ } ++ + #ifdef FEAT_FLOAT + /* + * Get the float value of "argvars[0]" into "f". +*************** +*** 1187,1193 **** + varnumber_T n; + int error = FALSE; + +! n = get_tv_number_chk(&argvars[0], &error); + if (error) + rettv->vval.v_number = -1; + else if (n > 0) +--- 1203,1209 ---- + varnumber_T n; + int error = FALSE; + +! n = tv_get_number_chk(&argvars[0], &error); + if (error) + rettv->vval.v_number = -1; + else if (n > 0) +*************** +*** 1240,1263 **** + static void + f_and(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL) +! & get_tv_number_chk(&argvars[1], NULL); +! } +! +! /* +! * Get the lnum from the first argument. +! * Also accepts "$", then "buf" is used. +! * Returns 0 on error. +! */ +! static linenr_T +! get_tv_lnum_buf(typval_T *argvars, buf_T *buf) +! { +! if (argvars[0].v_type == VAR_STRING +! && argvars[0].vval.v_string != NULL +! && argvars[0].vval.v_string[0] == '$' +! && buf != NULL) +! return buf->b_ml.ml_line_count; +! return (linenr_T)get_tv_number_chk(&argvars[0], NULL); + } + + /* +--- 1256,1263 ---- + static void + f_and(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = tv_get_number_chk(&argvars[0], NULL) +! & tv_get_number_chk(&argvars[1], NULL); + } + + /* +*************** +*** 1330,1336 **** + li = l->lv_first; + } + else +! line = get_tv_string_chk(lines); + + /* default result is zero == OK */ + for (;;) +--- 1330,1336 ---- + li = l->lv_first; + } + else +! line = tv_get_string_chk(lines); + + /* default result is zero == OK */ + for (;;) +*************** +*** 1340,1346 **** + /* list argument, get next string */ + if (li == NULL) + break; +! line = get_tv_string_chk(&li->li_tv); + li = li->li_next; + } + +--- 1340,1346 ---- + /* list argument, get next string */ + if (li == NULL) + break; +! line = tv_get_string_chk(&li->li_tv); + li = li->li_next; + } + +*************** +*** 1411,1417 **** + static void + f_append(typval_T *argvars, typval_T *rettv) + { +! linenr_T lnum = get_tv_lnum(&argvars[0]); + + set_buffer_lines(curbuf, lnum, TRUE, &argvars[1], rettv); + } +--- 1411,1417 ---- + static void + f_append(typval_T *argvars, typval_T *rettv) + { +! linenr_T lnum = tv_get_lnum(&argvars[0]); + + set_buffer_lines(curbuf, lnum, TRUE, &argvars[1], rettv); + } +*************** +*** 1430,1436 **** + rettv->vval.v_number = 1; /* FAIL */ + else + { +! lnum = get_tv_lnum_buf(&argvars[1], buf); + set_buffer_lines(buf, lnum, TRUE, &argvars[2], rettv); + } + } +--- 1430,1436 ---- + rettv->vval.v_number = 1; /* FAIL */ + else + { +! lnum = tv_get_lnum_buf(&argvars[1], buf); + set_buffer_lines(buf, lnum, TRUE, &argvars[2], rettv); + } + } +*************** +*** 1447,1453 **** + // use the current window + rettv->vval.v_number = ARGCOUNT; + else if (argvars[0].v_type == VAR_NUMBER +! && get_tv_number(&argvars[0]) == -1) + // use the global argument list + rettv->vval.v_number = GARGCOUNT; + else +--- 1447,1453 ---- + // use the current window + rettv->vval.v_number = ARGCOUNT; + else if (argvars[0].v_type == VAR_NUMBER +! && tv_get_number(&argvars[0]) == -1) + // use the global argument list + rettv->vval.v_number = GARGCOUNT; + else +*************** +*** 1516,1522 **** + argcount = ARGCOUNT; + } + else if (argvars[1].v_type == VAR_NUMBER +! && get_tv_number(&argvars[1]) == -1) + { + arglist = GARGLIST; + argcount = GARGCOUNT; +--- 1516,1522 ---- + argcount = ARGCOUNT; + } + else if (argvars[1].v_type == VAR_NUMBER +! && tv_get_number(&argvars[1]) == -1) + { + arglist = GARGLIST; + argcount = GARGCOUNT; +*************** +*** 1535,1541 **** + + rettv->v_type = VAR_STRING; + rettv->vval.v_string = NULL; +! idx = get_tv_number_chk(&argvars[0], NULL); + if (arglist != NULL && idx >= 0 && idx < argcount) + rettv->vval.v_string = vim_strsave(alist_name(&arglist[idx])); + else if (idx == -1) +--- 1535,1541 ---- + + rettv->v_type = VAR_STRING; + rettv->vval.v_string = NULL; +! idx = tv_get_number_chk(&argvars[0], NULL); + if (arglist != NULL && idx >= 0 && idx < argcount) + rettv->vval.v_string = vim_strsave(alist_name(&arglist[idx])); + else if (idx == -1) +*************** +*** 1717,1723 **** + ) + post_balloon(balloonEval, NULL, argvars[0].vval.v_list); + else +! post_balloon(balloonEval, get_tv_string_chk(&argvars[0]), NULL); + } + } + +--- 1717,1723 ---- + ) + post_balloon(balloonEval, NULL, argvars[0].vval.v_list); + else +! post_balloon(balloonEval, tv_get_string_chk(&argvars[0]), NULL); + } + } + +*************** +*** 1727,1733 **** + { + if (rettv_list_alloc(rettv) == OK) + { +! char_u *msg = get_tv_string_chk(&argvars[0]); + + if (msg != NULL) + { +--- 1727,1733 ---- + { + if (rettv_list_alloc(rettv) == OK) + { +! char_u *msg = tv_get_string_chk(&argvars[0]); + + if (msg != NULL) + { +*************** +*** 1762,1771 **** + char_u buf2[NUMBUFLEN]; + int error = FALSE; + +! save = (int)get_tv_number_chk(&argvars[0], &error); +! title = get_tv_string_chk(&argvars[1]); +! initdir = get_tv_string_buf_chk(&argvars[2], buf); +! defname = get_tv_string_buf_chk(&argvars[3], buf2); + + if (error || title == NULL || initdir == NULL || defname == NULL) + rettv->vval.v_string = NULL; +--- 1762,1771 ---- + char_u buf2[NUMBUFLEN]; + int error = FALSE; + +! save = (int)tv_get_number_chk(&argvars[0], &error); +! title = tv_get_string_chk(&argvars[1]); +! initdir = tv_get_string_buf_chk(&argvars[2], buf); +! defname = tv_get_string_buf_chk(&argvars[3], buf2); + + if (error || title == NULL || initdir == NULL || defname == NULL) + rettv->vval.v_string = NULL; +*************** +*** 1790,1797 **** + char_u *initdir; + char_u buf[NUMBUFLEN]; + +! title = get_tv_string_chk(&argvars[0]); +! initdir = get_tv_string_buf_chk(&argvars[1], buf); + + if (title == NULL || initdir == NULL) + rettv->vval.v_string = NULL; +--- 1790,1797 ---- + char_u *initdir; + char_u buf[NUMBUFLEN]; + +! title = tv_get_string_chk(&argvars[0]); +! initdir = tv_get_string_buf_chk(&argvars[1], buf); + + if (title == NULL || initdir == NULL) + rettv->vval.v_string = NULL; +*************** +*** 1924,1930 **** + { + buf_T *buf; + +! (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */ + ++emsg_off; + buf = get_buf_tv(&argvars[0], FALSE); + rettv->v_type = VAR_STRING; +--- 1924,1930 ---- + { + buf_T *buf; + +! (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */ + ++emsg_off; + buf = get_buf_tv(&argvars[0], FALSE); + rettv->v_type = VAR_STRING; +*************** +*** 1945,1951 **** + int error = FALSE; + char_u *name; + +! (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */ + ++emsg_off; + buf = get_buf_tv(&argvars[0], FALSE); + --emsg_off; +--- 1945,1951 ---- + int error = FALSE; + char_u *name; + +! (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */ + ++emsg_off; + buf = get_buf_tv(&argvars[0], FALSE); + --emsg_off; +*************** +*** 1954,1962 **** + * new buffer. */ + if (buf == NULL + && argvars[1].v_type != VAR_UNKNOWN +! && get_tv_number_chk(&argvars[1], &error) != 0 + && !error +! && (name = get_tv_string_chk(&argvars[0])) != NULL + && !error) + buf = buflist_new(name, NULL, (linenr_T)1, 0); + +--- 1954,1962 ---- + * new buffer. */ + if (buf == NULL + && argvars[1].v_type != VAR_UNKNOWN +! && tv_get_number_chk(&argvars[1], &error) != 0 + && !error +! && (name = tv_get_string_chk(&argvars[0])) != NULL + && !error) + buf = buflist_new(name, NULL, (linenr_T)1, 0); + +*************** +*** 1973,1979 **** + int winnr = 0; + buf_T *buf; + +! (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */ + ++emsg_off; + buf = get_buf_tv(&argvars[0], TRUE); + FOR_ALL_WINDOWS(wp) +--- 1973,1979 ---- + int winnr = 0; + buf_T *buf; + +! (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */ + ++emsg_off; + buf = get_buf_tv(&argvars[0], TRUE); + FOR_ALL_WINDOWS(wp) +*************** +*** 2015,2021 **** + #else + long boff = 0; + +! boff = get_tv_number(&argvars[0]) - 1; /* boff gets -1 on type error */ + if (boff < 0) + rettv->vval.v_number = -1; + else +--- 2015,2021 ---- + #else + long boff = 0; + +! boff = tv_get_number(&argvars[0]) - 1; /* boff gets -1 on type error */ + if (boff < 0) + rettv->vval.v_number = -1; + else +*************** +*** 2033,2040 **** + char_u *str; + varnumber_T idx; + +! str = get_tv_string_chk(&argvars[0]); +! idx = get_tv_number_chk(&argvars[1], NULL); + rettv->vval.v_number = -1; + if (str == NULL || idx < 0) + return; +--- 2033,2040 ---- + char_u *str; + varnumber_T idx; + +! str = tv_get_string_chk(&argvars[0]); +! idx = tv_get_number_chk(&argvars[1], NULL); + rettv->vval.v_number = -1; + if (str == NULL || idx < 0) + return; +*************** +*** 2101,2107 **** + func = partial_name(partial); + } + else +! func = get_tv_string(&argvars[0]); + if (*func == NUL) + return; /* type error or empty name */ + +--- 2101,2107 ---- + func = partial_name(partial); + } + else +! func = tv_get_string(&argvars[0]); + if (*func == NUL) + return; /* type error or empty name */ + +*************** +*** 2189,2195 **** + rettv->vval.v_number = -1; + if (channel != NULL) + { +! char_u *what = get_tv_string(&argvars[1]); + int part; + + if (STRCMP(what, "err") == 0) +--- 2189,2195 ---- + rettv->vval.v_number = -1; + if (channel != NULL) + { +! char_u *what = tv_get_string(&argvars[1]); + int part; + + if (STRCMP(what, "err") == 0) +*************** +*** 2241,2247 **** + static void + f_ch_log(typval_T *argvars, typval_T *rettv UNUSED) + { +! char_u *msg = get_tv_string(&argvars[0]); + channel_T *channel = NULL; + + if (argvars[1].v_type != VAR_UNKNOWN) +--- 2241,2247 ---- + static void + f_ch_log(typval_T *argvars, typval_T *rettv UNUSED) + { +! char_u *msg = tv_get_string(&argvars[0]); + channel_T *channel = NULL; + + if (argvars[1].v_type != VAR_UNKNOWN) +*************** +*** 2263,2271 **** + /* Don't open a file in restricted mode. */ + if (check_restricted() || check_secure()) + return; +! fname = get_tv_string(&argvars[0]); + if (argvars[1].v_type == VAR_STRING) +! opt = get_tv_string_buf(&argvars[1], buf); + ch_logfile(fname, opt); + } + +--- 2263,2271 ---- + /* Don't open a file in restricted mode. */ + if (check_restricted() || check_secure()) + return; +! fname = tv_get_string(&argvars[0]); + if (argvars[1].v_type == VAR_STRING) +! opt = tv_get_string_buf(&argvars[1], buf); + ch_logfile(fname, opt); + } + +*************** +*** 2403,2418 **** + int utf8 = 0; + + if (argvars[1].v_type != VAR_UNKNOWN) +! utf8 = (int)get_tv_number_chk(&argvars[1], NULL); + + if (utf8) +! rettv->vval.v_number = (*utf_ptr2char)(get_tv_string(&argvars[0])); + else +! rettv->vval.v_number = (*mb_ptr2char)(get_tv_string(&argvars[0])); + } + else + #endif +! rettv->vval.v_number = get_tv_string(&argvars[0])[0]; + } + + /* +--- 2403,2418 ---- + int utf8 = 0; + + if (argvars[1].v_type != VAR_UNKNOWN) +! utf8 = (int)tv_get_number_chk(&argvars[1], NULL); + + if (utf8) +! rettv->vval.v_number = (*utf_ptr2char)(tv_get_string(&argvars[0])); + else +! rettv->vval.v_number = (*mb_ptr2char)(tv_get_string(&argvars[0])); + } + else + #endif +! rettv->vval.v_number = tv_get_string(&argvars[0])[0]; + } + + /* +*************** +*** 2426,2432 **** + linenr_T lnum; + + pos = curwin->w_cursor; +! lnum = get_tv_lnum(argvars); + if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) + { + curwin->w_cursor.lnum = lnum; +--- 2426,2432 ---- + linenr_T lnum; + + pos = curwin->w_cursor; +! lnum = tv_get_lnum(argvars); + if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) + { + curwin->w_cursor.lnum = lnum; +*************** +*** 2526,2532 **** + return; + } + +! startcol = (int)get_tv_number_chk(&argvars[0], NULL); + if (startcol <= 0) + return; + +--- 2526,2532 ---- + return; + } + +! startcol = (int)tv_get_number_chk(&argvars[0], NULL); + if (startcol <= 0) + return; + +*************** +*** 2573,2592 **** + char_u *typestr; + int error = FALSE; + +! message = get_tv_string_chk(&argvars[0]); + if (message == NULL) + error = TRUE; + if (argvars[1].v_type != VAR_UNKNOWN) + { +! buttons = get_tv_string_buf_chk(&argvars[1], buf); + if (buttons == NULL) + error = TRUE; + if (argvars[2].v_type != VAR_UNKNOWN) + { +! def = (int)get_tv_number_chk(&argvars[2], &error); + if (argvars[3].v_type != VAR_UNKNOWN) + { +! typestr = get_tv_string_buf_chk(&argvars[3], buf2); + if (typestr == NULL) + error = TRUE; + else +--- 2573,2592 ---- + char_u *typestr; + int error = FALSE; + +! message = tv_get_string_chk(&argvars[0]); + if (message == NULL) + error = TRUE; + if (argvars[1].v_type != VAR_UNKNOWN) + { +! buttons = tv_get_string_buf_chk(&argvars[1], buf); + if (buttons == NULL) + error = TRUE; + if (argvars[2].v_type != VAR_UNKNOWN) + { +! def = (int)tv_get_number_chk(&argvars[2], &error); + if (argvars[3].v_type != VAR_UNKNOWN) + { +! typestr = tv_get_string_buf_chk(&argvars[3], buf2); + if (typestr == NULL) + error = TRUE; + else +*************** +*** 2665,2675 **** + int error = FALSE; + + if (argvars[2].v_type != VAR_UNKNOWN) +! ic = (int)get_tv_number_chk(&argvars[2], &error); + + if (argvars[0].v_type == VAR_STRING) + { +! char_u *expr = get_tv_string_chk(&argvars[1]); + char_u *p = argvars[0].vval.v_string; + char_u *next; + +--- 2665,2675 ---- + int error = FALSE; + + if (argvars[2].v_type != VAR_UNKNOWN) +! ic = (int)tv_get_number_chk(&argvars[2], &error); + + if (argvars[0].v_type == VAR_STRING) + { +! char_u *expr = tv_get_string_chk(&argvars[1]); + char_u *p = argvars[0].vval.v_string; + char_u *next; + +*************** +*** 2713,2719 **** + { + if (argvars[3].v_type != VAR_UNKNOWN) + { +! idx = (long)get_tv_number_chk(&argvars[3], &error); + if (!error) + { + li = list_find(l, idx); +--- 2713,2719 ---- + { + if (argvars[3].v_type != VAR_UNKNOWN) + { +! idx = (long)tv_get_number_chk(&argvars[3], &error); + if (!error) + { + li = list_find(l, idx); +*************** +*** 2778,2787 **** + if (argvars[0].v_type != VAR_UNKNOWN + && argvars[1].v_type != VAR_UNKNOWN) + { +! num = (int)get_tv_number(&argvars[0]); +! dbpath = get_tv_string(&argvars[1]); + if (argvars[2].v_type != VAR_UNKNOWN) +! prepend = get_tv_string_buf(&argvars[2], buf); + } + + rettv->vval.v_number = cs_connection(num, dbpath, prepend); +--- 2778,2787 ---- + if (argvars[0].v_type != VAR_UNKNOWN + && argvars[1].v_type != VAR_UNKNOWN) + { +! num = (int)tv_get_number(&argvars[0]); +! dbpath = tv_get_string(&argvars[1]); + if (argvars[2].v_type != VAR_UNKNOWN) +! prepend = tv_get_string_buf(&argvars[2], buf); + } + + rettv->vval.v_number = cs_connection(num, dbpath, prepend); +*************** +*** 2828,2838 **** + } + else + { +! line = get_tv_lnum(argvars); +! col = (long)get_tv_number_chk(&argvars[1], NULL); + #ifdef FEAT_VIRTUALEDIT + if (argvars[2].v_type != VAR_UNKNOWN) +! coladd = (long)get_tv_number_chk(&argvars[2], NULL); + #endif + } + if (line < 0 || col < 0 +--- 2828,2838 ---- + } + else + { +! line = tv_get_lnum(argvars); +! col = (long)tv_get_number_chk(&argvars[1], NULL); + #ifdef FEAT_VIRTUALEDIT + if (argvars[2].v_type != VAR_UNKNOWN) +! coladd = (long)tv_get_number_chk(&argvars[2], NULL); + #endif + } + if (line < 0 || col < 0 +*************** +*** 2871,2877 **** + int pid; + + rettv->vval.v_number = FAIL; +! pid = (int)get_tv_number(&argvars[0]); + if (pid == 0) + EMSG(_(e_invarg)); + else +--- 2871,2877 ---- + int pid; + + rettv->vval.v_number = FAIL; +! pid = (int)tv_get_number(&argvars[0]); + if (pid == 0) + EMSG(_(e_invarg)); + else +*************** +*** 2898,2904 **** + int copyID; + + if (argvars[1].v_type != VAR_UNKNOWN) +! noref = (int)get_tv_number_chk(&argvars[1], NULL); + if (noref < 0 || noref > 1) + EMSG(_(e_invarg)); + else +--- 2898,2904 ---- + int copyID; + + if (argvars[1].v_type != VAR_UNKNOWN) +! noref = (int)tv_get_number_chk(&argvars[1], NULL); + if (noref < 0 || noref > 1) + EMSG(_(e_invarg)); + else +*************** +*** 2922,2928 **** + if (check_restricted() || check_secure()) + return; + +! name = get_tv_string(&argvars[0]); + if (name == NULL || *name == NUL) + { + EMSG(_(e_invarg)); +--- 2922,2928 ---- + if (check_restricted() || check_secure()) + return; + +! name = tv_get_string(&argvars[0]); + if (name == NULL || *name == NUL) + { + EMSG(_(e_invarg)); +*************** +*** 2930,2936 **** + } + + if (argvars[1].v_type != VAR_UNKNOWN) +! flags = get_tv_string_buf(&argvars[1], nbuf); + else + flags = (char_u *)""; + +--- 2930,2936 ---- + } + + if (argvars[1].v_type != VAR_UNKNOWN) +! flags = tv_get_string_buf(&argvars[1], nbuf); + else + flags = (char_u *)""; + +*************** +*** 2971,2979 **** + } + is_curbuf = buf == curbuf; + +! first = get_tv_lnum_buf(&argvars[1], buf); + if (argvars[2].v_type != VAR_UNKNOWN) +! last = get_tv_lnum_buf(&argvars[2], buf); + else + last = first; + +--- 2971,2979 ---- + } + is_curbuf = buf == curbuf; + +! first = tv_get_lnum_buf(&argvars[1], buf); + if (argvars[2].v_type != VAR_UNKNOWN) +! last = tv_get_lnum_buf(&argvars[2], buf); + else + last = first; + +*************** +*** 3048,3054 **** + f_diff_filler(typval_T *argvars UNUSED, typval_T *rettv UNUSED) + { + #ifdef FEAT_DIFF +! rettv->vval.v_number = diff_check_fill(curwin, get_tv_lnum(argvars)); + #endif + } + +--- 3048,3054 ---- + f_diff_filler(typval_T *argvars UNUSED, typval_T *rettv UNUSED) + { + #ifdef FEAT_DIFF +! rettv->vval.v_number = diff_check_fill(curwin, tv_get_lnum(argvars)); + #endif + } + +*************** +*** 3059,3065 **** + f_diff_hlID(typval_T *argvars UNUSED, typval_T *rettv UNUSED) + { + #ifdef FEAT_DIFF +! linenr_T lnum = get_tv_lnum(argvars); + static linenr_T prev_lnum = 0; + static varnumber_T changedtick = 0; + static int fnum = 0; +--- 3059,3065 ---- + f_diff_hlID(typval_T *argvars UNUSED, typval_T *rettv UNUSED) + { + #ifdef FEAT_DIFF +! linenr_T lnum = tv_get_lnum(argvars); + static linenr_T prev_lnum = 0; + static varnumber_T changedtick = 0; + static int fnum = 0; +*************** +*** 3100,3106 **** + + if (hlID == HLF_CHD || hlID == HLF_TXD) + { +! col = get_tv_number(&argvars[1]) - 1; /* ignore type error in {col} */ + if (col >= change_start && col <= change_end) + hlID = HLF_TXD; /* changed text */ + else +--- 3100,3106 ---- + + if (hlID == HLF_CHD || hlID == HLF_TXD) + { +! col = tv_get_number(&argvars[1]) - 1; /* ignore type error in {col} */ + if (col >= change_start && col <= change_end) + hlID = HLF_TXD; /* changed text */ + else +*************** +*** 3177,3184 **** + { + char_u buf[NUMBUFLEN]; + +! rettv->vval.v_string = vim_strsave_escaped(get_tv_string(&argvars[0]), +! get_tv_string_buf(&argvars[1], buf)); + rettv->v_type = VAR_STRING; + } + +--- 3177,3184 ---- + { + char_u buf[NUMBUFLEN]; + +! rettv->vval.v_string = vim_strsave_escaped(tv_get_string(&argvars[0]), +! tv_get_string_buf(&argvars[1], buf)); + rettv->v_type = VAR_STRING; + } + +*************** +*** 3190,3196 **** + { + char_u *s, *p; + +! s = get_tv_string_chk(&argvars[0]); + if (s != NULL) + s = skipwhite(s); + +--- 3190,3196 ---- + { + char_u *s, *p; + +! s = tv_get_string_chk(&argvars[0]); + if (s != NULL) + s = skipwhite(s); + +*************** +*** 3222,3228 **** + static void + f_executable(typval_T *argvars, typval_T *rettv) + { +! char_u *name = get_tv_string(&argvars[0]); + + /* Check in $PATH and also check directly if there is a directory name. */ + rettv->vval.v_number = mch_can_exe(name, NULL, TRUE) +--- 3222,3228 ---- + static void + f_executable(typval_T *argvars, typval_T *rettv) + { +! char_u *name = tv_get_string(&argvars[0]); + + /* Check in $PATH and also check directly if there is a directory name. */ + rettv->vval.v_number = mch_can_exe(name, NULL, TRUE) +*************** +*** 3270,3276 **** + + if (item == NULL) + return NULL; +! s = get_tv_string_buf_chk(&item->li_tv, buf); + *p = item->li_next; + return s == NULL ? NULL : vim_strsave(s); + } +--- 3270,3276 ---- + + if (item == NULL) + return NULL; +! s = tv_get_string_buf_chk(&item->li_tv, buf); + *p = item->li_next; + return s == NULL ? NULL : vim_strsave(s); + } +*************** +*** 3305,3311 **** + } + else + { +! cmd = get_tv_string_chk(&argvars[0]); + if (cmd == NULL) + return; + } +--- 3305,3311 ---- + } + else + { +! cmd = tv_get_string_chk(&argvars[0]); + if (cmd == NULL) + return; + } +*************** +*** 3313,3319 **** + if (argvars[1].v_type != VAR_UNKNOWN) + { + char_u buf[NUMBUFLEN]; +! char_u *s = get_tv_string_buf_chk(&argvars[1], buf); + + if (s == NULL) + return; +--- 3313,3319 ---- + if (argvars[1].v_type != VAR_UNKNOWN) + { + char_u buf[NUMBUFLEN]; +! char_u *s = tv_get_string_buf_chk(&argvars[1], buf); + + if (s == NULL) + return; +*************** +*** 3388,3394 **** + { + char_u *p = NULL; + +! (void)mch_can_exe(get_tv_string(&argvars[0]), &p, TRUE); + rettv->v_type = VAR_STRING; + rettv->vval.v_string = p; + } +--- 3388,3394 ---- + { + char_u *p = NULL; + +! (void)mch_can_exe(tv_get_string(&argvars[0]), &p, TRUE); + rettv->v_type = VAR_STRING; + rettv->vval.v_string = p; + } +*************** +*** 3402,3408 **** + char_u *p; + int n = FALSE; + +! p = get_tv_string(&argvars[0]); + if (*p == '$') /* environment variable */ + { + /* first try "normal" environment variables (fast) */ +--- 3402,3408 ---- + char_u *p; + int n = FALSE; + +! p = tv_get_string(&argvars[0]); + if (*p == '$') /* environment variable */ + { + /* first try "normal" environment variables (fast) */ +*************** +*** 3480,3492 **** + rettv->v_type = VAR_STRING; + if (argvars[1].v_type != VAR_UNKNOWN + && argvars[2].v_type != VAR_UNKNOWN +! && get_tv_number_chk(&argvars[2], &error) + && !error) + { + rettv_list_set(rettv, NULL); + } + +! s = get_tv_string(&argvars[0]); + if (*s == '%' || *s == '#' || *s == '<') + { + ++emsg_off; +--- 3480,3492 ---- + rettv->v_type = VAR_STRING; + if (argvars[1].v_type != VAR_UNKNOWN + && argvars[2].v_type != VAR_UNKNOWN +! && tv_get_number_chk(&argvars[2], &error) + && !error) + { + rettv_list_set(rettv, NULL); + } + +! s = tv_get_string(&argvars[0]); + if (*s == '%' || *s == '#' || *s == '<') + { + ++emsg_off; +*************** +*** 3507,3513 **** + /* When the optional second argument is non-zero, don't remove matches + * for 'wildignore' and don't put matches for 'suffixes' at the end. */ + if (argvars[1].v_type != VAR_UNKNOWN +! && get_tv_number_chk(&argvars[1], &error)) + options |= WILD_KEEP_ALL; + if (!error) + { +--- 3507,3513 ---- + /* When the optional second argument is non-zero, don't remove matches + * for 'wildignore' and don't put matches for 'suffixes' at the end. */ + if (argvars[1].v_type != VAR_UNKNOWN +! && tv_get_number_chk(&argvars[1], &error)) + options |= WILD_KEEP_ALL; + if (!error) + { +*************** +*** 3556,3562 **** + { + if (argvars[2].v_type != VAR_UNKNOWN) + { +! before = (long)get_tv_number_chk(&argvars[2], &error); + if (error) + return; /* type error; errmsg already given */ + +--- 3556,3562 ---- + { + if (argvars[2].v_type != VAR_UNKNOWN) + { +! before = (long)tv_get_number_chk(&argvars[2], &error); + if (error) + return; /* type error; errmsg already given */ + +*************** +*** 3595,3601 **** + { + static char *(av[]) = {"keep", "force", "error"}; + +! action = get_tv_string_chk(&argvars[2]); + if (action == NULL) + return; /* type error; errmsg already given */ + for (i = 0; i < 3; ++i) +--- 3595,3601 ---- + { + static char *(av[]) = {"keep", "force", "error"}; + +! action = tv_get_string_chk(&argvars[2]); + if (action == NULL) + return; /* type error; errmsg already given */ + for (i = 0; i < 3; ++i) +*************** +*** 3640,3650 **** + if (check_secure()) + return; + +! keys = get_tv_string(&argvars[0]); + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! flags = get_tv_string_buf(&argvars[1], nbuf); + for ( ; *flags != NUL; ++flags) + { + switch (*flags) +--- 3640,3650 ---- + if (check_secure()) + return; + +! keys = tv_get_string(&argvars[0]); + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! flags = tv_get_string_buf(&argvars[1], nbuf); + for ( ; *flags != NUL; ++flags) + { + switch (*flags) +*************** +*** 3707,3713 **** + #ifndef O_NONBLOCK + # define O_NONBLOCK 0 + #endif +! p = get_tv_string(&argvars[0]); + if (*p && !mch_isdir(p) && (fd = mch_open((char *)p, + O_RDONLY | O_NONBLOCK, 0)) >= 0) + { +--- 3707,3713 ---- + #ifndef O_NONBLOCK + # define O_NONBLOCK 0 + #endif +! p = tv_get_string(&argvars[0]); + if (*p && !mch_isdir(p) && (fd = mch_open((char *)p, + O_RDONLY | O_NONBLOCK, 0)) >= 0) + { +*************** +*** 3727,3733 **** + static void + f_filewritable(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = filewritable(get_tv_string(&argvars[0])); + } + + static void +--- 3727,3733 ---- + static void + f_filewritable(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = filewritable(tv_get_string(&argvars[0])); + } + + static void +*************** +*** 3751,3761 **** + rettv->v_type = VAR_STRING; + + #ifdef FEAT_SEARCHPATH +! fname = get_tv_string(&argvars[0]); + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! p = get_tv_string_buf_chk(&argvars[1], pathbuf); + if (p == NULL) + error = TRUE; + else +--- 3751,3761 ---- + rettv->v_type = VAR_STRING; + + #ifdef FEAT_SEARCHPATH +! fname = tv_get_string(&argvars[0]); + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! p = tv_get_string_buf_chk(&argvars[1], pathbuf); + if (p == NULL) + error = TRUE; + else +*************** +*** 3764,3770 **** + path = p; + + if (argvars[2].v_type != VAR_UNKNOWN) +! count = (int)get_tv_number_chk(&argvars[2], &error); + } + } + +--- 3764,3770 ---- + path = p; + + if (argvars[2].v_type != VAR_UNKNOWN) +! count = (int)tv_get_number_chk(&argvars[2], &error); + } + } + +*************** +*** 3883,3889 **** + f_fnameescape(typval_T *argvars, typval_T *rettv) + { + rettv->vval.v_string = vim_strsave_fnameescape( +! get_tv_string(&argvars[0]), FALSE); + rettv->v_type = VAR_STRING; + } + +--- 3883,3889 ---- + f_fnameescape(typval_T *argvars, typval_T *rettv) + { + rettv->vval.v_string = vim_strsave_fnameescape( +! tv_get_string(&argvars[0]), FALSE); + rettv->v_type = VAR_STRING; + } + +*************** +*** 3900,3907 **** + char_u *fbuf = NULL; + char_u buf[NUMBUFLEN]; + +! fname = get_tv_string_chk(&argvars[0]); +! mods = get_tv_string_buf_chk(&argvars[1], buf); + if (fname == NULL || mods == NULL) + fname = NULL; + else +--- 3900,3907 ---- + char_u *fbuf = NULL; + char_u buf[NUMBUFLEN]; + +! fname = tv_get_string_chk(&argvars[0]); +! mods = tv_get_string_buf_chk(&argvars[1], buf); + if (fname == NULL || mods == NULL) + fname = NULL; + else +*************** +*** 3931,3937 **** + linenr_T lnum; + linenr_T first, last; + +! lnum = get_tv_lnum(argvars); + if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) + { + if (hasFoldingWin(curwin, lnum, &first, &last, FALSE, NULL)) +--- 3931,3937 ---- + linenr_T lnum; + linenr_T first, last; + +! lnum = tv_get_lnum(argvars); + if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) + { + if (hasFoldingWin(curwin, lnum, &first, &last, FALSE, NULL)) +*************** +*** 3974,3980 **** + #ifdef FEAT_FOLDING + linenr_T lnum; + +! lnum = get_tv_lnum(argvars); + if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) + rettv->vval.v_number = foldLevel(lnum); + #endif +--- 3974,3980 ---- + #ifdef FEAT_FOLDING + linenr_T lnum; + +! lnum = tv_get_lnum(argvars); + if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) + rettv->vval.v_number = foldLevel(lnum); + #endif +*************** +*** 4067,4073 **** + return; /* reject recursive use */ + entered = TRUE; + +! lnum = get_tv_lnum(argvars); + /* treat illegal types and illegal string values for {lnum} the same */ + if (lnum < 0) + lnum = 0; +--- 4067,4073 ---- + return; /* reject recursive use */ + entered = TRUE; + +! lnum = tv_get_lnum(argvars); + /* treat illegal types and illegal string values for {lnum} the same */ + if (lnum < 0) + lnum = 0; +*************** +*** 4125,4131 **** + else + { + /* function('MyFunc', [arg], dict) */ +! s = get_tv_string(&argvars[0]); + use_string = TRUE; + } + +--- 4125,4131 ---- + else + { + /* function('MyFunc', [arg], dict) */ +! s = tv_get_string(&argvars[0]); + use_string = TRUE; + } + +*************** +*** 4140,4146 **** + + if (s == NULL || *s == NUL || (use_string && VIM_ISDIGIT(*s)) + || (is_funcref && trans_name == NULL)) +! EMSG2(_(e_invarg2), use_string ? get_tv_string(&argvars[0]) : s); + /* Don't check an autoload name for existence here. */ + else if (trans_name != NULL && (is_funcref + ? find_func(trans_name) == NULL +--- 4140,4146 ---- + + if (s == NULL || *s == NUL || (use_string && VIM_ISDIGIT(*s)) + || (is_funcref && trans_name == NULL)) +! EMSG2(_(e_invarg2), use_string ? tv_get_string(&argvars[0]) : s); + /* Don't check an autoload name for existence here. */ + else if (trans_name != NULL && (is_funcref + ? find_func(trans_name) == NULL +*************** +*** 4327,4333 **** + * using Lists and Dicts internally. E.g.: ":echo [garbagecollect()]". */ + want_garbage_collect = TRUE; + +! if (argvars[0].v_type != VAR_UNKNOWN && get_tv_number(&argvars[0]) == 1) + garbage_collect_at_exit = TRUE; + } + +--- 4327,4333 ---- + * using Lists and Dicts internally. E.g.: ":echo [garbagecollect()]". */ + want_garbage_collect = TRUE; + +! if (argvars[0].v_type != VAR_UNKNOWN && tv_get_number(&argvars[0]) == 1) + garbage_collect_at_exit = TRUE; + } + +*************** +*** 4349,4355 **** + { + int error = FALSE; + +! li = list_find(l, (long)get_tv_number_chk(&argvars[1], &error)); + if (!error && li != NULL) + tv = &li->li_tv; + } +--- 4349,4355 ---- + { + int error = FALSE; + +! li = list_find(l, (long)tv_get_number_chk(&argvars[1], &error)); + if (!error && li != NULL) + tv = &li->li_tv; + } +*************** +*** 4358,4364 **** + { + if ((d = argvars[0].vval.v_dict) != NULL) + { +! di = dict_find(d, get_tv_string(&argvars[1]), -1); + if (di != NULL) + tv = &di->di_tv; + } +--- 4358,4364 ---- + { + if ((d = argvars[0].vval.v_dict) != NULL) + { +! di = dict_find(d, tv_get_string(&argvars[1]), -1); + if (di != NULL) + tv = &di->di_tv; + } +*************** +*** 4379,4385 **** + + if (pt != NULL) + { +! char_u *what = get_tv_string(&argvars[1]); + char_u *n; + + if (STRCMP(what, "func") == 0 || STRCMP(what, "name") == 0) +--- 4379,4385 ---- + + if (pt != NULL) + { +! char_u *what = tv_get_string(&argvars[1]); + char_u *n; + + if (STRCMP(what, "func") == 0 || STRCMP(what, "name") == 0) +*************** +*** 4527,4548 **** + filtered = TRUE; + + di = dict_find(sel_d, (char_u *)"buflisted", -1); +! if (di != NULL && get_tv_number(&di->di_tv)) + sel_buflisted = TRUE; + + di = dict_find(sel_d, (char_u *)"bufloaded", -1); +! if (di != NULL && get_tv_number(&di->di_tv)) + sel_bufloaded = TRUE; + + di = dict_find(sel_d, (char_u *)"bufmodified", -1); +! if (di != NULL && get_tv_number(&di->di_tv)) + sel_bufmodified = TRUE; + } + } + else if (argvars[0].v_type != VAR_UNKNOWN) + { + /* Information about one buffer. Argument specifies the buffer */ +! (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */ + ++emsg_off; + argbuf = get_buf_tv(&argvars[0], FALSE); + --emsg_off; +--- 4527,4548 ---- + filtered = TRUE; + + di = dict_find(sel_d, (char_u *)"buflisted", -1); +! if (di != NULL && tv_get_number(&di->di_tv)) + sel_buflisted = TRUE; + + di = dict_find(sel_d, (char_u *)"bufloaded", -1); +! if (di != NULL && tv_get_number(&di->di_tv)) + sel_bufloaded = TRUE; + + di = dict_find(sel_d, (char_u *)"bufmodified", -1); +! if (di != NULL && tv_get_number(&di->di_tv)) + sel_bufmodified = TRUE; + } + } + else if (argvars[0].v_type != VAR_UNKNOWN) + { + /* Information about one buffer. Argument specifies the buffer */ +! (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */ + ++emsg_off; + argbuf = get_buf_tv(&argvars[0], FALSE); + --emsg_off; +*************** +*** 4626,4641 **** + linenr_T end; + buf_T *buf; + +! (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */ + ++emsg_off; + buf = get_buf_tv(&argvars[0], FALSE); + --emsg_off; + +! lnum = get_tv_lnum_buf(&argvars[1], buf); + if (argvars[2].v_type == VAR_UNKNOWN) + end = lnum; + else +! end = get_tv_lnum_buf(&argvars[2], buf); + + get_buffer_lines(buf, lnum, end, TRUE, rettv); + } +--- 4626,4641 ---- + linenr_T end; + buf_T *buf; + +! (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */ + ++emsg_off; + buf = get_buf_tv(&argvars[0], FALSE); + --emsg_off; + +! lnum = tv_get_lnum_buf(&argvars[1], buf); + if (argvars[2].v_type == VAR_UNKNOWN) + end = lnum; + else +! end = tv_get_lnum_buf(&argvars[2], buf); + + get_buffer_lines(buf, lnum, end, TRUE, rettv); + } +*************** +*** 4652,4659 **** + dictitem_T *v; + int done = FALSE; + +! (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */ +! varname = get_tv_string_chk(&argvars[1]); + ++emsg_off; + buf = get_buf_tv(&argvars[0], FALSE); + +--- 4652,4659 ---- + dictitem_T *v; + int done = FALSE; + +! (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */ +! varname = tv_get_string_chk(&argvars[1]); + ++emsg_off; + buf = get_buf_tv(&argvars[0], FALSE); + +*************** +*** 4724,4730 **** + return; + + #ifdef FEAT_JUMPLIST +! (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */ + ++emsg_off; + buf = get_buf_tv(&argvars[0], FALSE); + --emsg_off; +--- 4724,4730 ---- + return; + + #ifdef FEAT_JUMPLIST +! (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */ + ++emsg_off; + buf = get_buf_tv(&argvars[0], FALSE); + --emsg_off; +*************** +*** 4788,4794 **** + if (argvars[0].v_type == VAR_UNKNOWN) + /* getchar(): blocking wait. */ + n = plain_vgetc(); +! else if (get_tv_number_chk(&argvars[0], &error) == 1) + /* getchar(1): only check if char avail */ + n = vpeekc_any(); + else if (error || vpeekc_any() == NUL) +--- 4788,4794 ---- + if (argvars[0].v_type == VAR_UNKNOWN) + /* getchar(): blocking wait. */ + n = plain_vgetc(); +! else if (tv_get_number_chk(&argvars[0], &error) == 1) + /* getchar(1): only check if char avail */ + n = vpeekc_any(); + else if (error || vpeekc_any() == NUL) +*************** +*** 4960,4966 **** + | WILD_NO_BEEP; + + if (argvars[2].v_type != VAR_UNKNOWN) +! filtered = get_tv_number_chk(&argvars[2], NULL); + + if (p_wic) + options |= WILD_ICASE; +--- 4960,4966 ---- + | WILD_NO_BEEP; + + if (argvars[2].v_type != VAR_UNKNOWN) +! filtered = tv_get_number_chk(&argvars[2], NULL); + + if (p_wic) + options |= WILD_ICASE; +*************** +*** 4970,4978 **** + options |= WILD_KEEP_ALL; + + ExpandInit(&xpc); +! xpc.xp_pattern = get_tv_string(&argvars[0]); + xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern); +! xpc.xp_context = cmdcomplete_str_to_type(get_tv_string(&argvars[1])); + if (xpc.xp_context == EXPAND_NOTHING) + { + if (argvars[1].v_type == VAR_STRING) +--- 4970,4978 ---- + options |= WILD_KEEP_ALL; + + ExpandInit(&xpc); +! xpc.xp_pattern = tv_get_string(&argvars[0]); + xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern); +! xpc.xp_context = cmdcomplete_str_to_type(tv_get_string(&argvars[1])); + if (xpc.xp_context == EXPAND_NOTHING) + { + if (argvars[1].v_type == VAR_STRING) +*************** +*** 5083,5089 **** + } + else + { +! name = get_tv_string(&argvars[0]); + if (STRCMP(name, "*") == 0) /* don't use font dialog */ + return; + font = gui_mch_get_font(name, FALSE); +--- 5083,5089 ---- + } + else + { +! name = tv_get_string(&argvars[0]); + if (STRCMP(name, "*") == 0) /* don't use font dialog */ + return; + font = gui_mch_get_font(name, FALSE); +*************** +*** 5109,5115 **** + char_u flags[] = "rwx"; + int i; + +! fname = get_tv_string(&argvars[0]); + + rettv->v_type = VAR_STRING; + if (mch_stat((char *)fname, &st) >= 0) +--- 5109,5115 ---- + char_u flags[] = "rwx"; + int i; + +! fname = tv_get_string(&argvars[0]); + + rettv->v_type = VAR_STRING; + if (mch_stat((char *)fname, &st) >= 0) +*************** +*** 5136,5142 **** + char_u *fname; + stat_T st; + +! fname = get_tv_string(&argvars[0]); + + rettv->v_type = VAR_NUMBER; + +--- 5136,5142 ---- + char_u *fname; + stat_T st; + +! fname = tv_get_string(&argvars[0]); + + rettv->v_type = VAR_NUMBER; + +*************** +*** 5166,5172 **** + char_u *fname; + stat_T st; + +! fname = get_tv_string(&argvars[0]); + + if (mch_stat((char *)fname, &st) >= 0) + rettv->vval.v_number = (varnumber_T)st.st_mtime; +--- 5166,5172 ---- + char_u *fname; + stat_T st; + +! fname = tv_get_string(&argvars[0]); + + if (mch_stat((char *)fname, &st) >= 0) + rettv->vval.v_number = (varnumber_T)st.st_mtime; +*************** +*** 5185,5191 **** + char_u *type = NULL; + char *t; + +! fname = get_tv_string(&argvars[0]); + + rettv->v_type = VAR_STRING; + if (mch_lstat((char *)fname, &st) >= 0) +--- 5185,5191 ---- + char_u *type = NULL; + char *t; + +! fname = tv_get_string(&argvars[0]); + + rettv->v_type = VAR_STRING; + if (mch_lstat((char *)fname, &st) >= 0) +*************** +*** 5272,5278 **** + linenr_T end; + int retlist; + +! lnum = get_tv_lnum(argvars); + if (argvars[1].v_type == VAR_UNKNOWN) + { + end = 0; +--- 5272,5278 ---- + linenr_T end; + int retlist; + +! lnum = tv_get_lnum(argvars); + if (argvars[1].v_type == VAR_UNKNOWN) + { + end = 0; +*************** +*** 5280,5286 **** + } + else + { +! end = get_tv_lnum(&argvars[1]); + retlist = TRUE; + } + +--- 5280,5286 ---- + } + else + { +! end = tv_get_lnum(&argvars[1]); + retlist = TRUE; + } + +*************** +*** 5490,5502 **** + + if (argvars[0].v_type != VAR_UNKNOWN) + { +! strregname = get_tv_string_chk(&argvars[0]); + error = strregname == NULL; + if (argvars[1].v_type != VAR_UNKNOWN) + { +! arg2 = (int)get_tv_number_chk(&argvars[1], &error); + if (!error && argvars[2].v_type != VAR_UNKNOWN) +! return_list = (int)get_tv_number_chk(&argvars[2], &error); + } + } + else +--- 5490,5502 ---- + + if (argvars[0].v_type != VAR_UNKNOWN) + { +! strregname = tv_get_string_chk(&argvars[0]); + error = strregname == NULL; + if (argvars[1].v_type != VAR_UNKNOWN) + { +! arg2 = (int)tv_get_number_chk(&argvars[1], &error); + if (!error && argvars[2].v_type != VAR_UNKNOWN) +! return_list = (int)tv_get_number_chk(&argvars[2], &error); + } + } + else +*************** +*** 5540,5546 **** + + if (argvars[0].v_type != VAR_UNKNOWN) + { +! strregname = get_tv_string_chk(&argvars[0]); + if (strregname == NULL) /* type error; errmsg already given */ + { + rettv->v_type = VAR_STRING; +--- 5540,5546 ---- + + if (argvars[0].v_type != VAR_UNKNOWN) + { +! strregname = tv_get_string_chk(&argvars[0]); + if (strregname == NULL) /* type error; errmsg already given */ + { + rettv->v_type = VAR_STRING; +*************** +*** 5619,5625 **** + if (argvars[0].v_type != VAR_UNKNOWN) + { + /* Information about one tab page */ +! tparg = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL)); + if (tparg == NULL) + return; + } +--- 5619,5625 ---- + if (argvars[0].v_type != VAR_UNKNOWN) + { + /* Information about one tab page */ +! tparg = find_tabpage((int)tv_get_number_chk(&argvars[0], NULL)); + if (tparg == NULL) + return; + } +*************** +*** 5653,5660 **** + rettv->v_type = VAR_STRING; + rettv->vval.v_string = NULL; + +! varname = get_tv_string_chk(&argvars[1]); +! tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL)); + if (tp != NULL && varname != NULL) + { + /* Set tp to be our tabpage, temporarily. Also set the window to the +--- 5653,5660 ---- + rettv->v_type = VAR_STRING; + rettv->vval.v_string = NULL; + +! varname = tv_get_string_chk(&argvars[1]); +! tp = find_tabpage((int)tv_get_number_chk(&argvars[0], NULL)); + if (tp != NULL && varname != NULL) + { + /* Set tp to be our tabpage, temporarily. Also set the window to the +*************** +*** 5879,5885 **** + varnumber_T timeout = 100; + + if (argvars[0].v_type != VAR_UNKNOWN) +! timeout = get_tv_number(&argvars[0]); + term_get_winpos(&x, &y, timeout); + } + #endif +--- 5879,5885 ---- + varnumber_T timeout = 100; + + if (argvars[0].v_type != VAR_UNKNOWN) +! timeout = tv_get_number(&argvars[0]); + term_get_winpos(&x, &y, timeout); + } + #endif +*************** +*** 5966,5981 **** + rettv->v_type = VAR_STRING; + if (argvars[1].v_type != VAR_UNKNOWN) + { +! if (get_tv_number_chk(&argvars[1], &error)) + options |= WILD_KEEP_ALL; + if (argvars[2].v_type != VAR_UNKNOWN) + { +! if (get_tv_number_chk(&argvars[2], &error)) + { + rettv_list_set(rettv, NULL); + } + if (argvars[3].v_type != VAR_UNKNOWN +! && get_tv_number_chk(&argvars[3], &error)) + options |= WILD_ALLLINKS; + } + } +--- 5966,5981 ---- + rettv->v_type = VAR_STRING; + if (argvars[1].v_type != VAR_UNKNOWN) + { +! if (tv_get_number_chk(&argvars[1], &error)) + options |= WILD_KEEP_ALL; + if (argvars[2].v_type != VAR_UNKNOWN) + { +! if (tv_get_number_chk(&argvars[2], &error)) + { + rettv_list_set(rettv, NULL); + } + if (argvars[3].v_type != VAR_UNKNOWN +! && tv_get_number_chk(&argvars[3], &error)) + options |= WILD_ALLLINKS; + } + } +*************** +*** 5986,5998 **** + if (p_wic) + options += WILD_ICASE; + if (rettv->v_type == VAR_STRING) +! rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]), + NULL, options, WILD_ALL); + else if (rettv_list_alloc(rettv) != FAIL) + { + int i; + +! ExpandOne(&xpc, get_tv_string(&argvars[0]), + NULL, options, WILD_ALL_KEEP); + for (i = 0; i < xpc.xp_numfiles; i++) + list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1); +--- 5986,5998 ---- + if (p_wic) + options += WILD_ICASE; + if (rettv->v_type == VAR_STRING) +! rettv->vval.v_string = ExpandOne(&xpc, tv_get_string(&argvars[0]), + NULL, options, WILD_ALL); + else if (rettv_list_alloc(rettv) != FAIL) + { + int i; + +! ExpandOne(&xpc, tv_get_string(&argvars[0]), + NULL, options, WILD_ALL_KEEP); + for (i = 0; i < xpc.xp_numfiles; i++) + list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1); +*************** +*** 6012,6018 **** + { + int flags = 0; + char_u buf1[NUMBUFLEN]; +! char_u *file = get_tv_string_buf_chk(&argvars[1], buf1); + int error = FALSE; + garray_T ga; + int i; +--- 6012,6018 ---- + { + int flags = 0; + char_u buf1[NUMBUFLEN]; +! char_u *file = tv_get_string_buf_chk(&argvars[1], buf1); + int error = FALSE; + garray_T ga; + int i; +*************** +*** 6022,6044 **** + rettv->v_type = VAR_STRING; + if (argvars[2].v_type != VAR_UNKNOWN) + { +! if (get_tv_number_chk(&argvars[2], &error)) + flags |= WILD_KEEP_ALL; + if (argvars[3].v_type != VAR_UNKNOWN) + { +! if (get_tv_number_chk(&argvars[3], &error)) + { + rettv_list_set(rettv, NULL); + } + if (argvars[4].v_type != VAR_UNKNOWN +! && get_tv_number_chk(&argvars[4], &error)) + flags |= WILD_ALLLINKS; + } + } + if (file != NULL && !error) + { + ga_init2(&ga, (int)sizeof(char_u *), 10); +! globpath(get_tv_string(&argvars[0]), file, &ga, flags); + if (rettv->v_type == VAR_STRING) + rettv->vval.v_string = ga_concat_strings(&ga, "\n"); + else if (rettv_list_alloc(rettv) != FAIL) +--- 6022,6044 ---- + rettv->v_type = VAR_STRING; + if (argvars[2].v_type != VAR_UNKNOWN) + { +! if (tv_get_number_chk(&argvars[2], &error)) + flags |= WILD_KEEP_ALL; + if (argvars[3].v_type != VAR_UNKNOWN) + { +! if (tv_get_number_chk(&argvars[3], &error)) + { + rettv_list_set(rettv, NULL); + } + if (argvars[4].v_type != VAR_UNKNOWN +! && tv_get_number_chk(&argvars[4], &error)) + flags |= WILD_ALLLINKS; + } + } + if (file != NULL && !error) + { + ga_init2(&ga, (int)sizeof(char_u *), 10); +! globpath(tv_get_string(&argvars[0]), file, &ga, flags); + if (rettv->v_type == VAR_STRING) + rettv->vval.v_string = ga_concat_strings(&ga, "\n"); + else if (rettv_list_alloc(rettv) != FAIL) +*************** +*** 6057,6063 **** + static void + f_glob2regpat(typval_T *argvars, typval_T *rettv) + { +! char_u *pat = get_tv_string_chk(&argvars[0]); + + rettv->v_type = VAR_STRING; + rettv->vval.v_string = (pat == NULL) +--- 6057,6063 ---- + static void + f_glob2regpat(typval_T *argvars, typval_T *rettv) + { +! char_u *pat = tv_get_string_chk(&argvars[0]); + + rettv->v_type = VAR_STRING; + rettv->vval.v_string = (pat == NULL) +*************** +*** 6583,6589 **** + NULL + }; + +! name = get_tv_string(&argvars[0]); + for (i = 0; has_list[i] != NULL; ++i) + if (STRICMP(name, has_list[i]) == 0) + { +--- 6583,6589 ---- + NULL + }; + +! name = tv_get_string(&argvars[0]); + for (i = 0; has_list[i] != NULL; ++i) + if (STRICMP(name, has_list[i]) == 0) + { +*************** +*** 6721,6727 **** + return; + + rettv->vval.v_number = dict_find(argvars[0].vval.v_dict, +! get_tv_string(&argvars[1]), -1) != NULL; + } + + /* +--- 6721,6727 ---- + return; + + rettv->vval.v_number = dict_find(argvars[0].vval.v_dict, +! tv_get_string(&argvars[1]), -1) != NULL; + } + + /* +*************** +*** 6747,6760 **** + char_u buf[NUMBUFLEN]; + int abbr = FALSE; + +! name = get_tv_string(&argvars[0]); + if (argvars[1].v_type == VAR_UNKNOWN) + mode = (char_u *)"nvo"; + else + { +! mode = get_tv_string_buf(&argvars[1], buf); + if (argvars[2].v_type != VAR_UNKNOWN) +! abbr = (int)get_tv_number(&argvars[2]); + } + + if (map_to_exists(name, mode, abbr)) +--- 6747,6760 ---- + char_u buf[NUMBUFLEN]; + int abbr = FALSE; + +! name = tv_get_string(&argvars[0]); + if (argvars[1].v_type == VAR_UNKNOWN) + mode = (char_u *)"nvo"; + else + { +! mode = tv_get_string_buf(&argvars[1], buf); + if (argvars[2].v_type != VAR_UNKNOWN) +! abbr = (int)tv_get_number(&argvars[2]); + } + + if (map_to_exists(name, mode, abbr)) +*************** +*** 6779,6789 **** + if (check_restricted() || check_secure()) + return; + #ifdef FEAT_CMDHIST +! str = get_tv_string_chk(&argvars[0]); /* NULL on type error */ + histype = str != NULL ? get_histtype(str) : -1; + if (histype >= 0) + { +! str = get_tv_string_buf(&argvars[1], buf); + if (*str != NUL) + { + init_history(); +--- 6779,6789 ---- + if (check_restricted() || check_secure()) + return; + #ifdef FEAT_CMDHIST +! str = tv_get_string_chk(&argvars[0]); /* NULL on type error */ + histype = str != NULL ? get_histtype(str) : -1; + if (histype >= 0) + { +! str = tv_get_string_buf(&argvars[1], buf); + if (*str != NUL) + { + init_history(); +*************** +*** 6806,6812 **** + char_u buf[NUMBUFLEN]; + char_u *str; + +! str = get_tv_string_chk(&argvars[0]); /* NULL on type error */ + if (str == NULL) + n = 0; + else if (argvars[1].v_type == VAR_UNKNOWN) +--- 6806,6812 ---- + char_u buf[NUMBUFLEN]; + char_u *str; + +! str = tv_get_string_chk(&argvars[0]); /* NULL on type error */ + if (str == NULL) + n = 0; + else if (argvars[1].v_type == VAR_UNKNOWN) +*************** +*** 6815,6825 **** + else if (argvars[1].v_type == VAR_NUMBER) + /* index given: remove that entry */ + n = del_history_idx(get_histtype(str), +! (int)get_tv_number(&argvars[1])); + else + /* string given: remove all matching entries */ + n = del_history_entry(get_histtype(str), +! get_tv_string_buf(&argvars[1], buf)); + rettv->vval.v_number = n; + #endif + } +--- 6815,6825 ---- + else if (argvars[1].v_type == VAR_NUMBER) + /* index given: remove that entry */ + n = del_history_idx(get_histtype(str), +! (int)tv_get_number(&argvars[1])); + else + /* string given: remove all matching entries */ + n = del_history_entry(get_histtype(str), +! tv_get_string_buf(&argvars[1], buf)); + rettv->vval.v_number = n; + #endif + } +*************** +*** 6835,6841 **** + int idx; + char_u *str; + +! str = get_tv_string_chk(&argvars[0]); /* NULL on type error */ + if (str == NULL) + rettv->vval.v_string = NULL; + else +--- 6835,6841 ---- + int idx; + char_u *str; + +! str = tv_get_string_chk(&argvars[0]); /* NULL on type error */ + if (str == NULL) + rettv->vval.v_string = NULL; + else +*************** +*** 6844,6850 **** + if (argvars[1].v_type == VAR_UNKNOWN) + idx = get_history_idx(type); + else +! idx = (int)get_tv_number_chk(&argvars[1], NULL); + /* -1 on type error */ + rettv->vval.v_string = vim_strsave(get_history_entry(type, idx)); + } +--- 6844,6850 ---- + if (argvars[1].v_type == VAR_UNKNOWN) + idx = get_history_idx(type); + else +! idx = (int)tv_get_number_chk(&argvars[1], NULL); + /* -1 on type error */ + rettv->vval.v_string = vim_strsave(get_history_entry(type, idx)); + } +*************** +*** 6863,6869 **** + int i; + + #ifdef FEAT_CMDHIST +! char_u *history = get_tv_string_chk(&argvars[0]); + + i = history == NULL ? HIST_CMD - 1 : get_histtype(history); + if (i >= HIST_CMD && i < HIST_COUNT) +--- 6863,6869 ---- + int i; + + #ifdef FEAT_CMDHIST +! char_u *history = tv_get_string_chk(&argvars[0]); + + i = history == NULL ? HIST_CMD - 1 : get_histtype(history); + if (i >= HIST_CMD && i < HIST_COUNT) +*************** +*** 6880,6886 **** + static void + f_hlID(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = syn_name2id(get_tv_string(&argvars[0])); + } + + /* +--- 6880,6886 ---- + static void + f_hlID(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = syn_name2id(tv_get_string(&argvars[0])); + } + + /* +*************** +*** 6889,6895 **** + static void + f_hlexists(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = highlight_exists(get_tv_string(&argvars[0])); + } + + /* +--- 6889,6895 ---- + static void + f_hlexists(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = highlight_exists(tv_get_string(&argvars[0])); + } + + /* +*************** +*** 6922,6930 **** + rettv->vval.v_string = NULL; + + #ifdef FEAT_MBYTE +! str = get_tv_string(&argvars[0]); +! from = enc_canonize(enc_skip(get_tv_string_buf(&argvars[1], buf1))); +! to = enc_canonize(enc_skip(get_tv_string_buf(&argvars[2], buf2))); + vimconv.vc_type = CONV_NONE; + convert_setup(&vimconv, from, to); + +--- 6922,6930 ---- + rettv->vval.v_string = NULL; + + #ifdef FEAT_MBYTE +! str = tv_get_string(&argvars[0]); +! from = enc_canonize(enc_skip(tv_get_string_buf(&argvars[1], buf1))); +! to = enc_canonize(enc_skip(tv_get_string_buf(&argvars[2], buf2))); + vimconv.vc_type = CONV_NONE; + convert_setup(&vimconv, from, to); + +*************** +*** 6948,6954 **** + { + linenr_T lnum; + +! lnum = get_tv_lnum(argvars); + if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) + rettv->vval.v_number = get_indent_lnum(lnum); + else +--- 6948,6954 ---- + { + linenr_T lnum; + +! lnum = tv_get_lnum(argvars); + if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) + rettv->vval.v_number = get_indent_lnum(lnum); + else +*************** +*** 6982,6991 **** + + /* Start at specified item. Use the cached index that list_find() + * sets, so that a negative number also works. */ +! item = list_find(l, (long)get_tv_number_chk(&argvars[2], &error)); + idx = l->lv_idx; + if (argvars[3].v_type != VAR_UNKNOWN) +! ic = (int)get_tv_number_chk(&argvars[3], &error); + if (error) + item = NULL; + } +--- 6982,6991 ---- + + /* Start at specified item. Use the cached index that list_find() + * sets, so that a negative number also works. */ +! item = list_find(l, (long)tv_get_number_chk(&argvars[2], &error)); + idx = l->lv_idx; + if (argvars[3].v_type != VAR_UNKNOWN) +! ic = (int)tv_get_number_chk(&argvars[3], &error); + if (error) + item = NULL; + } +*************** +*** 7025,7033 **** + char_u buf[NUMBUFLEN]; + char_u *defstr = (char_u *)""; + +! message = get_tv_string_chk(&argvars[0]); + if (argvars[1].v_type != VAR_UNKNOWN +! && (defstr = get_tv_string_buf_chk(&argvars[1], buf)) != NULL) + vim_strncpy(IObuff, defstr, IOSIZE - 1); + else + IObuff[0] = NUL; +--- 7025,7033 ---- + char_u buf[NUMBUFLEN]; + char_u *defstr = (char_u *)""; + +! message = tv_get_string_chk(&argvars[0]); + if (argvars[1].v_type != VAR_UNKNOWN +! && (defstr = tv_get_string_buf_chk(&argvars[1], buf)) != NULL) + vim_strncpy(IObuff, defstr, IOSIZE - 1); + else + IObuff[0] = NUL; +*************** +*** 7041,7047 **** + && argvars[1].v_type != VAR_UNKNOWN + && argvars[2].v_type != VAR_UNKNOWN) + rettv->vval.v_string = vim_strsave( +! get_tv_string_buf(&argvars[2], buf)); + else + rettv->vval.v_string = NULL; + } +--- 7041,7047 ---- + && argvars[1].v_type != VAR_UNKNOWN + && argvars[2].v_type != VAR_UNKNOWN) + rettv->vval.v_string = vim_strsave( +! tv_get_string_buf(&argvars[2], buf)); + else + rettv->vval.v_string = NULL; + } +*************** +*** 7082,7088 **** + + for (li = argvars[0].vval.v_list->lv_first; li != NULL; li = li->li_next) + { +! msg_puts(get_tv_string(&li->li_tv)); + msg_putchar('\n'); + } + +--- 7082,7088 ---- + + for (li = argvars[0].vval.v_list->lv_first; li != NULL; li = li->li_next) + { +! msg_puts(tv_get_string(&li->li_tv)); + msg_putchar('\n'); + } + +*************** +*** 7164,7170 **** + && !tv_check_lock(l->lv_lock, (char_u *)N_("insert() argument"), TRUE)) + { + if (argvars[2].v_type != VAR_UNKNOWN) +! before = (long)get_tv_number_chk(&argvars[2], &error); + if (error) + return; /* type error; errmsg already given */ + +--- 7164,7170 ---- + && !tv_check_lock(l->lv_lock, (char_u *)N_("insert() argument"), TRUE)) + { + if (argvars[2].v_type != VAR_UNKNOWN) +! before = (long)tv_get_number_chk(&argvars[2], &error); + if (error) + return; /* type error; errmsg already given */ + +*************** +*** 7193,7199 **** + static void + f_invert(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = ~get_tv_number_chk(&argvars[0], NULL); + } + + /* +--- 7193,7199 ---- + static void + f_invert(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = ~tv_get_number_chk(&argvars[0], NULL); + } + + /* +*************** +*** 7202,7208 **** + static void + f_isdirectory(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = mch_isdir(get_tv_string(&argvars[0])); + } + + /* +--- 7202,7208 ---- + static void + f_isdirectory(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = mch_isdir(tv_get_string(&argvars[0])); + } + + /* +*************** +*** 7232,7238 **** + dictitem_T *di; + + rettv->vval.v_number = -1; +! end = get_lval(get_tv_string(&argvars[0]), NULL, &lv, FALSE, FALSE, + GLV_NO_AUTOLOAD | GLV_READ_ONLY, FNE_CHECK_START); + if (end != NULL && lv.ll_name != NULL) + { +--- 7232,7238 ---- + dictitem_T *di; + + rettv->vval.v_number = -1; +! end = get_lval(tv_get_string(&argvars[0]), NULL, &lv, FALSE, FALSE, + GLV_NO_AUTOLOAD | GLV_READ_ONLY, FNE_CHECK_START); + if (end != NULL && lv.ll_name != NULL) + { +*************** +*** 7303,7309 **** + + if (tv->v_type != VAR_JOB) + { +! EMSG2(_(e_invarg2), get_tv_string(tv)); + return NULL; + } + job = tv->vval.v_job; +--- 7303,7309 ---- + + if (tv->v_type != VAR_JOB) + { +! EMSG2(_(e_invarg2), tv_get_string(tv)); + return NULL; + } + job = tv->vval.v_job; +*************** +*** 7423,7429 **** + if (argvars[1].v_type == VAR_UNKNOWN) + sep = (char_u *)" "; + else +! sep = get_tv_string_chk(&argvars[1]); + + rettv->v_type = VAR_STRING; + +--- 7423,7429 ---- + if (argvars[1].v_type == VAR_UNKNOWN) + sep = (char_u *)" "; + else +! sep = tv_get_string_chk(&argvars[1]); + + rettv->v_type = VAR_STRING; + +*************** +*** 7446,7452 **** + { + js_read_T reader; + +! reader.js_buf = get_tv_string(&argvars[0]); + reader.js_fill = NULL; + reader.js_used = 0; + if (json_decode_all(&reader, rettv, JSON_JS) != OK) +--- 7446,7452 ---- + { + js_read_T reader; + +! reader.js_buf = tv_get_string(&argvars[0]); + reader.js_fill = NULL; + reader.js_used = 0; + if (json_decode_all(&reader, rettv, JSON_JS) != OK) +*************** +*** 7471,7477 **** + { + js_read_T reader; + +! reader.js_buf = get_tv_string(&argvars[0]); + reader.js_fill = NULL; + reader.js_used = 0; + json_decode_all(&reader, rettv, 0); +--- 7471,7477 ---- + { + js_read_T reader; + +! reader.js_buf = tv_get_string(&argvars[0]); + reader.js_fill = NULL; + reader.js_used = 0; + json_decode_all(&reader, rettv, 0); +*************** +*** 7523,7529 **** + case VAR_STRING: + case VAR_NUMBER: + rettv->vval.v_number = (varnumber_T)STRLEN( +! get_tv_string(&argvars[0])); + break; + case VAR_LIST: + rettv->vval.v_number = list_len(argvars[0].vval.v_list); +--- 7523,7529 ---- + case VAR_STRING: + case VAR_NUMBER: + rettv->vval.v_number = (varnumber_T)STRLEN( +! tv_get_string(&argvars[0])); + break; + case VAR_LIST: + rettv->vval.v_number = list_len(argvars[0].vval.v_list); +*************** +*** 7627,7633 **** + #else + linenr_T lnum; + +! lnum = get_tv_lnum(argvars); + if (lnum < 1 || lnum > curbuf->b_ml.ml_line_count + 1) + rettv->vval.v_number = -1; + else +--- 7627,7633 ---- + #else + linenr_T lnum; + +! lnum = tv_get_lnum(argvars); + if (lnum < 1 || lnum > curbuf->b_ml.ml_line_count + 1) + rettv->vval.v_number = -1; + else +*************** +*** 7648,7654 **** + linenr_T lnum; + + pos = curwin->w_cursor; +! lnum = get_tv_lnum(argvars); + if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) + { + curwin->w_cursor.lnum = lnum; +--- 7648,7654 ---- + linenr_T lnum; + + pos = curwin->w_cursor; +! lnum = tv_get_lnum(argvars); + if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) + { + curwin->w_cursor.lnum = lnum; +*************** +*** 7687,7704 **** + rettv->v_type = VAR_STRING; + rettv->vval.v_string = NULL; + +! keys = get_tv_string(&argvars[0]); + if (*keys == NUL) + return; + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! which = get_tv_string_buf_chk(&argvars[1], buf); + if (argvars[2].v_type != VAR_UNKNOWN) + { +! abbr = (int)get_tv_number(&argvars[2]); + if (argvars[3].v_type != VAR_UNKNOWN) +! get_dict = (int)get_tv_number(&argvars[3]); + } + } + else +--- 7687,7704 ---- + rettv->v_type = VAR_STRING; + rettv->vval.v_string = NULL; + +! keys = tv_get_string(&argvars[0]); + if (*keys == NUL) + return; + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! which = tv_get_string_buf_chk(&argvars[1], buf); + if (argvars[2].v_type != VAR_UNKNOWN) + { +! abbr = (int)tv_get_number(&argvars[2]); + if (argvars[3].v_type != VAR_UNKNOWN) +! get_dict = (int)tv_get_number(&argvars[3]); + } + } + else +*************** +*** 7789,7795 **** + char_u *str; + char_u buf[NUMBUFLEN]; + +! str = get_tv_string_buf(&argvars[0], buf); + do_luaeval(str, argvars + 1, rettv); + } + #endif +--- 7789,7795 ---- + char_u *str; + char_u buf[NUMBUFLEN]; + +! str = tv_get_string_buf(&argvars[0], buf); + do_luaeval(str, argvars + 1, rettv); + } + #endif +*************** +*** 7890,7900 **** + } + else + { +! expr = str = get_tv_string(&argvars[0]); + len = (long)STRLEN(str); + } + +! pat = get_tv_string_buf_chk(&argvars[1], patbuf); + if (pat == NULL) + goto theend; + +--- 7890,7900 ---- + } + else + { +! expr = str = tv_get_string(&argvars[0]); + len = (long)STRLEN(str); + } + +! pat = tv_get_string_buf_chk(&argvars[1], patbuf); + if (pat == NULL) + goto theend; + +*************** +*** 7902,7908 **** + { + int error = FALSE; + +! start = (long)get_tv_number_chk(&argvars[2], &error); + if (error) + goto theend; + if (l != NULL) +--- 7902,7908 ---- + { + int error = FALSE; + +! start = (long)tv_get_number_chk(&argvars[2], &error); + if (error) + goto theend; + if (l != NULL) +*************** +*** 7931,7937 **** + } + + if (argvars[3].v_type != VAR_UNKNOWN) +! nth = (long)get_tv_number_chk(&argvars[3], &error); + if (error) + goto theend; + } +--- 7931,7937 ---- + } + + if (argvars[3].v_type != VAR_UNKNOWN) +! nth = (long)tv_get_number_chk(&argvars[3], &error); + if (error) + goto theend; + } +*************** +*** 8106,8113 **** + { + #ifdef FEAT_SEARCH_EXTRA + char_u buf[NUMBUFLEN]; +! char_u *grp = get_tv_string_buf_chk(&argvars[0], buf); /* group */ +! char_u *pat = get_tv_string_buf_chk(&argvars[1], buf); /* pattern */ + int prio = 10; /* default priority */ + int id = -1; + int error = FALSE; +--- 8106,8113 ---- + { + #ifdef FEAT_SEARCH_EXTRA + char_u buf[NUMBUFLEN]; +! char_u *grp = tv_get_string_buf_chk(&argvars[0], buf); /* group */ +! char_u *pat = tv_get_string_buf_chk(&argvars[1], buf); /* pattern */ + int prio = 10; /* default priority */ + int id = -1; + int error = FALSE; +*************** +*** 8120,8129 **** + return; + if (argvars[2].v_type != VAR_UNKNOWN) + { +! prio = (int)get_tv_number_chk(&argvars[2], &error); + if (argvars[3].v_type != VAR_UNKNOWN) + { +! id = (int)get_tv_number_chk(&argvars[3], &error); + if (argvars[4].v_type != VAR_UNKNOWN + && matchadd_dict_arg(&argvars[4], &conceal_char, &win) == FAIL) + return; +--- 8120,8129 ---- + return; + if (argvars[2].v_type != VAR_UNKNOWN) + { +! prio = (int)tv_get_number_chk(&argvars[2], &error); + if (argvars[3].v_type != VAR_UNKNOWN) + { +! id = (int)tv_get_number_chk(&argvars[3], &error); + if (argvars[4].v_type != VAR_UNKNOWN + && matchadd_dict_arg(&argvars[4], &conceal_char, &win) == FAIL) + return; +*************** +*** 8160,8166 **** + + rettv->vval.v_number = -1; + +! group = get_tv_string_buf_chk(&argvars[0], buf); + if (group == NULL) + return; + +--- 8160,8166 ---- + + rettv->vval.v_number = -1; + +! group = tv_get_string_buf_chk(&argvars[0], buf); + if (group == NULL) + return; + +*************** +*** 8175,8184 **** + + if (argvars[2].v_type != VAR_UNKNOWN) + { +! prio = (int)get_tv_number_chk(&argvars[2], &error); + if (argvars[3].v_type != VAR_UNKNOWN) + { +! id = (int)get_tv_number_chk(&argvars[3], &error); + + if (argvars[4].v_type != VAR_UNKNOWN + && matchadd_dict_arg(&argvars[4], &conceal_char, &win) == FAIL) +--- 8175,8184 ---- + + if (argvars[2].v_type != VAR_UNKNOWN) + { +! prio = (int)tv_get_number_chk(&argvars[2], &error); + if (argvars[3].v_type != VAR_UNKNOWN) + { +! id = (int)tv_get_number_chk(&argvars[3], &error); + + if (argvars[4].v_type != VAR_UNKNOWN + && matchadd_dict_arg(&argvars[4], &conceal_char, &win) == FAIL) +*************** +*** 8209,8215 **** + if (rettv_list_alloc(rettv) == OK) + { + #ifdef FEAT_SEARCH_EXTRA +! int id = (int)get_tv_number(&argvars[0]); + matchitem_T *m; + + if (id >= 1 && id <= 3) +--- 8209,8215 ---- + if (rettv_list_alloc(rettv) == OK) + { + #ifdef FEAT_SEARCH_EXTRA +! int id = (int)tv_get_number(&argvars[0]); + matchitem_T *m; + + if (id >= 1 && id <= 3) +*************** +*** 8238,8244 **** + { + #ifdef FEAT_SEARCH_EXTRA + rettv->vval.v_number = match_delete(curwin, +! (int)get_tv_number(&argvars[0]), TRUE); + #endif + } + +--- 8238,8244 ---- + { + #ifdef FEAT_SEARCH_EXTRA + rettv->vval.v_number = match_delete(curwin, +! (int)tv_get_number(&argvars[0]), TRUE); + #endif + } + +*************** +*** 8296,8308 **** + li = l->lv_first; + if (li != NULL) + { +! n = get_tv_number_chk(&li->li_tv, &error); + for (;;) + { + li = li->li_next; + if (li == NULL) + break; +! i = get_tv_number_chk(&li->li_tv, &error); + if (domax ? i > n : i < n) + n = i; + } +--- 8296,8308 ---- + li = l->lv_first; + if (li != NULL) + { +! n = tv_get_number_chk(&li->li_tv, &error); + for (;;) + { + li = li->li_next; + if (li == NULL) + break; +! i = tv_get_number_chk(&li->li_tv, &error); + if (domax ? i > n : i < n) + n = i; + } +*************** +*** 8325,8331 **** + if (!HASHITEM_EMPTY(hi)) + { + --todo; +! i = get_tv_number_chk(&HI2DI(hi)->di_tv, &error); + if (first) + { + n = i; +--- 8325,8331 ---- + if (!HASHITEM_EMPTY(hi)) + { + --todo; +! i = tv_get_number_chk(&HI2DI(hi)->di_tv, &error); + if (first) + { + n = i; +*************** +*** 8405,8411 **** + if (check_restricted() || check_secure()) + return; + +! dir = get_tv_string_buf(&argvars[0], buf); + if (*dir == NUL) + return; + +--- 8405,8411 ---- + if (check_restricted() || check_secure()) + return; + +! dir = tv_get_string_buf(&argvars[0], buf); + if (*dir == NUL) + return; + +*************** +*** 8417,8427 **** + { + if (argvars[2].v_type != VAR_UNKNOWN) + { +! prot = (int)get_tv_number_chk(&argvars[2], NULL); + if (prot == -1) + return; + } +! if (STRCMP(get_tv_string(&argvars[1]), "p") == 0) + { + if (mch_isdir(dir)) + { +--- 8417,8427 ---- + { + if (argvars[2].v_type != VAR_UNKNOWN) + { +! prot = (int)tv_get_number_chk(&argvars[2], NULL); + if (prot == -1) + return; + } +! if (STRCMP(tv_get_string(&argvars[1]), "p") == 0) + { + if (mch_isdir(dir)) + { +*************** +*** 8535,8541 **** + char_u *str; + char_u buf[NUMBUFLEN]; + +! str = get_tv_string_buf(&argvars[0], buf); + do_mzeval(str, rettv); + } + +--- 8535,8541 ---- + char_u *str; + char_u buf[NUMBUFLEN]; + +! str = tv_get_string_buf(&argvars[0], buf); + do_mzeval(str, rettv); + } + +*************** +*** 8561,8567 **** + { + linenr_T lnum; + +! for (lnum = get_tv_lnum(argvars); ; ++lnum) + { + if (lnum < 0 || lnum > curbuf->b_ml.ml_line_count) + { +--- 8561,8567 ---- + { + linenr_T lnum; + +! for (lnum = tv_get_lnum(argvars); ; ++lnum) + { + if (lnum < 0 || lnum > curbuf->b_ml.ml_line_count) + { +*************** +*** 8588,8603 **** + int utf8 = 0; + + if (argvars[1].v_type != VAR_UNKNOWN) +! utf8 = (int)get_tv_number_chk(&argvars[1], NULL); + if (utf8) +! buf[(*utf_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL; + else +! buf[(*mb_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL; + } + else + #endif + { +! buf[0] = (char_u)get_tv_number(&argvars[0]); + buf[1] = NUL; + } + rettv->v_type = VAR_STRING; +--- 8588,8603 ---- + int utf8 = 0; + + if (argvars[1].v_type != VAR_UNKNOWN) +! utf8 = (int)tv_get_number_chk(&argvars[1], NULL); + if (utf8) +! buf[(*utf_char2bytes)((int)tv_get_number(&argvars[0]), buf)] = NUL; + else +! buf[(*mb_char2bytes)((int)tv_get_number(&argvars[0]), buf)] = NUL; + } + else + #endif + { +! buf[0] = (char_u)tv_get_number(&argvars[0]); + buf[1] = NUL; + } + rettv->v_type = VAR_STRING; +*************** +*** 8610,8617 **** + static void + f_or(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL) +! | get_tv_number_chk(&argvars[1], NULL); + } + + /* +--- 8610,8617 ---- + static void + f_or(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = tv_get_number_chk(&argvars[0], NULL) +! | tv_get_number_chk(&argvars[1], NULL); + } + + /* +*************** +*** 8623,8629 **** + char_u *p; + + rettv->v_type = VAR_STRING; +! p = get_tv_string_chk(&argvars[0]); + if (p == NULL) + rettv->vval.v_string = NULL; + else +--- 8623,8629 ---- + char_u *p; + + rettv->v_type = VAR_STRING; +! p = tv_get_string_chk(&argvars[0]); + if (p == NULL) + rettv->vval.v_string = NULL; + else +*************** +*** 8645,8651 **** + char_u *str; + char_u buf[NUMBUFLEN]; + +! str = get_tv_string_buf(&argvars[0], buf); + do_perleval(str, rettv); + } + #endif +--- 8645,8651 ---- + char_u *str; + char_u buf[NUMBUFLEN]; + +! str = tv_get_string_buf(&argvars[0], buf); + do_perleval(str, rettv); + } + #endif +*************** +*** 8676,8682 **** + { + linenr_T lnum; + +! lnum = get_tv_lnum(argvars); + if (lnum < 1 || lnum > curbuf->b_ml.ml_line_count) + lnum = 0; + else +--- 8676,8682 ---- + { + linenr_T lnum; + +! lnum = tv_get_lnum(argvars); + if (lnum < 1 || lnum > curbuf->b_ml.ml_line_count) + lnum = 0; + else +*************** +*** 8708,8714 **** + + /* Get the required length, allocate the buffer and do it for real. */ + did_emsg = FALSE; +! fmt = (char *)get_tv_string_buf(&argvars[0], buf); + len = vim_vsnprintf_typval(NULL, 0, fmt, ap, argvars + 1); + if (!did_emsg) + { +--- 8708,8714 ---- + + /* Get the required length, allocate the buffer and do it for real. */ + did_emsg = FALSE; +! fmt = (char *)tv_get_string_buf(&argvars[0], buf); + len = vim_vsnprintf_typval(NULL, 0, fmt, ap, argvars + 1); + if (!did_emsg) + { +*************** +*** 8797,8803 **** + if (buf == NULL) + return; + +! text = get_tv_string(&argvars[1]); + vim_free(buf->b_prompt_text); + buf->b_prompt_text = vim_strsave(text); + } +--- 8797,8803 ---- + if (buf == NULL) + return; + +! text = tv_get_string(&argvars[1]); + vim_free(buf->b_prompt_text); + buf->b_prompt_text = vim_strsave(text); + } +*************** +*** 8828,8834 **** + if (p_pyx == 0) + p_pyx = 3; + +! str = get_tv_string_buf(&argvars[0], buf); + do_py3eval(str, rettv); + } + #endif +--- 8828,8834 ---- + if (p_pyx == 0) + p_pyx = 3; + +! str = tv_get_string_buf(&argvars[0], buf); + do_py3eval(str, rettv); + } + #endif +*************** +*** 8846,8852 **** + if (p_pyx == 0) + p_pyx = 2; + +! str = get_tv_string_buf(&argvars[0], buf); + do_pyeval(str, rettv); + } + #endif +--- 8846,8852 ---- + if (p_pyx == 0) + p_pyx = 2; + +! str = tv_get_string_buf(&argvars[0], buf); + do_pyeval(str, rettv); + } + #endif +*************** +*** 8884,8890 **** + varnumber_T i; + int error = FALSE; + +! start = get_tv_number_chk(&argvars[0], &error); + if (argvars[1].v_type == VAR_UNKNOWN) + { + end = start - 1; +--- 8884,8890 ---- + varnumber_T i; + int error = FALSE; + +! start = tv_get_number_chk(&argvars[0], &error); + if (argvars[1].v_type == VAR_UNKNOWN) + { + end = start - 1; +*************** +*** 8892,8900 **** + } + else + { +! end = get_tv_number_chk(&argvars[1], &error); + if (argvars[2].v_type != VAR_UNKNOWN) +! stride = get_tv_number_chk(&argvars[2], &error); + } + + if (error) +--- 8892,8900 ---- + } + else + { +! end = tv_get_number_chk(&argvars[1], &error); + if (argvars[2].v_type != VAR_UNKNOWN) +! stride = tv_get_number_chk(&argvars[2], &error); + } + + if (error) +*************** +*** 8936,8945 **** + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! if (STRCMP(get_tv_string(&argvars[1]), "b") == 0) + binary = TRUE; + if (argvars[2].v_type != VAR_UNKNOWN) +! maxline = (long)get_tv_number(&argvars[2]); + } + + if (rettv_list_alloc(rettv) == FAIL) +--- 8936,8945 ---- + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! if (STRCMP(tv_get_string(&argvars[1]), "b") == 0) + binary = TRUE; + if (argvars[2].v_type != VAR_UNKNOWN) +! maxline = (long)tv_get_number(&argvars[2]); + } + + if (rettv_list_alloc(rettv) == FAIL) +*************** +*** 8947,8953 **** + + /* Always open the file in binary mode, library functions have a mind of + * their own about CR-LF conversion. */ +! fname = get_tv_string(&argvars[0]); + if (*fname == NUL || (fd = mch_fopen((char *)fname, READBIN)) == NULL) + { + EMSG2(_(e_notopen), *fname == NUL ? (char_u *)_("<empty>") : fname); +--- 8947,8953 ---- + + /* Always open the file in binary mode, library functions have a mind of + * their own about CR-LF conversion. */ +! fname = tv_get_string(&argvars[0]); + if (*fname == NUL || (fd = mch_fopen((char *)fname, READBIN)) == NULL) + { + EMSG2(_(e_notopen), *fname == NUL ? (char_u *)_("<empty>") : fname); +*************** +*** 9318,9329 **** + # endif + if (argvars[2].v_type != VAR_UNKNOWN + && argvars[3].v_type != VAR_UNKNOWN) +! timeout = get_tv_number(&argvars[3]); + +! server_name = get_tv_string_chk(&argvars[0]); + if (server_name == NULL) + return; /* type error; errmsg already given */ +! keys = get_tv_string_buf(&argvars[1], buf); + # ifdef WIN32 + if (serverSendToVim(server_name, keys, &r, &w, expr, timeout, TRUE) < 0) + # else +--- 9318,9329 ---- + # endif + if (argvars[2].v_type != VAR_UNKNOWN + && argvars[3].v_type != VAR_UNKNOWN) +! timeout = tv_get_number(&argvars[3]); + +! server_name = tv_get_string_chk(&argvars[0]); + if (server_name == NULL) + return; /* type error; errmsg already given */ +! keys = tv_get_string_buf(&argvars[1], buf); + # ifdef WIN32 + if (serverSendToVim(server_name, keys, &r, &w, expr, timeout, TRUE) < 0) + # else +*************** +*** 9349,9355 **** + char_u str[30]; + char_u *idvar; + +! idvar = get_tv_string_chk(&argvars[2]); + if (idvar != NULL && *idvar != NUL) + { + sprintf((char *)str, PRINTF_HEX_LONG_U, (long_u)w); +--- 9349,9355 ---- + char_u str[30]; + char_u *idvar; + +! idvar = tv_get_string_chk(&argvars[2]); + if (idvar != NULL && *idvar != NUL) + { + sprintf((char *)str, PRINTF_HEX_LONG_U, (long_u)w); +*************** +*** 9385,9391 **** + # ifdef WIN32 + /* On Win32 it's done in this application. */ + { +! char_u *server_name = get_tv_string_chk(&argvars[0]); + + if (server_name != NULL) + serverForeground(server_name); +--- 9385,9391 ---- + # ifdef WIN32 + /* On Win32 it's done in this application. */ + { +! char_u *server_name = tv_get_string_chk(&argvars[0]); + + if (server_name != NULL) + serverForeground(server_name); +*************** +*** 9419,9425 **** + rettv->vval.v_number = -1; + return; + } +! serverid = get_tv_string_chk(&argvars[0]); + if (serverid == NULL) + { + rettv->vval.v_number = -1; +--- 9419,9425 ---- + rettv->vval.v_number = -1; + return; + } +! serverid = tv_get_string_chk(&argvars[0]); + if (serverid == NULL) + { + rettv->vval.v_number = -1; +*************** +*** 9448,9454 **** + + v.di_tv.v_type = VAR_STRING; + v.di_tv.vval.v_string = vim_strsave(s); +! retvar = get_tv_string_chk(&argvars[1]); + if (retvar != NULL) + set_var(retvar, &v.di_tv, FALSE); + vim_free(v.di_tv.vval.v_string); +--- 9448,9454 ---- + + v.di_tv.v_type = VAR_STRING; + v.di_tv.vval.v_string = vim_strsave(s); +! retvar = tv_get_string_chk(&argvars[1]); + if (retvar != NULL) + set_var(retvar, &v.di_tv, FALSE); + vim_free(v.di_tv.vval.v_string); +*************** +*** 9464,9470 **** + char_u *r = NULL; + + #ifdef FEAT_CLIENTSERVER +! char_u *serverid = get_tv_string_chk(&argvars[0]); + + if (serverid != NULL && !check_restricted() && !check_secure()) + { +--- 9464,9470 ---- + char_u *r = NULL; + + #ifdef FEAT_CLIENTSERVER +! char_u *serverid = tv_get_string_chk(&argvars[0]); + + if (serverid != NULL && !check_restricted() && !check_secure()) + { +*************** +*** 9475,9481 **** + # endif + + if (argvars[1].v_type != VAR_UNKNOWN) +! timeout = get_tv_number(&argvars[1]); + + # ifdef WIN32 + sscanf((char *)serverid, SCANF_HEX_LONG_U, &n); +--- 9475,9481 ---- + # endif + + if (argvars[1].v_type != VAR_UNKNOWN) +! timeout = tv_get_number(&argvars[1]); + + # ifdef WIN32 + sscanf((char *)serverid, SCANF_HEX_LONG_U, &n); +*************** +*** 9514,9520 **** + f_remote_startserver(typval_T *argvars UNUSED, typval_T *rettv UNUSED) + { + #ifdef FEAT_CLIENTSERVER +! char_u *server = get_tv_string_chk(&argvars[0]); + + if (server == NULL) + return; /* type error; errmsg already given */ +--- 9514,9520 ---- + f_remote_startserver(typval_T *argvars UNUSED, typval_T *rettv UNUSED) + { + #ifdef FEAT_CLIENTSERVER +! char_u *server = tv_get_string_chk(&argvars[0]); + + if (server == NULL) + return; /* type error; errmsg already given */ +*************** +*** 9557,9563 **** + else if ((d = argvars[0].vval.v_dict) != NULL + && !tv_check_lock(d->dv_lock, arg_errmsg, TRUE)) + { +! key = get_tv_string_chk(&argvars[1]); + if (key != NULL) + { + di = dict_find(d, key, -1); +--- 9557,9563 ---- + else if ((d = argvars[0].vval.v_dict) != NULL + && !tv_check_lock(d->dv_lock, arg_errmsg, TRUE)) + { +! key = tv_get_string_chk(&argvars[1]); + if (key != NULL) + { + di = dict_find(d, key, -1); +*************** +*** 9580,9586 **** + { + int error = FALSE; + +! idx = (long)get_tv_number_chk(&argvars[1], &error); + if (error) + ; /* type error: do nothing, errmsg already given */ + else if ((item = list_find(l, idx)) == NULL) +--- 9580,9586 ---- + { + int error = FALSE; + +! idx = (long)tv_get_number_chk(&argvars[1], &error); + if (error) + ; /* type error: do nothing, errmsg already given */ + else if ((item = list_find(l, idx)) == NULL) +*************** +*** 9597,9603 **** + else + { + /* Remove range of items, return list with values. */ +! end = (long)get_tv_number_chk(&argvars[2], &error); + if (error) + ; /* type error: do nothing */ + else if ((item2 = list_find(l, end)) == NULL) +--- 9597,9603 ---- + else + { + /* Remove range of items, return list with values. */ +! end = (long)tv_get_number_chk(&argvars[2], &error); + if (error) + ; /* type error: do nothing */ + else if ((item2 = list_find(l, end)) == NULL) +*************** +*** 9644,9651 **** + if (check_restricted() || check_secure()) + rettv->vval.v_number = -1; + else +! rettv->vval.v_number = vim_rename(get_tv_string(&argvars[0]), +! get_tv_string_buf(&argvars[1], buf)); + } + + /* +--- 9644,9651 ---- + if (check_restricted() || check_secure()) + rettv->vval.v_number = -1; + else +! rettv->vval.v_number = vim_rename(tv_get_string(&argvars[0]), +! tv_get_string_buf(&argvars[1], buf)); + } + + /* +*************** +*** 9661,9667 **** + char_u *r; + int i; + +! n = (int)get_tv_number(&argvars[1]); + if (argvars[0].v_type == VAR_LIST) + { + if (rettv_list_alloc(rettv) == OK && argvars[0].vval.v_list != NULL) +--- 9661,9667 ---- + char_u *r; + int i; + +! n = (int)tv_get_number(&argvars[1]); + if (argvars[0].v_type == VAR_LIST) + { + if (rettv_list_alloc(rettv) == OK && argvars[0].vval.v_list != NULL) +*************** +*** 9672,9678 **** + } + else + { +! p = get_tv_string(&argvars[0]); + rettv->v_type = VAR_STRING; + rettv->vval.v_string = NULL; + +--- 9672,9678 ---- + } + else + { +! p = tv_get_string(&argvars[0]); + rettv->v_type = VAR_STRING; + rettv->vval.v_string = NULL; + +*************** +*** 9704,9710 **** + char_u *buf = NULL; + #endif + +! p = get_tv_string(&argvars[0]); + #ifdef FEAT_SHORTCUT + { + char_u *v = NULL; +--- 9704,9710 ---- + char_u *buf = NULL; + #endif + +! p = tv_get_string(&argvars[0]); + #ifdef FEAT_SHORTCUT + { + char_u *v = NULL; +*************** +*** 9950,9956 **** + + if (varp->v_type != VAR_UNKNOWN) + { +! flags = get_tv_string_buf_chk(varp, nbuf); + if (flags == NULL) + return 0; /* type error; errmsg already given */ + while (*flags != NUL) +--- 9950,9956 ---- + + if (varp->v_type != VAR_UNKNOWN) + { +! flags = tv_get_string_buf_chk(varp, nbuf); + if (flags == NULL) + return 0; /* type error; errmsg already given */ + while (*flags != NUL) +*************** +*** 10010,10016 **** + int options = SEARCH_KEEP; + int subpatnum; + +! pat = get_tv_string(&argvars[0]); + dir = get_search_arg(&argvars[1], flagsp); /* may set p_ws */ + if (dir == 0) + goto theend; +--- 10010,10016 ---- + int options = SEARCH_KEEP; + int subpatnum; + +! pat = tv_get_string(&argvars[0]); + dir = get_search_arg(&argvars[1], flagsp); /* may set p_ws */ + if (dir == 0) + goto theend; +*************** +*** 10025,10037 **** + /* Optional arguments: line number to stop searching and timeout. */ + if (argvars[1].v_type != VAR_UNKNOWN && argvars[2].v_type != VAR_UNKNOWN) + { +! lnum_stop = (long)get_tv_number_chk(&argvars[2], NULL); + if (lnum_stop < 0) + goto theend; + #ifdef FEAT_RELTIME + if (argvars[3].v_type != VAR_UNKNOWN) + { +! time_limit = (long)get_tv_number_chk(&argvars[3], NULL); + if (time_limit < 0) + goto theend; + } +--- 10025,10037 ---- + /* Optional arguments: line number to stop searching and timeout. */ + if (argvars[1].v_type != VAR_UNKNOWN && argvars[2].v_type != VAR_UNKNOWN) + { +! lnum_stop = (long)tv_get_number_chk(&argvars[2], NULL); + if (lnum_stop < 0) + goto theend; + #ifdef FEAT_RELTIME + if (argvars[3].v_type != VAR_UNKNOWN) + { +! time_limit = (long)tv_get_number_chk(&argvars[3], NULL); + if (time_limit < 0) + goto theend; + } +*************** +*** 10052,10058 **** + if (((flags & (SP_REPEAT | SP_RETCOUNT)) != 0) + || ((flags & SP_NOMOVE) && (flags & SP_SETPCMARK))) + { +! EMSG2(_(e_invarg2), get_tv_string(&argvars[1])); + goto theend; + } + +--- 10052,10058 ---- + if (((flags & (SP_REPEAT | SP_RETCOUNT)) != 0) + || ((flags & SP_NOMOVE) && (flags & SP_SETPCMARK))) + { +! EMSG2(_(e_invarg2), tv_get_string(&argvars[1])); + goto theend; + } + +*************** +*** 10127,10134 **** + int col; + int c; + +! row = (int)get_tv_number_chk(&argvars[0], NULL) - 1; +! col = (int)get_tv_number_chk(&argvars[1], NULL) - 1; + if (row < 0 || row >= screen_Rows + || col < 0 || col >= screen_Columns) + c = -1; +--- 10127,10134 ---- + int col; + int c; + +! row = (int)tv_get_number_chk(&argvars[0], NULL) - 1; +! col = (int)tv_get_number_chk(&argvars[1], NULL) - 1; + if (row < 0 || row >= screen_Rows + || col < 0 || col >= screen_Columns) + c = -1; +*************** +*** 10148,10155 **** + int off; + int c; + +! row = (int)get_tv_number_chk(&argvars[0], NULL) - 1; +! col = (int)get_tv_number_chk(&argvars[1], NULL) - 1; + if (row < 0 || row >= screen_Rows + || col < 0 || col >= screen_Columns) + c = -1; +--- 10148,10155 ---- + int off; + int c; + +! row = (int)tv_get_number_chk(&argvars[0], NULL) - 1; +! col = (int)tv_get_number_chk(&argvars[1], NULL) - 1; + if (row < 0 || row >= screen_Rows + || col < 0 || col >= screen_Columns) + c = -1; +*************** +*** 10210,10221 **** + + rettv->vval.v_number = 1; /* default: FAIL */ + +! name = get_tv_string_chk(&argvars[0]); + if (argvars[1].v_type != VAR_UNKNOWN) + { +! locally = (int)get_tv_number_chk(&argvars[1], &error) == 0; + if (!error && argvars[2].v_type != VAR_UNKNOWN) +! thisblock = (int)get_tv_number_chk(&argvars[2], &error) != 0; + } + if (!error && name != NULL) + rettv->vval.v_number = find_decl(name, (int)STRLEN(name), +--- 10210,10221 ---- + + rettv->vval.v_number = 1; /* default: FAIL */ + +! name = tv_get_string_chk(&argvars[0]); + if (argvars[1].v_type != VAR_UNKNOWN) + { +! locally = (int)tv_get_number_chk(&argvars[1], &error) == 0; + if (!error && argvars[2].v_type != VAR_UNKNOWN) +! thisblock = (int)tv_get_number_chk(&argvars[2], &error) != 0; + } + if (!error && name != NULL) + rettv->vval.v_number = find_decl(name, (int)STRLEN(name), +*************** +*** 10241,10249 **** + + /* Get the three pattern arguments: start, middle, end. Will result in an + * error if not a valid argument. */ +! spat = get_tv_string_chk(&argvars[0]); +! mpat = get_tv_string_buf_chk(&argvars[1], nbuf1); +! epat = get_tv_string_buf_chk(&argvars[2], nbuf2); + if (spat == NULL || mpat == NULL || epat == NULL) + goto theend; /* type error */ + +--- 10241,10249 ---- + + /* Get the three pattern arguments: start, middle, end. Will result in an + * error if not a valid argument. */ +! spat = tv_get_string_chk(&argvars[0]); +! mpat = tv_get_string_buf_chk(&argvars[1], nbuf1); +! epat = tv_get_string_buf_chk(&argvars[2], nbuf2); + if (spat == NULL || mpat == NULL || epat == NULL) + goto theend; /* type error */ + +*************** +*** 10258,10264 **** + if ((flags & (SP_END | SP_SUBPAT)) != 0 + || ((flags & SP_NOMOVE) && (flags & SP_SETPCMARK))) + { +! EMSG2(_(e_invarg2), get_tv_string(&argvars[3])); + goto theend; + } + +--- 10258,10264 ---- + if ((flags & (SP_END | SP_SUBPAT)) != 0 + || ((flags & SP_NOMOVE) && (flags & SP_SETPCMARK))) + { +! EMSG2(_(e_invarg2), tv_get_string(&argvars[3])); + goto theend; + } + +*************** +*** 10277,10300 **** + && skip->v_type != VAR_STRING) + { + /* Type error */ +! EMSG2(_(e_invarg2), get_tv_string(&argvars[4])); + goto theend; + } + if (argvars[5].v_type != VAR_UNKNOWN) + { +! lnum_stop = (long)get_tv_number_chk(&argvars[5], NULL); + if (lnum_stop < 0) + { +! EMSG2(_(e_invarg2), get_tv_string(&argvars[5])); + goto theend; + } + #ifdef FEAT_RELTIME + if (argvars[6].v_type != VAR_UNKNOWN) + { +! time_limit = (long)get_tv_number_chk(&argvars[6], NULL); + if (time_limit < 0) + { +! EMSG2(_(e_invarg2), get_tv_string(&argvars[6])); + goto theend; + } + } +--- 10277,10300 ---- + && skip->v_type != VAR_STRING) + { + /* Type error */ +! EMSG2(_(e_invarg2), tv_get_string(&argvars[4])); + goto theend; + } + if (argvars[5].v_type != VAR_UNKNOWN) + { +! lnum_stop = (long)tv_get_number_chk(&argvars[5], NULL); + if (lnum_stop < 0) + { +! EMSG2(_(e_invarg2), tv_get_string(&argvars[5])); + goto theend; + } + #ifdef FEAT_RELTIME + if (argvars[6].v_type != VAR_UNKNOWN) + { +! time_limit = (long)tv_get_number_chk(&argvars[6], NULL); + if (time_limit < 0) + { +! EMSG2(_(e_invarg2), tv_get_string(&argvars[6])); + goto theend; + } + } +*************** +*** 10544,10551 **** + { + #ifdef FEAT_CLIENTSERVER + char_u buf[NUMBUFLEN]; +! char_u *server = get_tv_string_chk(&argvars[0]); +! char_u *reply = get_tv_string_buf_chk(&argvars[1], buf); + + rettv->vval.v_number = -1; + if (server == NULL || reply == NULL) +--- 10544,10551 ---- + { + #ifdef FEAT_CLIENTSERVER + char_u buf[NUMBUFLEN]; +! char_u *server = tv_get_string_chk(&argvars[0]); +! char_u *reply = tv_get_string_buf_chk(&argvars[1], buf); + + rettv->vval.v_number = -1; + if (server == NULL || reply == NULL) +*************** +*** 10600,10606 **** + rettv->vval.v_number = 1; /* FAIL */ + else + { +! lnum = get_tv_lnum_buf(&argvars[1], buf); + set_buffer_lines(buf, lnum, FALSE, &argvars[2], rettv); + } + } +--- 10600,10606 ---- + rettv->vval.v_number = 1; /* FAIL */ + else + { +! lnum = tv_get_lnum_buf(&argvars[1], buf); + set_buffer_lines(buf, lnum, FALSE, &argvars[2], rettv); + } + } +*************** +*** 10618,10625 **** + + if (check_restricted() || check_secure()) + return; +! (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */ +! varname = get_tv_string_chk(&argvars[1]); + buf = get_buf_tv(&argvars[0], FALSE); + varp = &argvars[2]; + +--- 10618,10625 ---- + + if (check_restricted() || check_secure()) + return; +! (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */ +! varname = tv_get_string_chk(&argvars[1]); + buf = get_buf_tv(&argvars[0], FALSE); + varp = &argvars[2]; + +*************** +*** 10636,10643 **** + aucmd_prepbuf(&aco, buf); + + ++varname; +! numval = (long)get_tv_number_chk(varp, &error); +! strval = get_tv_string_buf_chk(varp, nbuf); + if (!error && strval != NULL) + set_option_value(varname, numval, strval, OPT_LOCAL); + +--- 10636,10643 ---- + 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); + +*************** +*** 10696,10707 **** + + di = dict_find(d, (char_u *)"forward", -1); + if (di != NULL) +! set_csearch_direction((int)get_tv_number(&di->di_tv) + ? FORWARD : BACKWARD); + + di = dict_find(d, (char_u *)"until", -1); + if (di != NULL) +! set_csearch_until(!!get_tv_number(&di->di_tv)); + } + } + +--- 10696,10707 ---- + + di = dict_find(d, (char_u *)"forward", -1); + if (di != NULL) +! set_csearch_direction((int)tv_get_number(&di->di_tv) + ? FORWARD : BACKWARD); + + di = dict_find(d, (char_u *)"until", -1); + if (di != NULL) +! set_csearch_until(!!tv_get_number(&di->di_tv)); + } + } + +*************** +*** 10711,10717 **** + static void + f_setcmdpos(typval_T *argvars, typval_T *rettv) + { +! int pos = (int)get_tv_number(&argvars[0]) - 1; + + if (pos >= 0) + rettv->vval.v_number = set_cmdline_pos(pos); +--- 10711,10717 ---- + static void + f_setcmdpos(typval_T *argvars, typval_T *rettv) + { +! int pos = (int)tv_get_number(&argvars[0]) - 1; + + if (pos >= 0) + rettv->vval.v_number = set_cmdline_pos(pos); +*************** +*** 10731,10740 **** + int mode = 0; + + rettv->vval.v_number = 0; +! fname = get_tv_string_chk(&argvars[0]); + if (fname == NULL) + return; +! mode_str = get_tv_string_buf_chk(&argvars[1], modebuf); + if (mode_str == NULL) + return; + if (STRLEN(mode_str) != 9) +--- 10731,10740 ---- + int mode = 0; + + rettv->vval.v_number = 0; +! fname = tv_get_string_chk(&argvars[0]); + if (fname == NULL) + return; +! mode_str = tv_get_string_buf_chk(&argvars[1], modebuf); + if (mode_str == NULL) + return; + if (STRLEN(mode_str) != 9) +*************** +*** 10759,10765 **** + static void + f_setline(typval_T *argvars, typval_T *rettv) + { +! linenr_T lnum = get_tv_lnum(&argvars[0]); + + set_buffer_lines(curbuf, lnum, FALSE, &argvars[1], rettv); + } +--- 10759,10765 ---- + static void + f_setline(typval_T *argvars, typval_T *rettv) + { +! linenr_T lnum = tv_get_lnum(&argvars[0]); + + set_buffer_lines(curbuf, lnum, FALSE, &argvars[1], rettv); + } +*************** +*** 10797,10803 **** + + if (action_arg->v_type == VAR_STRING) + { +! act = get_tv_string_chk(action_arg); + if (act == NULL) + return; /* type error; errmsg already given */ + if ((*act == 'a' || *act == 'r' || *act == ' ' || *act == 'f') && +--- 10797,10803 ---- + + if (action_arg->v_type == VAR_STRING) + { +! act = tv_get_string_chk(action_arg); + if (act == NULL) + return; /* type error; errmsg already given */ + if ((*act == 'a' || *act == 'r' || *act == ' ' || *act == 'f') && +*************** +*** 10971,10977 **** + colnr_T curswant = -1; + + rettv->vval.v_number = -1; +! name = get_tv_string_chk(argvars); + if (name != NULL) + { + if (list2fpos(&argvars[1], &pos, &fnum, &curswant) == OK) +--- 10971,10977 ---- + colnr_T curswant = -1; + + rettv->vval.v_number = -1; +! name = tv_get_string_chk(argvars); + if (name != NULL) + { + if (list2fpos(&argvars[1], &pos, &fnum, &curswant) == OK) +*************** +*** 11029,11035 **** + yank_type = MAUTO; + append = FALSE; + +! strregname = get_tv_string_chk(argvars); + rettv->vval.v_number = 1; /* FAIL is default */ + + if (strregname == NULL) +--- 11029,11035 ---- + yank_type = MAUTO; + append = FALSE; + +! strregname = tv_get_string_chk(argvars); + rettv->vval.v_number = 1; /* FAIL is default */ + + if (strregname == NULL) +*************** +*** 11040,11046 **** + + if (argvars[2].v_type != VAR_UNKNOWN) + { +! stropt = get_tv_string_chk(&argvars[2]); + if (stropt == NULL) + return; /* type error */ + for (; *stropt != NUL; ++stropt) +--- 11040,11046 ---- + + if (argvars[2].v_type != VAR_UNKNOWN) + { +! stropt = tv_get_string_chk(&argvars[2]); + if (stropt == NULL) + return; /* type error */ + for (; *stropt != NUL; ++stropt) +*************** +*** 11093,11104 **** + for (li = ll == NULL ? NULL : ll->lv_first; li != NULL; + li = li->li_next) + { +! strval = get_tv_string_buf_chk(&li->li_tv, buf); + if (strval == NULL) + goto free_lstval; + if (strval == buf) + { +! /* Need to make a copy, next get_tv_string_buf_chk() will + * overwrite the string. */ + strval = vim_strsave(buf); + if (strval == NULL) +--- 11093,11104 ---- + for (li = ll == NULL ? NULL : ll->lv_first; li != NULL; + li = li->li_next) + { +! strval = tv_get_string_buf_chk(&li->li_tv, buf); + if (strval == NULL) + goto free_lstval; + if (strval == buf) + { +! /* Need to make a copy, next tv_get_string_buf_chk() will + * overwrite the string. */ + strval = vim_strsave(buf); + if (strval == NULL) +*************** +*** 11118,11124 **** + } + else + { +! strval = get_tv_string_chk(&argvars[1]); + if (strval == NULL) + return; + write_reg_contents_ex(regname, strval, -1, +--- 11118,11124 ---- + } + else + { +! strval = tv_get_string_chk(&argvars[1]); + if (strval == NULL) + return; + write_reg_contents_ex(regname, strval, -1, +*************** +*** 11143,11150 **** + if (check_restricted() || check_secure()) + return; + +! tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL)); +! varname = get_tv_string_chk(&argvars[1]); + varp = &argvars[2]; + + if (varname != NULL && varp != NULL && tp != NULL) +--- 11143,11150 ---- + if (check_restricted() || check_secure()) + return; + +! tp = find_tabpage((int)tv_get_number_chk(&argvars[0], NULL)); +! varname = tv_get_string_chk(&argvars[1]); + varp = &argvars[2]; + + if (varname != NULL && varp != NULL && tp != NULL) +*************** +*** 11211,11217 **** + else if (argvars[2].v_type == VAR_STRING) + { + char_u *actstr; +! actstr = get_tv_string_chk(&argvars[2]); + if (actstr == NULL) + return; + if ((*actstr == 'r' || *actstr == 'a') && actstr[1] == NUL) +--- 11211,11217 ---- + else if (argvars[2].v_type == VAR_STRING) + { + char_u *actstr; +! actstr = tv_get_string_chk(&argvars[2]); + if (actstr == NULL) + return; + if ((*actstr == 'r' || *actstr == 'a') && actstr[1] == NUL) +*************** +*** 11250,11256 **** + { + char_u *p; + +! p = get_tv_string(&argvars[0]); + rettv->vval.v_string = vim_strsave( + sha256_bytes(p, (int)STRLEN(p), NULL, 0)); + rettv->v_type = VAR_STRING; +--- 11250,11256 ---- + { + char_u *p; + +! p = tv_get_string(&argvars[0]); + rettv->vval.v_string = vim_strsave( + sha256_bytes(p, (int)STRLEN(p), NULL, 0)); + rettv->v_type = VAR_STRING; +*************** +*** 11266,11272 **** + int do_special = non_zero_arg(&argvars[1]); + + rettv->vval.v_string = vim_strsave_shellescape( +! get_tv_string(&argvars[0]), do_special, do_special); + rettv->v_type = VAR_STRING; + } + +--- 11266,11272 ---- + int do_special = non_zero_arg(&argvars[1]); + + rettv->vval.v_string = vim_strsave_shellescape( +! tv_get_string(&argvars[0]), do_special, do_special); + rettv->v_type = VAR_STRING; + } + +*************** +*** 11282,11288 **** + { + long col; + +! col = (long)get_tv_number_chk(argvars, NULL); + if (col < 0) + return; // type error; errmsg already given + #ifdef FEAT_VARTABS +--- 11282,11288 ---- + { + long col; + +! col = (long)tv_get_number_chk(argvars, NULL); + if (col < 0) + return; // type error; errmsg already given + #ifdef FEAT_VARTABS +*************** +*** 11310,11316 **** + + rettv->vval.v_number = -1; + +! name = get_tv_string_chk(&argvars[0]); + if (name == NULL) + return; + +--- 11310,11316 ---- + + rettv->vval.v_number = -1; + +! name = tv_get_string_chk(&argvars[0]); + if (name == NULL) + return; + +*************** +*** 11355,11361 **** + return; + + if (argvars[0].v_type != VAR_UNKNOWN) +! name = get_tv_string(&argvars[0]); + + sign_getlist(name, rettv->vval.v_list); + } +--- 11355,11361 ---- + return; + + if (argvars[0].v_type != VAR_UNKNOWN) +! name = tv_get_string(&argvars[0]); + + sign_getlist(name, rettv->vval.v_list); + } +*************** +*** 11384,11390 **** + if (buf == NULL) + { + EMSG2(_("E158: Invalid buffer name: %s"), +! get_tv_string(&argvars[0])); + return; + } + +--- 11384,11390 ---- + if (buf == NULL) + { + EMSG2(_("E158: Invalid buffer name: %s"), +! tv_get_string(&argvars[0])); + return; + } + +*************** +*** 11399,11419 **** + if ((di = dict_find(dict, (char_u *)"lnum", -1)) != NULL) + { + // get signs placed at this line +! (void)get_tv_number_chk(&di->di_tv, ¬anum); + if (notanum) + return; +! lnum = get_tv_lnum(&di->di_tv); + } + if ((di = dict_find(dict, (char_u *)"id", -1)) != NULL) + { + // get sign placed with this identifier +! sign_id = (int)get_tv_number_chk(&di->di_tv, ¬anum); + if (notanum) + return; + } + if ((di = dict_find(dict, (char_u *)"group", -1)) != NULL) + { +! group = get_tv_string_chk(&di->di_tv); + if (group == NULL) + return; + } +--- 11399,11419 ---- + if ((di = dict_find(dict, (char_u *)"lnum", -1)) != NULL) + { + // get signs placed at this line +! (void)tv_get_number_chk(&di->di_tv, ¬anum); + if (notanum) + return; +! lnum = tv_get_lnum(&di->di_tv); + } + if ((di = dict_find(dict, (char_u *)"id", -1)) != NULL) + { + // get sign placed with this identifier +! sign_id = (int)tv_get_number_chk(&di->di_tv, ¬anum); + if (notanum) + return; + } + if ((di = dict_find(dict, (char_u *)"group", -1)) != NULL) + { +! group = tv_get_string_chk(&di->di_tv); + if (group == NULL) + return; + } +*************** +*** 11442,11448 **** + rettv->vval.v_number = -1; + + // Sign identifer +! sign_id = (int)get_tv_number_chk(&argvars[0], ¬anum); + if (notanum) + return; + if (sign_id < 0) +--- 11442,11448 ---- + rettv->vval.v_number = -1; + + // Sign identifer +! sign_id = (int)tv_get_number_chk(&argvars[0], ¬anum); + if (notanum) + return; + if (sign_id < 0) +*************** +*** 11452,11458 **** + } + + // Sign group +! group = get_tv_string_chk(&argvars[1]); + if (group == NULL) + return; + if (group[0] == '\0') +--- 11452,11458 ---- + } + + // Sign group +! group = tv_get_string_chk(&argvars[1]); + if (group == NULL) + return; + if (group[0] == '\0') +*************** +*** 11465,11471 **** + } + + // Sign name +! sign_name = get_tv_string_chk(&argvars[2]); + if (sign_name == NULL) + goto cleanup; + +--- 11465,11471 ---- + } + + // Sign name +! sign_name = tv_get_string_chk(&argvars[2]); + if (sign_name == NULL) + goto cleanup; + +*************** +*** 11473,11479 **** + buf = find_buffer(&argvars[3]); + if (buf == NULL) + { +! EMSG2(_("E158: Invalid buffer name: %s"), get_tv_string(&argvars[2])); + goto cleanup; + } + +--- 11473,11479 ---- + buf = find_buffer(&argvars[3]); + if (buf == NULL) + { +! EMSG2(_("E158: Invalid buffer name: %s"), tv_get_string(&argvars[2])); + goto cleanup; + } + +*************** +*** 11489,11503 **** + // Line number where the sign is to be placed + if ((di = dict_find(dict, (char_u *)"lnum", -1)) != NULL) + { +! (void)get_tv_number_chk(&di->di_tv, ¬anum); + if (notanum) + goto cleanup; +! lnum = get_tv_lnum(&di->di_tv); + } + if ((di = dict_find(dict, (char_u *)"priority", -1)) != NULL) + { + // Sign priority +! prio = (int)get_tv_number_chk(&di->di_tv, ¬anum); + if (notanum) + goto cleanup; + } +--- 11489,11503 ---- + // Line number where the sign is to be placed + if ((di = dict_find(dict, (char_u *)"lnum", -1)) != NULL) + { +! (void)tv_get_number_chk(&di->di_tv, ¬anum); + if (notanum) + goto cleanup; +! lnum = tv_get_lnum(&di->di_tv); + } + if ((di = dict_find(dict, (char_u *)"priority", -1)) != NULL) + { + // Sign priority +! prio = (int)tv_get_number_chk(&di->di_tv, ¬anum); + if (notanum) + goto cleanup; + } +*************** +*** 11529,11535 **** + else + { + // Free only the specified sign +! name = get_tv_string_chk(&argvars[0]); + if (name == NULL) + return; + +--- 11529,11535 ---- + else + { + // Free only the specified sign +! name = tv_get_string_chk(&argvars[0]); + if (name == NULL) + return; + +*************** +*** 11558,11564 **** + return; + } + +! group = get_tv_string(&argvars[0]); + if (group[0] == '\0') + group = NULL; // global sign group + else +--- 11558,11564 ---- + return; + } + +! group = tv_get_string(&argvars[0]); + if (group[0] == '\0') + group = NULL; // global sign group + else +*************** +*** 11583,11589 **** + if (buf == NULL) + { + EMSG2(_("E158: Invalid buffer name: %s"), +! get_tv_string(&di->di_tv)); + return; + } + } +--- 11583,11589 ---- + if (buf == NULL) + { + EMSG2(_("E158: Invalid buffer name: %s"), +! tv_get_string(&di->di_tv)); + return; + } + } +*************** +*** 11615,11621 **** + { + char_u *p; + +! p = get_tv_string(&argvars[0]); + rettv->vval.v_string = vim_strsave(p); + simplify_filename(rettv->vval.v_string); /* simplify in place */ + rettv->v_type = VAR_STRING; +--- 11615,11621 ---- + { + char_u *p; + +! p = tv_get_string(&argvars[0]); + rettv->vval.v_string = vim_strsave(p); + simplify_filename(rettv->vval.v_string); /* simplify in place */ + rettv->v_type = VAR_STRING; +*************** +*** 11713,11720 **** + + if (sortinfo->item_compare_numbers) + { +! varnumber_T v1 = get_tv_number(tv1); +! varnumber_T v2 = get_tv_number(tv2); + + return v1 == v2 ? 0 : v1 > v2 ? 1 : -1; + } +--- 11713,11720 ---- + + if (sortinfo->item_compare_numbers) + { +! varnumber_T v1 = tv_get_number(tv1); +! varnumber_T v2 = tv_get_number(tv2); + + return v1 == v2 ? 0 : v1 > v2 ? 1 : -1; + } +*************** +*** 11722,11729 **** + #ifdef FEAT_FLOAT + if (sortinfo->item_compare_float) + { +! float_T v1 = get_tv_float(tv1); +! float_T v2 = get_tv_float(tv2); + + return v1 == v2 ? 0 : v1 > v2 ? 1 : -1; + } +--- 11722,11729 ---- + #ifdef FEAT_FLOAT + if (sortinfo->item_compare_float) + { +! float_T v1 = tv_get_float(tv1); +! float_T v2 = tv_get_float(tv2); + + return v1 == v2 ? 0 : v1 > v2 ? 1 : -1; + } +*************** +*** 11820,11826 **** + if (res == FAIL) + res = ITEM_COMPARE_FAIL; + else +! res = (int)get_tv_number_chk(&rettv, &sortinfo->item_compare_func_err); + if (sortinfo->item_compare_func_err) + res = ITEM_COMPARE_FAIL; /* return value has wrong type */ + clear_tv(&rettv); +--- 11820,11826 ---- + if (res == FAIL) + res = ITEM_COMPARE_FAIL; + else +! res = (int)tv_get_number_chk(&rettv, &sortinfo->item_compare_func_err); + if (sortinfo->item_compare_func_err) + res = ITEM_COMPARE_FAIL; /* return value has wrong type */ + clear_tv(&rettv); +*************** +*** 11887,11899 **** + { + int error = FALSE; + +! i = (long)get_tv_number_chk(&argvars[1], &error); + if (error) + goto theend; /* type error; errmsg already given */ + if (i == 1) + info.item_compare_ic = TRUE; + else if (argvars[1].v_type != VAR_NUMBER) +! info.item_compare_func = get_tv_string(&argvars[1]); + else if (i != 0) + { + EMSG(_(e_invarg)); +--- 11887,11899 ---- + { + int error = FALSE; + +! i = (long)tv_get_number_chk(&argvars[1], &error); + if (error) + goto theend; /* type error; errmsg already given */ + if (i == 1) + info.item_compare_ic = TRUE; + else if (argvars[1].v_type != VAR_NUMBER) +! info.item_compare_func = tv_get_string(&argvars[1]); + else if (i != 0) + { + EMSG(_(e_invarg)); +*************** +*** 12059,12065 **** + char_u *s; + + rettv->v_type = VAR_STRING; +! s = get_tv_string(&argvars[0]); + #ifdef FEAT_SPELL + rettv->vval.v_string = eval_soundfold(s); + #else +--- 12059,12065 ---- + char_u *s; + + rettv->v_type = VAR_STRING; +! s = tv_get_string(&argvars[0]); + #ifdef FEAT_SPELL + rettv->vval.v_string = eval_soundfold(s); + #else +*************** +*** 12093,12099 **** + } + else if (curwin->w_p_spell && *curbuf->b_s.b_p_spl != NUL) + { +! char_u *str = get_tv_string_chk(&argvars[0]); + int capcol = -1; + + if (str != NULL) +--- 12093,12099 ---- + } + else if (curwin->w_p_spell && *curbuf->b_s.b_p_spl != NUL) + { +! char_u *str = tv_get_string_chk(&argvars[0]); + int capcol = -1; + + if (str != NULL) +*************** +*** 12145,12159 **** + #ifdef FEAT_SPELL + if (curwin->w_p_spell && *curwin->w_s->b_p_spl != NUL) + { +! str = get_tv_string(&argvars[0]); + if (argvars[1].v_type != VAR_UNKNOWN) + { +! maxcount = (int)get_tv_number_chk(&argvars[1], &typeerr); + if (maxcount <= 0) + return; + if (argvars[2].v_type != VAR_UNKNOWN) + { +! need_capital = (int)get_tv_number_chk(&argvars[2], &typeerr); + if (typeerr) + return; + } +--- 12145,12159 ---- + #ifdef FEAT_SPELL + if (curwin->w_p_spell && *curwin->w_s->b_p_spl != NUL) + { +! str = tv_get_string(&argvars[0]); + if (argvars[1].v_type != VAR_UNKNOWN) + { +! maxcount = (int)tv_get_number_chk(&argvars[1], &typeerr); + if (maxcount <= 0) + return; + if (argvars[2].v_type != VAR_UNKNOWN) + { +! need_capital = (int)tv_get_number_chk(&argvars[2], &typeerr); + if (typeerr) + return; + } +*************** +*** 12201,12214 **** + save_cpo = p_cpo; + p_cpo = (char_u *)""; + +! str = get_tv_string(&argvars[0]); + if (argvars[1].v_type != VAR_UNKNOWN) + { +! pat = get_tv_string_buf_chk(&argvars[1], patbuf); + if (pat == NULL) + typeerr = TRUE; + if (argvars[2].v_type != VAR_UNKNOWN) +! keepempty = (int)get_tv_number_chk(&argvars[2], &typeerr); + } + if (pat == NULL || *pat == NUL) + pat = (char_u *)"[\\x01- ]\\+"; +--- 12201,12214 ---- + save_cpo = p_cpo; + p_cpo = (char_u *)""; + +! str = tv_get_string(&argvars[0]); + if (argvars[1].v_type != VAR_UNKNOWN) + { +! pat = tv_get_string_buf_chk(&argvars[1], patbuf); + if (pat == NULL) + typeerr = TRUE; + if (argvars[2].v_type != VAR_UNKNOWN) +! keepempty = (int)tv_get_number_chk(&argvars[2], &typeerr); + } + if (pat == NULL || *pat == NUL) + pat = (char_u *)"[\\x01- ]\\+"; +*************** +*** 12284,12290 **** + static void + f_str2float(typval_T *argvars, typval_T *rettv) + { +! char_u *p = skipwhite(get_tv_string(&argvars[0])); + int isneg = (*p == '-'); + + if (*p == '+' || *p == '-') +--- 12284,12290 ---- + static void + f_str2float(typval_T *argvars, typval_T *rettv) + { +! char_u *p = skipwhite(tv_get_string(&argvars[0])); + int isneg = (*p == '-'); + + if (*p == '+' || *p == '-') +*************** +*** 12310,12316 **** + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! base = (int)get_tv_number(&argvars[1]); + if (base != 2 && base != 8 && base != 10 && base != 16) + { + EMSG(_(e_invarg)); +--- 12310,12316 ---- + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! base = (int)tv_get_number(&argvars[1]); + if (base != 2 && base != 8 && base != 10 && base != 16) + { + EMSG(_(e_invarg)); +*************** +*** 12318,12324 **** + } + } + +! p = skipwhite(get_tv_string(&argvars[0])); + isneg = (*p == '-'); + if (*p == '+' || *p == '-') + p = skipwhite(p + 1); +--- 12318,12324 ---- + } + } + +! p = skipwhite(tv_get_string(&argvars[0])); + isneg = (*p == '-'); + if (*p == '+' || *p == '-') + p = skipwhite(p + 1); +*************** +*** 12351,12361 **** + + rettv->v_type = VAR_STRING; + +! p = get_tv_string(&argvars[0]); + if (argvars[1].v_type == VAR_UNKNOWN) + seconds = time(NULL); + else +! seconds = (time_t)get_tv_number(&argvars[1]); + curtime = localtime(&seconds); + /* MSVC returns NULL for an invalid value of seconds. */ + if (curtime == NULL) +--- 12351,12361 ---- + + rettv->v_type = VAR_STRING; + +! p = tv_get_string(&argvars[0]); + if (argvars[1].v_type == VAR_UNKNOWN) + seconds = time(NULL); + else +! seconds = (time_t)tv_get_number(&argvars[1]); + curtime = localtime(&seconds); + /* MSVC returns NULL for an invalid value of seconds. */ + if (curtime == NULL) +*************** +*** 12409,12419 **** + int charidx; + + rettv->vval.v_number = -1; +! str = get_tv_string_chk(&argvars[0]); + if (str == NULL) + return; + len = (int)STRLEN(str); +! charidx = (int)get_tv_number_chk(&argvars[1], &error); + if (error) + return; + #ifdef FEAT_MBYTE +--- 12409,12419 ---- + int charidx; + + rettv->vval.v_number = -1; +! str = tv_get_string_chk(&argvars[0]); + if (str == NULL) + return; + len = (int)STRLEN(str); +! charidx = (int)tv_get_number_chk(&argvars[1], &error); + if (error) + return; + #ifdef FEAT_MBYTE +*************** +*** 12450,12457 **** + char_u *pos; + int start_idx; + +! needle = get_tv_string_chk(&argvars[1]); +! save_haystack = haystack = get_tv_string_buf_chk(&argvars[0], buf); + rettv->vval.v_number = -1; + if (needle == NULL || haystack == NULL) + return; /* type error; errmsg already given */ +--- 12450,12457 ---- + char_u *pos; + int start_idx; + +! needle = tv_get_string_chk(&argvars[1]); +! save_haystack = haystack = tv_get_string_buf_chk(&argvars[0], buf); + rettv->vval.v_number = -1; + if (needle == NULL || haystack == NULL) + return; /* type error; errmsg already given */ +*************** +*** 12460,12466 **** + { + int error = FALSE; + +! start_idx = (int)get_tv_number_chk(&argvars[2], &error); + if (error || start_idx >= (int)STRLEN(haystack)) + return; + if (start_idx >= 0) +--- 12460,12466 ---- + { + int error = FALSE; + +! start_idx = (int)tv_get_number_chk(&argvars[2], &error); + if (error || start_idx >= (int)STRLEN(haystack)) + return; + if (start_idx >= 0) +*************** +*** 12496,12502 **** + f_strlen(typval_T *argvars, typval_T *rettv) + { + rettv->vval.v_number = (varnumber_T)(STRLEN( +! get_tv_string(&argvars[0]))); + } + + /* +--- 12496,12502 ---- + f_strlen(typval_T *argvars, typval_T *rettv) + { + rettv->vval.v_number = (varnumber_T)(STRLEN( +! tv_get_string(&argvars[0]))); + } + + /* +*************** +*** 12505,12511 **** + static void + f_strchars(typval_T *argvars, typval_T *rettv) + { +! char_u *s = get_tv_string(&argvars[0]); + int skipcc = 0; + #ifdef FEAT_MBYTE + varnumber_T len = 0; +--- 12505,12511 ---- + static void + f_strchars(typval_T *argvars, typval_T *rettv) + { +! char_u *s = tv_get_string(&argvars[0]); + int skipcc = 0; + #ifdef FEAT_MBYTE + varnumber_T len = 0; +*************** +*** 12513,12519 **** + #endif + + if (argvars[1].v_type != VAR_UNKNOWN) +! skipcc = (int)get_tv_number_chk(&argvars[1], NULL); + if (skipcc < 0 || skipcc > 1) + EMSG(_(e_invarg)); + else +--- 12513,12519 ---- + #endif + + if (argvars[1].v_type != VAR_UNKNOWN) +! skipcc = (int)tv_get_number_chk(&argvars[1], NULL); + if (skipcc < 0 || skipcc > 1) + EMSG(_(e_invarg)); + else +*************** +*** 12538,12548 **** + static void + f_strdisplaywidth(typval_T *argvars, typval_T *rettv) + { +! char_u *s = get_tv_string(&argvars[0]); + int col = 0; + + if (argvars[1].v_type != VAR_UNKNOWN) +! col = (int)get_tv_number(&argvars[1]); + + rettv->vval.v_number = (varnumber_T)(linetabsize_col(col, s) - col); + } +--- 12538,12548 ---- + static void + f_strdisplaywidth(typval_T *argvars, typval_T *rettv) + { +! char_u *s = tv_get_string(&argvars[0]); + int col = 0; + + if (argvars[1].v_type != VAR_UNKNOWN) +! col = (int)tv_get_number(&argvars[1]); + + rettv->vval.v_number = (varnumber_T)(linetabsize_col(col, s) - col); + } +*************** +*** 12553,12559 **** + static void + f_strwidth(typval_T *argvars, typval_T *rettv) + { +! char_u *s = get_tv_string(&argvars[0]); + + rettv->vval.v_number = (varnumber_T)( + #ifdef FEAT_MBYTE +--- 12553,12559 ---- + static void + f_strwidth(typval_T *argvars, typval_T *rettv) + { +! char_u *s = tv_get_string(&argvars[0]); + + rettv->vval.v_number = (varnumber_T)( + #ifdef FEAT_MBYTE +*************** +*** 12579,12588 **** + int slen; + int error = FALSE; + +! p = get_tv_string(&argvars[0]); + slen = (int)STRLEN(p); + +! nchar = (int)get_tv_number_chk(&argvars[1], &error); + if (!error) + { + if (nchar > 0) +--- 12579,12588 ---- + int slen; + int error = FALSE; + +! p = tv_get_string(&argvars[0]); + slen = (int)STRLEN(p); + +! nchar = (int)tv_get_number_chk(&argvars[1], &error); + if (!error) + { + if (nchar > 0) +*************** +*** 12595,12601 **** + nbyte = nchar; + if (argvars[2].v_type != VAR_UNKNOWN) + { +! charlen = (int)get_tv_number(&argvars[2]); + while (charlen > 0 && nbyte + len < slen) + { + int off = nbyte + len; +--- 12595,12601 ---- + nbyte = nchar; + if (argvars[2].v_type != VAR_UNKNOWN) + { +! charlen = (int)tv_get_number(&argvars[2]); + while (charlen > 0 && nbyte + len < slen) + { + int off = nbyte + len; +*************** +*** 12646,12659 **** + int slen; + int error = FALSE; + +! p = get_tv_string(&argvars[0]); + slen = (int)STRLEN(p); + +! n = (int)get_tv_number_chk(&argvars[1], &error); + if (error) + len = 0; + else if (argvars[2].v_type != VAR_UNKNOWN) +! len = (int)get_tv_number(&argvars[2]); + else + len = slen - n; /* default len: all bytes that are available. */ + +--- 12646,12659 ---- + int slen; + int error = FALSE; + +! p = tv_get_string(&argvars[0]); + slen = (int)STRLEN(p); + +! n = (int)tv_get_number_chk(&argvars[1], &error); + if (error) + len = 0; + else if (argvars[2].v_type != VAR_UNKNOWN) +! len = (int)tv_get_number(&argvars[2]); + else + len = slen - n; /* default len: all bytes that are available. */ + +*************** +*** 12690,12697 **** + char_u *lastmatch = NULL; + int haystack_len, end_idx; + +! needle = get_tv_string_chk(&argvars[1]); +! haystack = get_tv_string_buf_chk(&argvars[0], buf); + + rettv->vval.v_number = -1; + if (needle == NULL || haystack == NULL) +--- 12690,12697 ---- + char_u *lastmatch = NULL; + int haystack_len, end_idx; + +! needle = tv_get_string_chk(&argvars[1]); +! haystack = tv_get_string_buf_chk(&argvars[0], buf); + + rettv->vval.v_number = -1; + if (needle == NULL || haystack == NULL) +*************** +*** 12701,12707 **** + if (argvars[2].v_type != VAR_UNKNOWN) + { + /* Third argument: upper limit for index */ +! end_idx = (int)get_tv_number_chk(&argvars[2], NULL); + if (end_idx < 0) + return; /* can never find a match */ + } +--- 12701,12707 ---- + if (argvars[2].v_type != VAR_UNKNOWN) + { + /* Third argument: upper limit for index */ +! end_idx = (int)tv_get_number_chk(&argvars[2], NULL); + if (end_idx < 0) + return; /* can never find a match */ + } +*************** +*** 12737,12743 **** + f_strtrans(typval_T *argvars, typval_T *rettv) + { + rettv->v_type = VAR_STRING; +! rettv->vval.v_string = transstr(get_tv_string(&argvars[0])); + } + + /* +--- 12737,12743 ---- + f_strtrans(typval_T *argvars, typval_T *rettv) + { + rettv->v_type = VAR_STRING; +! rettv->vval.v_string = transstr(tv_get_string(&argvars[0])); + } + + /* +*************** +*** 12750,12756 **** + int no; + int retList = 0; + +! no = (int)get_tv_number_chk(&argvars[0], &error); + if (error) + return; + if (no < 0 || no >= NSUBEXP) +--- 12750,12756 ---- + int no; + int retList = 0; + +! no = (int)tv_get_number_chk(&argvars[0], &error); + if (error) + return; + if (no < 0 || no >= NSUBEXP) +*************** +*** 12759,12765 **** + return; + } + if (argvars[1].v_type != VAR_UNKNOWN) +! retList = (int)get_tv_number_chk(&argvars[1], &error); + if (error) + return; + +--- 12759,12765 ---- + return; + } + if (argvars[1].v_type != VAR_UNKNOWN) +! retList = (int)tv_get_number_chk(&argvars[1], &error); + if (error) + return; + +*************** +*** 12785,12800 **** + char_u subbuf[NUMBUFLEN]; + char_u flagsbuf[NUMBUFLEN]; + +! char_u *str = get_tv_string_chk(&argvars[0]); +! char_u *pat = get_tv_string_buf_chk(&argvars[1], patbuf); + char_u *sub = NULL; + typval_T *expr = NULL; +! char_u *flg = get_tv_string_buf_chk(&argvars[3], flagsbuf); + + if (argvars[2].v_type == VAR_FUNC || argvars[2].v_type == VAR_PARTIAL) + expr = &argvars[2]; + else +! sub = get_tv_string_buf_chk(&argvars[2], subbuf); + + rettv->v_type = VAR_STRING; + if (str == NULL || pat == NULL || (sub == NULL && expr == NULL) +--- 12785,12800 ---- + char_u subbuf[NUMBUFLEN]; + char_u flagsbuf[NUMBUFLEN]; + +! char_u *str = tv_get_string_chk(&argvars[0]); +! char_u *pat = tv_get_string_buf_chk(&argvars[1], patbuf); + char_u *sub = NULL; + typval_T *expr = NULL; +! char_u *flg = tv_get_string_buf_chk(&argvars[3], flagsbuf); + + if (argvars[2].v_type == VAR_FUNC || argvars[2].v_type == VAR_PARTIAL) + expr = &argvars[2]; + else +! sub = tv_get_string_buf_chk(&argvars[2], subbuf); + + rettv->v_type = VAR_STRING; + if (str == NULL || pat == NULL || (sub == NULL && expr == NULL) +*************** +*** 12811,12817 **** + f_swapinfo(typval_T *argvars, typval_T *rettv) + { + if (rettv_dict_alloc(rettv) == OK) +! get_b0_dict(get_tv_string(argvars), rettv->vval.v_dict); + } + + /* +--- 12811,12817 ---- + f_swapinfo(typval_T *argvars, typval_T *rettv) + { + if (rettv_dict_alloc(rettv) == OK) +! get_b0_dict(tv_get_string(argvars), rettv->vval.v_dict); + } + + /* +*************** +*** 12844,12852 **** + int trans; + int transerr = FALSE; + +! lnum = get_tv_lnum(argvars); /* -1 on type error */ +! col = (linenr_T)get_tv_number(&argvars[1]) - 1; /* -1 on type error */ +! trans = (int)get_tv_number_chk(&argvars[2], &transerr); + + if (!transerr && lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count + && col >= 0 && col < (long)STRLEN(ml_get(lnum))) +--- 12844,12852 ---- + int trans; + int transerr = FALSE; + +! lnum = tv_get_lnum(argvars); /* -1 on type error */ +! col = (linenr_T)tv_get_number(&argvars[1]) - 1; /* -1 on type error */ +! trans = (int)tv_get_number_chk(&argvars[2], &transerr); + + if (!transerr && lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count + && col >= 0 && col < (long)STRLEN(ml_get(lnum))) +*************** +*** 12870,12880 **** + char_u modebuf[NUMBUFLEN]; + int modec; + +! id = (int)get_tv_number(&argvars[0]); +! what = get_tv_string(&argvars[1]); + if (argvars[2].v_type != VAR_UNKNOWN) + { +! mode = get_tv_string_buf(&argvars[2], modebuf); + modec = TOLOWER_ASC(mode[0]); + if (modec != 't' && modec != 'c' && modec != 'g') + modec = 0; /* replace invalid with current */ +--- 12870,12880 ---- + char_u modebuf[NUMBUFLEN]; + int modec; + +! id = (int)tv_get_number(&argvars[0]); +! what = tv_get_string(&argvars[1]); + if (argvars[2].v_type != VAR_UNKNOWN) + { +! mode = tv_get_string_buf(&argvars[2], modebuf); + modec = TOLOWER_ASC(mode[0]); + if (modec != 't' && modec != 'c' && modec != 'g') + modec = 0; /* replace invalid with current */ +*************** +*** 12957,12963 **** + int id; + + #ifdef FEAT_SYN_HL +! id = (int)get_tv_number(&argvars[0]); + + if (id > 0) + id = syn_get_final_id(id); +--- 12957,12963 ---- + int id; + + #ifdef FEAT_SYN_HL +! id = (int)tv_get_number(&argvars[0]); + + if (id > 0) + id = syn_get_final_id(id); +*************** +*** 12986,12993 **** + rettv_list_set(rettv, NULL); + + #if defined(FEAT_SYN_HL) && defined(FEAT_CONCEAL) +! lnum = get_tv_lnum(argvars); /* -1 on type error */ +! col = (colnr_T)get_tv_number(&argvars[1]) - 1; /* -1 on type error */ + + vim_memset(str, NUL, sizeof(str)); + +--- 12986,12993 ---- + rettv_list_set(rettv, NULL); + + #if defined(FEAT_SYN_HL) && defined(FEAT_CONCEAL) +! lnum = tv_get_lnum(argvars); /* -1 on type error */ +! col = (colnr_T)tv_get_number(&argvars[1]) - 1; /* -1 on type error */ + + vim_memset(str, NUL, sizeof(str)); + +*************** +*** 13043,13050 **** + rettv_list_set(rettv, NULL); + + #ifdef FEAT_SYN_HL +! lnum = get_tv_lnum(argvars); /* -1 on type error */ +! col = (colnr_T)get_tv_number(&argvars[1]) - 1; /* -1 on type error */ + + if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count + && col >= 0 && col <= (long)STRLEN(ml_get(lnum)) +--- 13043,13050 ---- + rettv_list_set(rettv, NULL); + + #ifdef FEAT_SYN_HL +! lnum = tv_get_lnum(argvars); /* -1 on type error */ +! col = (colnr_T)tv_get_number(&argvars[1]) - 1; /* -1 on type error */ + + if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count + && col >= 0 && col <= (long)STRLEN(ml_get(lnum)) +*************** +*** 13138,13144 **** + size_t len; + char_u buf[NUMBUFLEN]; + +! p = get_tv_string_buf_chk(&argvars[1], buf); + if (p == NULL) + { + fclose(fd); +--- 13138,13144 ---- + size_t len; + char_u buf[NUMBUFLEN]; + +! p = tv_get_string_buf_chk(&argvars[1], buf); + if (p == NULL) + { + fclose(fd); +*************** +*** 13171,13177 **** + char_u *end; + int i; + +! res = get_cmd_output(get_tv_string(&argvars[0]), infile, flags, &len); + if (res == NULL) + goto errret; + +--- 13171,13177 ---- + char_u *end; + int i; + +! res = get_cmd_output(tv_get_string(&argvars[0]), infile, flags, &len); + if (res == NULL) + goto errret; + +*************** +*** 13211,13217 **** + } + else + { +! res = get_cmd_output(get_tv_string(&argvars[0]), infile, flags, NULL); + #ifdef USE_CR + /* translate <CR> into <NL> */ + if (res != NULL) +--- 13211,13217 ---- + } + else + { +! res = get_cmd_output(tv_get_string(&argvars[0]), infile, flags, NULL); + #ifdef USE_CR + /* translate <CR> into <NL> */ + if (res != NULL) +*************** +*** 13289,13295 **** + wp = firstwin; + else + { +! tp = find_tabpage((int)get_tv_number(&argvars[0])); + if (tp != NULL) + wp = (tp == curtab) ? firstwin : tp->tp_firstwin; + } +--- 13289,13295 ---- + wp = firstwin; + else + { +! tp = find_tabpage((int)tv_get_number(&argvars[0])); + if (tp != NULL) + wp = (tp == curtab) ? firstwin : tp->tp_firstwin; + } +*************** +*** 13313,13319 **** + + if (argvars[0].v_type != VAR_UNKNOWN) + { +! arg = get_tv_string_chk(&argvars[0]); + nr = 0; + if (arg != NULL) + { +--- 13313,13319 ---- + + if (argvars[0].v_type != VAR_UNKNOWN) + { +! arg = tv_get_string_chk(&argvars[0]); + nr = 0; + if (arg != NULL) + { +*************** +*** 13343,13349 **** + twin = (tp == curtab) ? curwin : tp->tp_curwin; + if (argvar->v_type != VAR_UNKNOWN) + { +! arg = get_tv_string_chk(argvar); + if (arg == NULL) + nr = 0; /* type error; errmsg already given */ + else if (STRCMP(arg, "$") == 0) +--- 13343,13349 ---- + twin = (tp == curtab) ? curwin : tp->tp_curwin; + if (argvar->v_type != VAR_UNKNOWN) + { +! arg = tv_get_string_chk(argvar); + if (arg == NULL) + nr = 0; /* type error; errmsg already given */ + else if (STRCMP(arg, "$") == 0) +*************** +*** 13385,13391 **** + int nr = 1; + tabpage_T *tp; + +! tp = find_tabpage((int)get_tv_number(&argvars[0])); + if (tp == NULL) + nr = 0; + else +--- 13385,13391 ---- + int nr = 1; + tabpage_T *tp; + +! tp = find_tabpage((int)tv_get_number(&argvars[0])); + if (tp == NULL) + nr = 0; + else +*************** +*** 13426,13439 **** + char_u *fname = NULL; + char_u *tag_pattern; + +! tag_pattern = get_tv_string(&argvars[0]); + + rettv->vval.v_number = FALSE; + if (*tag_pattern == NUL) + return; + + if (argvars[1].v_type != VAR_UNKNOWN) +! fname = get_tv_string(&argvars[1]); + if (rettv_list_alloc(rettv) == OK) + (void)get_tags(rettv->vval.v_list, tag_pattern, fname); + } +--- 13426,13439 ---- + char_u *fname = NULL; + char_u *tag_pattern; + +! tag_pattern = tv_get_string(&argvars[0]); + + rettv->vval.v_number = FALSE; + if (*tag_pattern == NUL) + return; + + if (argvars[1].v_type != VAR_UNKNOWN) +! fname = tv_get_string(&argvars[1]); + if (rettv_list_alloc(rettv) == OK) + (void)get_tags(rettv->vval.v_list, tag_pattern, fname); + } +*************** +*** 13544,13550 **** + f_test_feedinput(typval_T *argvars, typval_T *rettv UNUSED) + { + #ifdef USE_INPUT_BUF +! char_u *val = get_tv_string_chk(&argvars[0]); + + if (val != NULL) + { +--- 13544,13550 ---- + f_test_feedinput(typval_T *argvars, typval_T *rettv UNUSED) + { + #ifdef USE_INPUT_BUF +! char_u *val = tv_get_string_chk(&argvars[0]); + + if (val != NULL) + { +*************** +*** 13566,13572 **** + EMSG(_(e_invarg)); + else + { +! name = get_tv_string(&argvars[0]); + if (reset_option_was_set(name) == FAIL) + EMSG2(_(e_invarg2), name); + } +--- 13566,13572 ---- + EMSG(_(e_invarg)); + else + { +! name = tv_get_string(&argvars[0]); + if (reset_option_was_set(name) == FAIL) + EMSG2(_(e_invarg2), name); + } +*************** +*** 13587,13594 **** + EMSG(_(e_invarg)); + else + { +! name = get_tv_string_chk(&argvars[0]); +! val = (int)get_tv_number(&argvars[1]); + + if (STRCMP(name, (char_u *)"redraw") == 0) + disable_redraw_for_testing = val; +--- 13587,13594 ---- + EMSG(_(e_invarg)); + else + { +! name = tv_get_string_chk(&argvars[0]); +! val = (int)tv_get_number(&argvars[1]); + + if (STRCMP(name, (char_u *)"redraw") == 0) + disable_redraw_for_testing = val; +*************** +*** 13646,13652 **** + static void + f_test_ignore_error(typval_T *argvars, typval_T *rettv UNUSED) + { +! ignore_error_for_testing(get_tv_string(&argvars[0])); + } + + #ifdef FEAT_JOB_CHANNEL +--- 13646,13652 ---- + static void + f_test_ignore_error(typval_T *argvars, typval_T *rettv UNUSED) + { +! ignore_error_for_testing(tv_get_string(&argvars[0])); + } + + #ifdef FEAT_JOB_CHANNEL +*************** +*** 13709,13717 **** + EMSG(_(e_invarg)); + return; + } +! which = get_tv_string(&argvars[0]); +! value = get_tv_number(&argvars[1]); +! dragging = get_tv_number(&argvars[2]); + + if (STRCMP(which, "left") == 0) + sb = &curwin->w_scrollbars[SBAR_LEFT]; +--- 13709,13717 ---- + EMSG(_(e_invarg)); + return; + } +! which = tv_get_string(&argvars[0]); +! value = tv_get_number(&argvars[1]); +! dragging = tv_get_number(&argvars[2]); + + if (STRCMP(which, "left") == 0) + sb = &curwin->w_scrollbars[SBAR_LEFT]; +*************** +*** 13735,13741 **** + static void + f_test_settime(typval_T *argvars, typval_T *rettv UNUSED) + { +! time_for_testing = (time_t)get_tv_number(&argvars[0]); + } + + #if defined(FEAT_JOB_CHANNEL) || defined(FEAT_TIMERS) || defined(PROTO) +--- 13735,13741 ---- + static void + f_test_settime(typval_T *argvars, typval_T *rettv UNUSED) + { +! time_for_testing = (time_t)tv_get_number(&argvars[0]); + } + + #if defined(FEAT_JOB_CHANNEL) || defined(FEAT_TIMERS) || defined(PROTO) +*************** +*** 13798,13804 **** + EMSG(_(e_number_exp)); + else + { +! timer = find_timer((int)get_tv_number(&argvars[0])); + if (timer != NULL) + add_timer_info(rettv, timer); + } +--- 13798,13804 ---- + EMSG(_(e_number_exp)); + else + { +! timer = find_timer((int)tv_get_number(&argvars[0])); + if (timer != NULL) + add_timer_info(rettv, timer); + } +*************** +*** 13814,13826 **** + f_timer_pause(typval_T *argvars, typval_T *rettv UNUSED) + { + timer_T *timer = NULL; +! int paused = (int)get_tv_number(&argvars[1]); + + if (argvars[0].v_type != VAR_NUMBER) + EMSG(_(e_number_exp)); + else + { +! timer = find_timer((int)get_tv_number(&argvars[0])); + if (timer != NULL) + timer->tr_paused = paused; + } +--- 13814,13826 ---- + f_timer_pause(typval_T *argvars, typval_T *rettv UNUSED) + { + timer_T *timer = NULL; +! int paused = (int)tv_get_number(&argvars[1]); + + if (argvars[0].v_type != VAR_NUMBER) + EMSG(_(e_number_exp)); + else + { +! timer = find_timer((int)tv_get_number(&argvars[0])); + if (timer != NULL) + timer->tr_paused = paused; + } +*************** +*** 13832,13838 **** + static void + f_timer_start(typval_T *argvars, typval_T *rettv) + { +! long msec = (long)get_tv_number(&argvars[0]); + timer_T *timer; + int repeat = 0; + char_u *callback; +--- 13832,13838 ---- + static void + f_timer_start(typval_T *argvars, typval_T *rettv) + { +! long msec = (long)tv_get_number(&argvars[0]); + timer_T *timer; + int repeat = 0; + char_u *callback; +*************** +*** 13847,13853 **** + if (argvars[2].v_type != VAR_DICT + || (dict = argvars[2].vval.v_dict) == NULL) + { +! EMSG2(_(e_invarg2), get_tv_string(&argvars[2])); + return; + } + if (dict_find(dict, (char_u *)"repeat", -1) != NULL) +--- 13847,13853 ---- + if (argvars[2].v_type != VAR_DICT + || (dict = argvars[2].vval.v_dict) == NULL) + { +! EMSG2(_(e_invarg2), tv_get_string(&argvars[2])); + return; + } + if (dict_find(dict, (char_u *)"repeat", -1) != NULL) +*************** +*** 13886,13892 **** + EMSG(_(e_number_exp)); + return; + } +! timer = find_timer((int)get_tv_number(&argvars[0])); + if (timer != NULL) + stop_timer(timer); + } +--- 13886,13892 ---- + EMSG(_(e_number_exp)); + return; + } +! timer = find_timer((int)tv_get_number(&argvars[0])); + if (timer != NULL) + stop_timer(timer); + } +*************** +*** 13908,13914 **** + f_tolower(typval_T *argvars, typval_T *rettv) + { + rettv->v_type = VAR_STRING; +! rettv->vval.v_string = strlow_save(get_tv_string(&argvars[0])); + } + + /* +--- 13908,13914 ---- + f_tolower(typval_T *argvars, typval_T *rettv) + { + rettv->v_type = VAR_STRING; +! rettv->vval.v_string = strlow_save(tv_get_string(&argvars[0])); + } + + /* +*************** +*** 13918,13924 **** + f_toupper(typval_T *argvars, typval_T *rettv) + { + rettv->v_type = VAR_STRING; +! rettv->vval.v_string = strup_save(get_tv_string(&argvars[0])); + } + + /* +--- 13918,13924 ---- + f_toupper(typval_T *argvars, typval_T *rettv) + { + rettv->v_type = VAR_STRING; +! rettv->vval.v_string = strup_save(tv_get_string(&argvars[0])); + } + + /* +*************** +*** 13944,13952 **** + char_u buf2[NUMBUFLEN]; + garray_T ga; + +! in_str = get_tv_string(&argvars[0]); +! fromstr = get_tv_string_buf_chk(&argvars[1], buf); +! tostr = get_tv_string_buf_chk(&argvars[2], buf2); + + /* Default return value: empty string. */ + rettv->v_type = VAR_STRING; +--- 13944,13952 ---- + char_u buf2[NUMBUFLEN]; + garray_T ga; + +! in_str = tv_get_string(&argvars[0]); +! fromstr = tv_get_string_buf_chk(&argvars[1], buf); +! tostr = tv_get_string_buf_chk(&argvars[2], buf2); + + /* Default return value: empty string. */ + rettv->v_type = VAR_STRING; +*************** +*** 14050,14056 **** + { + char_u buf1[NUMBUFLEN]; + char_u buf2[NUMBUFLEN]; +! char_u *head = get_tv_string_buf_chk(&argvars[0], buf1); + char_u *mask = NULL; + char_u *tail; + char_u *prev; +--- 14050,14056 ---- + { + char_u buf1[NUMBUFLEN]; + char_u buf2[NUMBUFLEN]; +! char_u *head = tv_get_string_buf_chk(&argvars[0], buf1); + char_u *mask = NULL; + char_u *tail; + char_u *prev; +*************** +*** 14065,14071 **** + } + + if (argvars[1].v_type == VAR_STRING) +! mask = get_tv_string_buf_chk(&argvars[1], buf2); + + while (*head != NUL) + { +--- 14065,14071 ---- + } + + if (argvars[1].v_type == VAR_STRING) +! mask = tv_get_string_buf_chk(&argvars[1], buf2); + + while (*head != NUL) + { +*************** +*** 14169,14175 **** + rettv->v_type = VAR_STRING; + #ifdef FEAT_PERSISTENT_UNDO + { +! char_u *fname = get_tv_string(&argvars[0]); + + if (*fname == NUL) + { +--- 14169,14175 ---- + rettv->v_type = VAR_STRING; + #ifdef FEAT_PERSISTENT_UNDO + { +! char_u *fname = tv_get_string(&argvars[0]); + + if (*fname == NUL) + { +*************** +*** 14332,14338 **** + tp = curtab; + else + { +! tp = find_tabpage((int)get_tv_number(&argvars[0])); + if (tp == NULL) + return; + } +--- 14332,14338 ---- + tp = curtab; + else + { +! tp = find_tabpage((int)tv_get_number(&argvars[0])); + if (tp == NULL) + return; + } +*************** +*** 14525,14536 **** + if (list == NULL) + return; + for (li = list->lv_first; li != NULL; li = li->li_next) +! if (get_tv_string_chk(&li->li_tv) == NULL) + return; + + if (argvars[2].v_type != VAR_UNKNOWN) + { +! char_u *arg2 = get_tv_string_chk(&argvars[2]); + + if (arg2 == NULL) + return; +--- 14525,14536 ---- + if (list == NULL) + return; + for (li = list->lv_first; li != NULL; li = li->li_next) +! if (tv_get_string_chk(&li->li_tv) == NULL) + return; + + if (argvars[2].v_type != VAR_UNKNOWN) + { +! char_u *arg2 = tv_get_string_chk(&argvars[2]); + + if (arg2 == NULL) + return; +*************** +*** 14546,14552 **** + #endif + } + +! fname = get_tv_string_chk(&argvars[1]); + if (fname == NULL) + return; + +--- 14546,14552 ---- + #endif + } + +! fname = tv_get_string_chk(&argvars[1]); + if (fname == NULL) + return; + +*************** +*** 14580,14587 **** + static void + f_xor(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL) +! ^ get_tv_number_chk(&argvars[1], NULL); + } + + #endif /* FEAT_EVAL */ +--- 14580,14587 ---- + static void + f_xor(typval_T *argvars, typval_T *rettv) + { +! rettv->vval.v_number = tv_get_number_chk(&argvars[0], NULL) +! ^ tv_get_number_chk(&argvars[1], NULL); + } + + #endif /* FEAT_EVAL */ +*** ../vim-8.1.0614/src/list.c 2018-12-21 15:16:57.479579788 +0100 +--- src/list.c 2018-12-21 15:52:39.696996337 +0100 +*************** +*** 403,409 **** + *errorp = TRUE; + return -1L; + } +! return (long)get_tv_number_chk(&li->li_tv, errorp); + } + + /* +--- 403,409 ---- + *errorp = TRUE; + return -1L; + } +! return (long)tv_get_number_chk(&li->li_tv, errorp); + } + + /* +*************** +*** 420,426 **** + EMSGN(_(e_listidx), idx); + return NULL; + } +! return get_tv_string(&li->li_tv); + } + + /* +--- 420,426 ---- + EMSGN(_(e_listidx), idx); + return NULL; + } +! return tv_get_string(&li->li_tv); + } + + /* +*************** +*** 949,955 **** + + for (li = list->lv_first; li != NULL; li = li->li_next) + { +! for (s = get_tv_string(&li->li_tv); *s != NUL; ++s) + { + if (*s == '\n') + c = putc(NUL, fd); +--- 949,955 ---- + + for (li = list->lv_first; li != NULL; li = li->li_next) + { +! for (s = tv_get_string(&li->li_tv); *s != NUL; ++s) + { + if (*s == '\n') + c = putc(NUL, fd); +*** ../vim-8.1.0614/src/message.c 2018-11-28 20:38:34.560273411 +0100 +--- src/message.c 2018-12-21 16:00:44.977851866 +0100 +*************** +*** 4137,4143 **** + else + { + ++*idxp; +! n = get_tv_number_chk(&tvs[idx], &err); + if (err) + n = 0; + } +--- 4137,4143 ---- + else + { + ++*idxp; +! n = tv_get_number_chk(&tvs[idx], &err); + if (err) + n = 0; + } +*************** +*** 4146,4152 **** + + /* + * Get string argument from "idxp" entry in "tvs". First entry is 1. +! * If "tofree" is NULL get_tv_string_chk() is used. Some types (e.g. List) + * are not converted to a string. + * If "tofree" is not NULL echo_string() is used. All types are converted to + * a string with the same format as ":echo". The caller must free "*tofree". +--- 4146,4152 ---- + + /* + * Get string argument from "idxp" entry in "tvs". First entry is 1. +! * If "tofree" is NULL tv_get_string_chk() is used. Some types (e.g. List) + * are not converted to a string. + * If "tofree" is not NULL echo_string() is used. All types are converted to + * a string with the same format as ":echo". The caller must free "*tofree". +*************** +*** 4167,4173 **** + if (tofree != NULL) + s = (char *)echo_string(&tvs[idx], tofree, numbuf, get_copyID()); + else +! s = (char *)get_tv_string_chk(&tvs[idx]); + } + return s; + } +--- 4167,4173 ---- + if (tofree != NULL) + s = (char *)echo_string(&tvs[idx], tofree, numbuf, get_copyID()); + else +! s = (char *)tv_get_string_chk(&tvs[idx]); + } + return s; + } +*** ../vim-8.1.0614/src/tag.c 2018-12-14 15:38:28.331597637 +0100 +--- src/tag.c 2018-12-21 15:46:40.487262414 +0100 +*************** +*** 4212,4218 **** + } + + if ((di = dict_find(d, (char_u *)"curidx", -1)) != NULL) +! tagstack_set_curidx(wp, (int)get_tv_number(&di->di_tv) - 1); + + return OK; + } +--- 4212,4218 ---- + } + + if ((di = dict_find(d, (char_u *)"curidx", -1)) != NULL) +! tagstack_set_curidx(wp, (int)tv_get_number(&di->di_tv) - 1); + + return OK; + } +*** ../vim-8.1.0614/src/terminal.c 2018-12-20 20:47:28.462655566 +0100 +--- src/terminal.c 2018-12-21 16:01:24.609588053 +0100 +*************** +*** 496,502 **** + else if (argvar->v_type != VAR_LIST + || argvar->vval.v_list == NULL + || argvar->vval.v_list->lv_len < 1 +! || (cmd = get_tv_string_chk( + &argvar->vval.v_list->lv_first->li_tv)) == NULL) + cmd = (char_u*)""; + +--- 496,502 ---- + else if (argvar->v_type != VAR_LIST + || argvar->vval.v_list == NULL + || argvar->vval.v_list->lv_len < 1 +! || (cmd = tv_get_string_chk( + &argvar->vval.v_list->lv_first->li_tv)) == NULL) + cmd = (char_u*)""; + +*************** +*** 569,575 **** + for (item = argvar->vval.v_list->lv_first; + item != NULL; item = item->li_next) + { +! char_u *s = get_tv_string_chk(&item->li_tv); + char_u *p; + + if (s == NULL) +--- 569,575 ---- + for (item = argvar->vval.v_list->lv_first; + item != NULL; item = item->li_next) + { +! char_u *s = tv_get_string_chk(&item->li_tv); + char_u *p; + + if (s == NULL) +*************** +*** 1913,1919 **** + type = get_reg_type(c, ®len); + for (item = l->lv_first; item != NULL; item = item->li_next) + { +! char_u *s = get_tv_string(&item->li_tv); + #ifdef WIN3264 + char_u *tmp = s; + +--- 1913,1919 ---- + type = get_reg_type(c, ®len); + for (item = l->lv_first; item != NULL; item = item->li_next) + { +! char_u *s = tv_get_string(&item->li_tv); + #ifdef WIN3264 + char_u *tmp = s; + +*************** +*** 3455,3461 **** + char_u *color_name; + guicolor_T guicolor; + +! color_name = get_tv_string_chk(&li->li_tv); + if (color_name == NULL) + return FAIL; + +--- 3455,3461 ---- + char_u *color_name; + guicolor_T guicolor; + +! color_name = tv_get_string_chk(&li->li_tv); + if (color_name == NULL) + return FAIL; + +*************** +*** 3497,3503 **** + static void + handle_drop_command(listitem_T *item) + { +! char_u *fname = get_tv_string(&item->li_tv); + listitem_T *opt_item = item->li_next; + int bufnr; + win_T *wp; +--- 3497,3503 ---- + static void + handle_drop_command(listitem_T *item) + { +! char_u *fname = tv_get_string(&item->li_tv); + listitem_T *opt_item = item->li_next; + int bufnr; + win_T *wp; +*************** +*** 3589,3595 **** + ch_log(channel, "Missing function arguments for call"); + return; + } +! func = get_tv_string(&item->li_tv); + + if (STRNCMP(func, "Tapi_", 5) != 0) + { +--- 3589,3595 ---- + ch_log(channel, "Missing function arguments for call"); + return; + } +! func = tv_get_string(&item->li_tv); + + if (STRNCMP(func, "Tapi_", 5) != 0) + { +*************** +*** 3645,3651 **** + ch_log(channel, "Missing command"); + else + { +! char_u *cmd = get_tv_string(&item->li_tv); + + /* Make sure an invoked command doesn't delete the buffer (and the + * terminal) under our fingers. */ +--- 3645,3651 ---- + ch_log(channel, "Missing command"); + else + { +! char_u *cmd = tv_get_string(&item->li_tv); + + /* Make sure an invoked command doesn't delete the buffer (and the + * terminal) under our fingers. */ +*************** +*** 3826,3832 **** + { + buf_T *buf; + +! (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */ + ++emsg_off; + buf = get_buf_tv(&argvars[0], FALSE); + --emsg_off; +--- 3826,3832 ---- + { + buf_T *buf; + +! (void)tv_get_number(&argvars[0]); /* issue errmsg if type error */ + ++emsg_off; + buf = get_buf_tv(&argvars[0], FALSE); + --emsg_off; +*************** +*** 3921,3927 **** + } + } + +! fname = get_tv_string_chk(&argvars[1]); + if (fname == NULL) + return; + if (mch_stat((char *)fname, &st) >= 0) +--- 3921,3927 ---- + } + } + +! fname = tv_get_string_chk(&argvars[1]); + if (fname == NULL) + return; + if (mch_stat((char *)fname, &st) >= 0) +*************** +*** 4370,4378 **** + char_u *textline = NULL; + + /* First open the files. If this fails bail out. */ +! fname1 = get_tv_string_buf_chk(&argvars[0], buf1); + if (do_diff) +! fname2 = get_tv_string_buf_chk(&argvars[1], buf2); + if (fname1 == NULL || (do_diff && fname2 == NULL)) + { + EMSG(_(e_invarg)); +--- 4370,4378 ---- + char_u *textline = NULL; + + /* First open the files. If this fails bail out. */ +! fname1 = tv_get_string_buf_chk(&argvars[0], buf1); + if (do_diff) +! fname2 = tv_get_string_buf_chk(&argvars[1], buf2); + if (fname1 == NULL || (do_diff && fname2 == NULL)) + { + EMSG(_(e_invarg)); +*************** +*** 4740,4747 **** + {"reverse", HL_INVERSE}, + }; + +! attr = get_tv_number(&argvars[0]); +! name = get_tv_string_chk(&argvars[1]); + if (name == NULL) + return; + +--- 4740,4747 ---- + {"reverse", HL_INVERSE}, + }; + +! attr = tv_get_number(&argvars[0]); +! name = tv_get_string_chk(&argvars[1]); + if (name == NULL) + return; + +*************** +*** 4811,4817 **** + && tv->vval.v_string != NULL + && STRCMP(tv->vval.v_string, ".") == 0) + return term->tl_cursor_pos.row; +! return (int)get_tv_number(tv) - 1; + } + + /* +--- 4811,4817 ---- + && tv->vval.v_string != NULL + && STRCMP(tv->vval.v_string, ".") == 0) + return term->tl_cursor_pos.row; +! return (int)tv_get_number(tv) - 1; + } + + /* +*************** +*** 4911,4919 **** + if (buf->b_term->tl_vterm == NULL) + return; + term = buf->b_term; +! rows = get_tv_number(&argvars[1]); + rows = rows <= 0 ? term->tl_rows : rows; +! cols = get_tv_number(&argvars[2]); + cols = cols <= 0 ? term->tl_cols : cols; + vterm_set_size(term->tl_vterm, rows, cols); + /* handle_resize() will resize the windows */ +--- 4911,4919 ---- + if (buf->b_term->tl_vterm == NULL) + return; + term = buf->b_term; +! rows = tv_get_number(&argvars[1]); + rows = rows <= 0 ? term->tl_rows : rows; +! cols = tv_get_number(&argvars[2]); + cols = cols <= 0 ? term->tl_cols : cols; + vterm_set_size(term->tl_vterm, rows, cols); + /* handle_resize() will resize the windows */ +*************** +*** 4977,4983 **** + if (buf == NULL) + return; + if (argvars[1].v_type != VAR_UNKNOWN) +! num = get_tv_number(&argvars[1]); + + switch (num) + { +--- 4977,4983 ---- + if (buf == NULL) + return; + if (argvars[1].v_type != VAR_UNKNOWN) +! num = tv_get_number(&argvars[1]); + + switch (num) + { +*************** +*** 4990,4996 **** + p = buf->b_term->tl_job->jv_tty_in; + break; + default: +! EMSG2(_(e_invarg2), get_tv_string(&argvars[1])); + return; + } + if (p != NULL) +--- 4990,4996 ---- + p = buf->b_term->tl_job->jv_tty_in; + break; + default: +! EMSG2(_(e_invarg2), tv_get_string(&argvars[1])); + return; + } + if (p != NULL) +*************** +*** 5139,5145 **** + if (buf == NULL) + return; + +! msg = get_tv_string_chk(&argvars[1]); + if (msg == NULL) + return; + term = buf->b_term; +--- 5139,5145 ---- + if (buf == NULL) + return; + +! msg = tv_get_string_chk(&argvars[1]); + if (msg == NULL) + return; + term = buf->b_term; +*************** +*** 5241,5247 **** + return; + term = buf->b_term; + vim_free(term->tl_command); +! cmd = get_tv_string_chk(&argvars[1]); + if (cmd != NULL) + term->tl_command = vim_strsave(cmd); + else +--- 5241,5247 ---- + return; + term = buf->b_term; + vim_free(term->tl_command); +! cmd = tv_get_string_chk(&argvars[1]); + if (cmd != NULL) + term->tl_command = vim_strsave(cmd); + else +*************** +*** 5263,5269 **** + return; + term = buf->b_term; + vim_free(term->tl_kill); +! how = get_tv_string_chk(&argvars[1]); + if (how != NULL) + term->tl_kill = vim_strsave(how); + else +--- 5263,5269 ---- + return; + term = buf->b_term; + vim_free(term->tl_kill); +! how = tv_get_string_chk(&argvars[1]); + if (how != NULL) + term->tl_kill = vim_strsave(how); + else +*************** +*** 5347,5353 **** + + /* Wait for some time for any channel I/O. */ + if (argvars[1].v_type != VAR_UNKNOWN) +! wait = get_tv_number(&argvars[1]); + ui_delay(wait, TRUE); + mch_check_messages(); + +--- 5347,5353 ---- + + /* Wait for some time for any channel I/O. */ + if (argvars[1].v_type != VAR_UNKNOWN) +! wait = tv_get_number(&argvars[1]); + ui_delay(wait, TRUE); + mch_check_messages(); + +*** ../vim-8.1.0614/src/textprop.c 2018-12-16 14:37:35.845271247 +0100 +--- src/textprop.c 2018-12-21 15:53:27.052698970 +0100 +*************** +*** 154,161 **** + textprop_T tmp_prop; + int i; + +! lnum = get_tv_number(&argvars[0]); +! col = get_tv_number(&argvars[1]); + if (col < 1) + { + EMSGN(_(e_invalid_col), (long)col); +--- 154,161 ---- + textprop_T tmp_prop; + int i; + +! lnum = tv_get_number(&argvars[0]); +! col = tv_get_number(&argvars[1]); + if (col < 1) + { + EMSGN(_(e_invalid_col), (long)col); +*************** +*** 352,365 **** + void + f_prop_clear(typval_T *argvars, typval_T *rettv UNUSED) + { +! linenr_T start = get_tv_number(&argvars[0]); + linenr_T end = start; + linenr_T lnum; + buf_T *buf = curbuf; + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! end = get_tv_number(&argvars[1]); + if (argvars[2].v_type != VAR_UNKNOWN) + { + if (get_bufnr_from_arg(&argvars[2], &buf) == FAIL) +--- 352,365 ---- + void + f_prop_clear(typval_T *argvars, typval_T *rettv UNUSED) + { +! linenr_T start = tv_get_number(&argvars[0]); + linenr_T end = start; + linenr_T lnum; + buf_T *buf = curbuf; + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! end = tv_get_number(&argvars[1]); + if (argvars[2].v_type != VAR_UNKNOWN) + { + if (get_bufnr_from_arg(&argvars[2], &buf) == FAIL) +*************** +*** 405,411 **** + void + f_prop_list(typval_T *argvars, typval_T *rettv) + { +! linenr_T lnum = get_tv_number(&argvars[0]); + buf_T *buf = curbuf; + + if (argvars[1].v_type != VAR_UNKNOWN) +--- 405,411 ---- + void + f_prop_list(typval_T *argvars, typval_T *rettv) + { +! linenr_T lnum = tv_get_number(&argvars[0]); + buf_T *buf = curbuf; + + if (argvars[1].v_type != VAR_UNKNOWN) +*************** +*** 476,485 **** + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! start = get_tv_number(&argvars[1]); + end = start; + if (argvars[2].v_type != VAR_UNKNOWN) +! end = get_tv_number(&argvars[2]); + if (start < 1 || end < 1) + { + EMSG(_(e_invrange)); +--- 476,485 ---- + + if (argvars[1].v_type != VAR_UNKNOWN) + { +! start = tv_get_number(&argvars[1]); + end = start; + if (argvars[2].v_type != VAR_UNKNOWN) +! end = tv_get_number(&argvars[2]); + if (start < 1 || end < 1) + { + EMSG(_(e_invrange)); +*************** +*** 586,592 **** + dictitem_T *di; + proptype_T *prop; + +! name = get_tv_string(&argvars[0]); + if (*name == NUL) + { + EMSG(_(e_invarg)); +--- 586,592 ---- + dictitem_T *di; + proptype_T *prop; + +! name = tv_get_string(&argvars[0]); + if (*name == NUL) + { + EMSG(_(e_invarg)); +*************** +*** 656,667 **** + + di = dict_find(dict, (char_u *)"priority", -1); + if (di != NULL) +! prop->pt_priority = get_tv_number(&di->di_tv); + + di = dict_find(dict, (char_u *)"start_incl", -1); + if (di != NULL) + { +! if (get_tv_number(&di->di_tv)) + prop->pt_flags |= PT_FLAG_INS_START_INCL; + else + prop->pt_flags &= ~PT_FLAG_INS_START_INCL; +--- 656,667 ---- + + di = dict_find(dict, (char_u *)"priority", -1); + if (di != NULL) +! prop->pt_priority = tv_get_number(&di->di_tv); + + di = dict_find(dict, (char_u *)"start_incl", -1); + if (di != NULL) + { +! if (tv_get_number(&di->di_tv)) + prop->pt_flags |= PT_FLAG_INS_START_INCL; + else + prop->pt_flags &= ~PT_FLAG_INS_START_INCL; +*************** +*** 670,676 **** + di = dict_find(dict, (char_u *)"end_incl", -1); + if (di != NULL) + { +! if (get_tv_number(&di->di_tv)) + prop->pt_flags |= PT_FLAG_INS_END_INCL; + else + prop->pt_flags &= ~PT_FLAG_INS_END_INCL; +--- 670,676 ---- + di = dict_find(dict, (char_u *)"end_incl", -1); + if (di != NULL) + { +! if (tv_get_number(&di->di_tv)) + prop->pt_flags |= PT_FLAG_INS_END_INCL; + else + prop->pt_flags &= ~PT_FLAG_INS_END_INCL; +*************** +*** 706,712 **** + buf_T *buf = NULL; + hashitem_T *hi; + +! name = get_tv_string(&argvars[0]); + if (*name == NUL) + { + EMSG(_(e_invarg)); +--- 706,712 ---- + buf_T *buf = NULL; + hashitem_T *hi; + +! name = tv_get_string(&argvars[0]); + if (*name == NUL) + { + EMSG(_(e_invarg)); +*************** +*** 740,746 **** + void + f_prop_type_get(typval_T *argvars, typval_T *rettv UNUSED) + { +! char_u *name = get_tv_string(&argvars[0]); + + if (*name == NUL) + { +--- 740,746 ---- + void + f_prop_type_get(typval_T *argvars, typval_T *rettv UNUSED) + { +! char_u *name = tv_get_string(&argvars[0]); + + if (*name == NUL) + { +*** ../vim-8.1.0614/src/window.c 2018-11-10 16:01:23.335381858 +0100 +--- src/window.c 2018-12-21 15:50:18.737863579 +0100 +*************** +*** 6867,6873 **** + subli = subl->lv_first; + if (subli == NULL) + goto fail; +! lnum = get_tv_number_chk(&subli->li_tv, &error); + if (error == TRUE) + goto fail; + if (lnum == 0) +--- 6867,6873 ---- + subli = subl->lv_first; + if (subli == NULL) + goto fail; +! lnum = tv_get_number_chk(&subli->li_tv, &error); + if (error == TRUE) + goto fail; + if (lnum == 0) +*************** +*** 6879,6891 **** + subli = subli->li_next; + if (subli != NULL) + { +! col = get_tv_number_chk(&subli->li_tv, &error); + if (error == TRUE) + goto fail; + subli = subli->li_next; + if (subli != NULL) + { +! len = get_tv_number_chk(&subli->li_tv, &error); + if (error == TRUE) + goto fail; + } +--- 6879,6891 ---- + subli = subli->li_next; + if (subli != NULL) + { +! col = tv_get_number_chk(&subli->li_tv, &error); + if (error == TRUE) + goto fail; + subli = subli->li_next; + if (subli != NULL) + { +! len = tv_get_number_chk(&subli->li_tv, &error); + if (error == TRUE) + goto fail; + } +*************** +*** 7132,7138 **** + + if (argvars[0].v_type == VAR_UNKNOWN) + return curwin->w_id; +! winnr = get_tv_number(&argvars[0]); + if (winnr > 0) + { + if (argvars[1].v_type == VAR_UNKNOWN) +--- 7132,7138 ---- + + if (argvars[0].v_type == VAR_UNKNOWN) + return curwin->w_id; +! winnr = tv_get_number(&argvars[0]); + if (winnr > 0) + { + if (argvars[1].v_type == VAR_UNKNOWN) +*************** +*** 7140,7146 **** + else + { + tabpage_T *tp; +! int tabnr = get_tv_number(&argvars[1]); + + FOR_ALL_TABPAGES(tp) + if (--tabnr == 0) +--- 7140,7146 ---- + else + { + tabpage_T *tp; +! int tabnr = tv_get_number(&argvars[1]); + + FOR_ALL_TABPAGES(tp) + if (--tabnr == 0) +*************** +*** 7164,7170 **** + { + win_T *wp; + tabpage_T *tp; +! int id = get_tv_number(&argvars[0]); + + FOR_ALL_TAB_WINDOWS(tp, wp) + if (wp->w_id == id) +--- 7164,7170 ---- + { + win_T *wp; + tabpage_T *tp; +! int id = tv_get_number(&argvars[0]); + + FOR_ALL_TAB_WINDOWS(tp, wp) + if (wp->w_id == id) +*************** +*** 7182,7188 **** + tabpage_T *tp; + int winnr = 1; + int tabnr = 1; +! int id = get_tv_number(&argvars[0]); + + FOR_ALL_TABPAGES(tp) + { +--- 7182,7188 ---- + tabpage_T *tp; + int winnr = 1; + int tabnr = 1; +! int id = tv_get_number(&argvars[0]); + + FOR_ALL_TABPAGES(tp) + { +*************** +*** 7208,7214 **** + { + win_T *wp; + tabpage_T *tp; +! int id = get_tv_number(&argvars[0]); + + FOR_ALL_TAB_WINDOWS(tp, wp) + if (wp->w_id == id) +--- 7208,7214 ---- + { + win_T *wp; + tabpage_T *tp; +! int id = tv_get_number(&argvars[0]); + + FOR_ALL_TAB_WINDOWS(tp, wp) + if (wp->w_id == id) +*************** +*** 7222,7228 **** + { + win_T *wp; + int nr = 1; +! int id = get_tv_number(&argvars[0]); + + FOR_ALL_WINDOWS(wp) + { +--- 7222,7228 ---- + { + win_T *wp; + int nr = 1; +! int id = tv_get_number(&argvars[0]); + + FOR_ALL_WINDOWS(wp) + { +*************** +*** 7238,7244 **** + { + win_T *wp; + tabpage_T *tp; +! int bufnr = get_tv_number(&argvars[0]); + + FOR_ALL_TAB_WINDOWS(tp, wp) + if (wp->w_buffer->b_fnum == bufnr) +--- 7238,7244 ---- + { + win_T *wp; + tabpage_T *tp; +! int bufnr = tv_get_number(&argvars[0]); + + FOR_ALL_TAB_WINDOWS(tp, wp) + if (wp->w_buffer->b_fnum == bufnr) +*** ../vim-8.1.0614/src/ex_cmds.c 2018-12-21 15:16:57.479579788 +0100 +--- src/ex_cmds.c 2018-12-21 15:52:31.953044706 +0100 +*************** +*** 8913,8919 **** + for (li = l->lv_first; li != NULL && !got_int; li = li->li_next) + { + ++nr; +! fname = get_tv_string(&li->li_tv); + if (!message_filtered(fname)) + { + msg_outnum((long)nr); +--- 8913,8919 ---- + for (li = l->lv_first; li != NULL && !got_int; li = li->li_next) + { + ++nr; +! fname = tv_get_string(&li->li_tv); + if (!message_filtered(fname)) + { + msg_outnum((long)nr); +*** ../vim-8.1.0614/src/os_unix.c 2018-12-08 14:39:00.055120155 +0100 +--- src/os_unix.c 2018-12-21 15:52:50.360929614 +0100 +*************** +*** 1678,1690 **** + /* + * An X IO Error handler, used to catch terminal errors. + */ +! static int xterm_dpy_was_reset = FALSE; + + static int + x_IOerror_handler(Display *dpy UNUSED) + { + xterm_dpy = NULL; +! xterm_dpy_was_reset = TRUE; + x11_window = 0; + x11_display = NULL; + xterm_Shell = (Widget)0; +--- 1678,1690 ---- + /* + * An X IO Error handler, used to catch terminal errors. + */ +! static int xterm_dpy_retry_count = 0; + + static int + x_IOerror_handler(Display *dpy UNUSED) + { + xterm_dpy = NULL; +! xterm_dpy_retry_count = 5; // Try reconnecting five times + x11_window = 0; + x11_display = NULL; + xterm_Shell = (Widget)0; +*************** +*** 1704,1712 **** + static void + may_restore_clipboard(void) + { +! if (xterm_dpy_was_reset) + { +! xterm_dpy_was_reset = FALSE; + + # ifndef LESSTIF_VERSION + /* This has been reported to avoid Vim getting stuck. */ +--- 1704,1712 ---- + static void + may_restore_clipboard(void) + { +! if (xterm_dpy_retry_count > 0) + { +! --xterm_dpy_retry_count; + + # ifndef LESSTIF_VERSION + /* This has been reported to avoid Vim getting stuck. */ +*************** +*** 5553,5559 **** + { + typval_T *item = &dict_lookup(hi)->di_tv; + +! vim_setenv((char_u*)hi->hi_key, get_tv_string(item)); + --todo; + } + } +--- 5553,5559 ---- + { + typval_T *item = &dict_lookup(hi)->di_tv; + +! vim_setenv((char_u*)hi->hi_key, tv_get_string(item)); + --todo; + } + } +*************** +*** 7494,7499 **** +--- 7494,7501 ---- + { + xterm_dpy = XtOpenDisplay(app_context, xterm_display, + "vim_xterm", "Vim_xterm", NULL, 0, &z, &strp); ++ if (xterm_dpy != NULL) ++ xterm_dpy_retry_count = 0; + #if defined(HAVE_SETJMP_H) + mch_endjmp(); + #endif +*** ../vim-8.1.0614/src/os_win32.c 2018-11-16 16:21:01.641310033 +0100 +--- src/os_win32.c 2018-12-21 15:52:57.296886140 +0100 +*************** +*** 5355,5361 **** + { + typval_T *item = &dict_lookup(hi)->di_tv; + WCHAR *wkey = enc_to_utf16((char_u *)hi->hi_key, NULL); +! WCHAR *wval = enc_to_utf16(get_tv_string(item), NULL); + --todo; + if (wkey != NULL && wval != NULL) + { +--- 5355,5361 ---- + { + typval_T *item = &dict_lookup(hi)->di_tv; + WCHAR *wkey = enc_to_utf16((char_u *)hi->hi_key, NULL); +! WCHAR *wval = enc_to_utf16(tv_get_string(item), NULL); + --todo; + if (wkey != NULL && wval != NULL) + { +*** ../vim-8.1.0614/src/json.c 2018-09-30 21:43:17.195693290 +0200 +--- src/json.c 2018-12-21 15:57:46.355030394 +0100 +*************** +*** 873,879 **** + if (top_item != NULL && top_item->jd_type == JSON_OBJECT_KEY + && cur_item != NULL) + { +! top_item->jd_key = get_tv_string_buf_chk(cur_item, key_buf); + if (top_item->jd_key == NULL) + { + clear_tv(cur_item); +--- 873,879 ---- + if (top_item != NULL && top_item->jd_type == JSON_OBJECT_KEY + && cur_item != NULL) + { +! top_item->jd_key = tv_get_string_buf_chk(cur_item, key_buf); + if (top_item->jd_key == NULL) + { + clear_tv(cur_item); +*** ../vim-8.1.0614/src/regexp.c 2018-09-30 21:43:17.203693237 +0200 +--- src/regexp.c 2018-12-21 15:58:23.750785268 +0100 +*************** +*** 7566,7572 **** + /* fill_submatch_list() was called */ + clear_submatch_list(&matchList); + +! eval_result = get_tv_string_buf_chk(&rettv, buf); + if (eval_result != NULL) + eval_result = vim_strsave(eval_result); + clear_tv(&rettv); +--- 7566,7572 ---- + /* fill_submatch_list() was called */ + clear_submatch_list(&matchList); + +! eval_result = tv_get_string_buf_chk(&rettv, buf); + if (eval_result != NULL) + eval_result = vim_strsave(eval_result); + clear_tv(&rettv); +*** ../vim-8.1.0614/src/edit.c 2018-12-14 15:38:28.327597664 +0100 +--- src/edit.c 2018-12-21 15:59:19.326419307 +0100 +*************** +*** 4363,4369 **** + } + else + { +! word = get_tv_string_chk(tv); + vim_memset(cptext, 0, sizeof(cptext)); + } + if (word == NULL || (!aempty && *word == NUL)) +--- 4363,4369 ---- + } + else + { +! word = tv_get_string_chk(tv); + vim_memset(cptext, 0, sizeof(cptext)); + } + if (word == NULL || (!aempty && *word == NUL)) +*** ../vim-8.1.0614/src/misc2.c 2018-12-21 15:16:57.479579788 +0100 +--- src/misc2.c 2018-12-21 16:00:56.985772017 +0100 +*************** +*** 6593,6599 **** + *argc = 0; + for (li = l->lv_first; li != NULL; li = li->li_next) + { +! s = get_tv_string_chk(&li->li_tv); + if (s == NULL) + { + int i; +--- 6593,6599 ---- + *argc = 0; + for (li = l->lv_first; li != NULL; li = li->li_next) + { +! s = tv_get_string_chk(&li->li_tv); + if (s == NULL) + { + int i; +*** ../vim-8.1.0614/src/popupmnu.c 2018-12-01 11:58:44.415064948 +0100 +--- src/popupmnu.c 2018-12-21 16:01:04.985718779 +0100 +*************** +*** 1103,1109 **** + return; + for (idx = 0, li = list->lv_first; li != NULL; li = li->li_next, ++idx) + { +! char_u *text = get_tv_string_chk(&li->li_tv); + + balloon_array[idx].pum_text = vim_strsave( + text == NULL ? (char_u *)"" : text); +--- 1103,1109 ---- + return; + for (idx = 0, li = list->lv_first; li != NULL; li = li->li_next, ++idx) + { +! char_u *text = tv_get_string_chk(&li->li_tv); + + balloon_array[idx].pum_text = vim_strsave( + text == NULL ? (char_u *)"" : text); +*** ../vim-8.1.0614/src/version.c 2018-12-21 15:16:57.483579762 +0100 +--- src/version.c 2018-12-21 16:03:51.828602235 +0100 +*************** +*** 801,802 **** +--- 801,804 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 615, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +32. You don't know what sex three of your closest friends are, because they + have neutral nicknames and you never bothered to ask. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |