From 3445320839a38b3b0c253513b125da8298ec27d6 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sun, 31 Jan 2021 13:08:38 +0100 Subject: 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. --- src/typval.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'src/typval.c') diff --git a/src/typval.c b/src/typval.c index b3325b663..65e07b3f7 100644 --- a/src/typval.c +++ b/src/typval.c @@ -927,8 +927,13 @@ typval_compare( 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 @@ typval_tostring(typval_T *arg) 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; } -- cgit v1.2.1