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 #8310)
diff --git a/src/vim9execute.c b/src/vim9execute.c
index b23879d..9826678 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -999,15 +999,34 @@
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