summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0615
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0615')
-rw-r--r--data/vim/patches/8.1.06158621
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, &notanum);
+ 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, &notanum);
+ 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, &notanum);
+ 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, &notanum);
+ 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], &notanum);
+ 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], &notanum);
+ 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, &notanum);
+ 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, &notanum);
+ 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, &notanum);
+ 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, &notanum);
+ 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, &reglen);
+ 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, &reglen);
+ 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 ///