changeset 15079:a527110d5f56 v8.1.0550

patch 8.1.0550: expression evaluation may repeat an error message commit https://github.com/vim/vim/commit/76a6345433bc2a600689397fb28165a2e5793720 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Nov 28 20:38:37 2018 +0100 patch 8.1.0550: expression evaluation may repeat an error message Problem: Expression evaluation may repeat an error message. (Jason Franklin) Solution: Increment did_emsg and check for the value when giving an error for the echo command.
author Bram Moolenaar <Bram@vim.org>
date Wed, 28 Nov 2018 20:45:07 +0100
parents 344c153e9908
children d0374f91e0d2
files src/eval.c src/message.c src/testdir/test108.ok src/version.c
diffstat 4 files changed, 6 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -7999,6 +7999,7 @@ ex_echo(exarg_T *eap)
     int		needclr = TRUE;
     int		atstart = TRUE;
     char_u	numbuf[NUMBUFLEN];
+    int		did_emsg_before = did_emsg;
 
     if (eap->skip)
 	++emsg_skip;
@@ -8016,7 +8017,7 @@ ex_echo(exarg_T *eap)
 	     * has been cancelled due to an aborting error, an interrupt, or an
 	     * exception.
 	     */
-	    if (!aborting())
+	    if (!aborting() && did_emsg == did_emsg_before)
 		EMSG2(_(e_invexpr2), p);
 	    need_clr_eos = FALSE;
 	    break;
--- a/src/message.c
+++ b/src/message.c
@@ -636,7 +636,7 @@ emsg(char_u *s)
 	if (cause_errthrow(s, severe, &ignore) == TRUE)
 	{
 	    if (!ignore)
-		did_emsg = TRUE;
+		++did_emsg;
 	    return TRUE;
 	}
 
@@ -689,7 +689,7 @@ emsg(char_u *s)
 	    beep_flush();		/* also includes flush_buffers() */
 	else
 	    flush_buffers(FLUSH_MINIMAL);  // flush internal buffers
-	did_emsg = TRUE;		   // flag for DoOneCmd()
+	++did_emsg;			   // flag for DoOneCmd()
 #ifdef FEAT_EVAL
 	did_uncaught_emsg = TRUE;
 #endif
--- a/src/testdir/test108.ok
+++ b/src/testdir/test108.ok
@@ -28,7 +28,6 @@ undefined var3 on former level:
 Error detected while processing function Foo[2]..Bar[2]..Bazz:
 line    3:
 E121: Undefined variable: var3
-E15: Invalid expression: var3
 here var3 is defined with "another var":
 another var
 
@@ -36,7 +35,6 @@ undefined var2 on former level
 Error detected while processing function Foo[2]..Bar:
 line    3:
 E121: Undefined variable: var2
-E15: Invalid expression: var2
 here var2 is defined with 10:
 10
 
--- a/src/version.c
+++ b/src/version.c
@@ -793,6 +793,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    550,
+/**/
     549,
 /**/
     548,