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)
diff --git a/src/evalvars.c b/src/evalvars.c
index d8ee216..e83c50d 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -605,10 +605,11 @@
 /*
  * 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 @@
 	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 @@
 	}
 
 	// 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);