Mercurial > vim
diff src/typval.c @ 23788:d12ef361d9de v8.2.2435
patch 8.2.2435: setline() gives an error for some types
Commit: https://github.com/vim/vim/commit/3445320839a38b3b0c253513b125da8298ec27d6
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jan 31 13:08:38 2021 +0100
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 31 Jan 2021 13:15:04 +0100 |
parents | 0512923e54e1 |
children | 5db7d275543c |
line wrap: on
line diff
--- 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; }