0
0
mirror of https://github.com/vim/vim.git synced 2025-10-16 07:24:23 -04:00

patch 8.2.4934: string interpolation fails when not evaluating

Problem:    String interpolation fails when not evaluating.
Solution:   Skip the expression when not evaluating. (closes #10398)
This commit is contained in:
Bram Moolenaar
2022-05-10 18:11:43 +01:00
parent df6e0e46c5
commit 70c41241c2
5 changed files with 24 additions and 11 deletions

View File

@@ -605,10 +605,11 @@ list_script_vars(int *first)
/*
* Evaluate one Vim expression {expr} in string "p" and append the
* resulting string to "gap". "p" points to the opening "{".
* When "evaluate" is FALSE only skip over the expression.
* Return a pointer to the character after "}", NULL for an error.
*/
char_u *
eval_one_expr_in_str(char_u *p, garray_T *gap)
eval_one_expr_in_str(char_u *p, garray_T *gap, int evaluate)
{
char_u *block_start = skipwhite(p + 1); // skip the opening {
char_u *block_end = block_start;
@@ -627,13 +628,16 @@ eval_one_expr_in_str(char_u *p, garray_T *gap)
semsg(_(e_missing_close_curly_str), p);
return NULL;
}
*block_end = NUL;
expr_val = eval_to_string(block_start, TRUE);
*block_end = '}';
if (expr_val == NULL)
return NULL;
ga_concat(gap, expr_val);
vim_free(expr_val);
if (evaluate)
{
*block_end = NUL;
expr_val = eval_to_string(block_start, TRUE);
*block_end = '}';
if (expr_val == NULL)
return NULL;
ga_concat(gap, expr_val);
vim_free(expr_val);
}
return block_end + 1;
}
@@ -691,7 +695,7 @@ eval_all_expr_in_str(char_u *str)
}
// Evaluate the expression and append the result.
p = eval_one_expr_in_str(p, &ga);
p = eval_one_expr_in_str(p, &ga, TRUE);
if (p == NULL)
{
ga_clear(&ga);