diff src/eval.c @ 21098:e88b0daa2fcb v8.2.1100

patch 8.2.1100: Vim9: cannot use line break in :execute argument Commit: https://github.com/vim/vim/commit/47e880d6c13c3ec2888398fd9ba1f5a7180d791a Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jun 30 22:02:02 2020 +0200 patch 8.2.1100: Vim9: cannot use line break in :execute argument Problem: Vim9: cannot use line break in :execute, :echomsg and :echoerr argument. Solution: Check for line break.
author Bram Moolenaar <Bram@vim.org>
date Tue, 30 Jun 2020 22:15:04 +0200
parents 74e5e212e550
children f8ec5a7a9cf6
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -207,14 +207,17 @@ eval_to_bool(
  * Call eval1() and give an error message if not done at a lower level.
  */
     static int
-eval1_emsg(char_u **arg, typval_T *rettv, int evaluate)
+eval1_emsg(char_u **arg, typval_T *rettv, exarg_T *eap)
 {
     char_u	*start = *arg;
     int		ret;
     int		did_emsg_before = did_emsg;
     int		called_emsg_before = called_emsg;
-
-    ret = eval1(arg, rettv, evaluate ? &EVALARG_EVALUATE : NULL);
+    evalarg_T	evalarg;
+
+    fill_evalarg_from_eap(&evalarg, eap, eap != NULL && eap->skip);
+
+    ret = eval1(arg, rettv, &evalarg);
     if (ret == FAIL)
     {
 	// Report the invalid expression unless the expression evaluation has
@@ -225,6 +228,7 @@ eval1_emsg(char_u **arg, typval_T *rettv
 					  && called_emsg == called_emsg_before)
 	    semsg(_(e_invexpr2), start);
     }
+    clear_evalarg(&evalarg, eap);
     return ret;
 }
 
@@ -294,7 +298,7 @@ eval_expr_typval(typval_T *expr, typval_
 	if (s == NULL)
 	    return FAIL;
 	s = skipwhite(s);
-	if (eval1_emsg(&s, rettv, TRUE) == FAIL)
+	if (eval1_emsg(&s, rettv, NULL) == FAIL)
 	    return FAIL;
 	if (*s != NUL)  // check for trailing chars after expr
 	{
@@ -5330,7 +5334,7 @@ ex_execute(exarg_T *eap)
 	++emsg_skip;
     while (!ends_excmd2(eap->cmd, arg) || *arg == '"')
     {
-	ret = eval1_emsg(&arg, &rettv, !eap->skip);
+	ret = eval1_emsg(&arg, &rettv, eap);
 	if (ret == FAIL)
 	    break;