patch 8.2.2435: setline() gives an error for some types
Problem: setline() gives an error for some types.
Solution: Allow any type, convert each item to a string.
diff --git a/src/typval.c b/src/typval.c
index b3325b6..65e07b3 100644
--- a/src/typval.c
+++ b/src/typval.c
@@ -927,8 +927,13 @@
return OK;
}
+/*
+ * Convert any type to a string, never give an error.
+ * When "quotes" is TRUE add quotes to a string.
+ * Returns an allocated string.
+ */
char_u *
-typval_tostring(typval_T *arg)
+typval_tostring(typval_T *arg, int quotes)
{
char_u *tofree;
char_u numbuf[NUMBUFLEN];
@@ -936,10 +941,18 @@
if (arg == NULL)
return vim_strsave((char_u *)"(does not exist)");
- ret = tv2string(arg, &tofree, numbuf, 0);
- // Make a copy if we have a value but it's not in allocated memory.
- if (ret != NULL && tofree == NULL)
- ret = vim_strsave(ret);
+ if (!quotes && arg->v_type == VAR_STRING)
+ {
+ ret = vim_strsave(arg->vval.v_string == NULL ? (char_u *)""
+ : arg->vval.v_string);
+ }
+ else
+ {
+ ret = tv2string(arg, &tofree, numbuf, 0);
+ // Make a copy if we have a value but it's not in allocated memory.
+ if (ret != NULL && tofree == NULL)
+ ret = vim_strsave(ret);
+ }
return ret;
}