Mercurial > vim
diff src/vim9execute.c @ 24806:28127371aa18 v8.2.2941
patch 8.2.2941: Vim9: using does not handle a list of strings
Commit: https://github.com/vim/vim/commit/b288ba9f1dd29ba34f236e3099f779d5ab130227
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jun 5 17:10:55 2021 +0200
patch 8.2.2941: Vim9: using does not handle a list of strings
Problem: Vim9: using does not handle a list of strings.
Solution: Convert a list to a string and escape each item. (closes https://github.com/vim/vim/issues/8310)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 05 Jun 2021 17:15:06 +0200 |
parents | 7c1375eb1636 |
children | 0bc60e26a2b5 |
line wrap: on
line diff
--- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -999,15 +999,34 @@ do_2string(typval_T *tv, int is_2string_ case VAR_LIST: if (tolerant) { - char_u *p; - + char_u *s, *e, *p; + garray_T ga; + + ga_init2(&ga, sizeof(char_u *), 1); + + // Convert to NL separated items, then + // escape the items and replace the NL with + // a space. str = typval2string(tv, TRUE); + if (str == NULL) + return FAIL; + s = str; + while ((e = vim_strchr(s, '\n')) != NULL) + { + *e = NUL; + p = vim_strsave_fnameescape(s, FALSE); + if (p != NULL) + { + ga_concat(&ga, p); + ga_concat(&ga, (char_u *)" "); + vim_free(p); + } + s = e + 1; + } + vim_free(str); clear_tv(tv); tv->v_type = VAR_STRING; - tv->vval.v_string = str; - // TODO: escaping - while ((p = vim_strchr(str, '\n')) != NULL) - *p = ' '; + tv->vval.v_string = ga.ga_data; return OK; } // FALLTHROUGH