]> granicus.if.org Git - vim/commitdiff
patch 8.1.0550: expression evaluation may repeat an error message v8.1.0550
authorBram Moolenaar <Bram@vim.org>
Wed, 28 Nov 2018 19:38:37 +0000 (20:38 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 28 Nov 2018 19:38:37 +0000 (20:38 +0100)
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.

src/eval.c
src/message.c
src/testdir/test108.ok
src/version.c

index 4a3cf9912423bed8f3c4bd4e81e38cfde42105bb..a52567835457302b17cab50e116cdb729a3d2a69 100644 (file)
@@ -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;
index c2318bd8af469637bcc9e4a6e1f6ed359ed1cd96..5a990ff6047cbccb30b221ec21fb0106ba1715cd 100644 (file)
@@ -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
index 6315edcc2192776a638e42b56c151302fb1b0c06..7a531dd240d8018b29a991d6db96cbc798f435d3 100644 (file)
@@ -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
 
index 1fb70f882615e43d92189ec63ebed24bae857a3b..d8d66f0ef09a002fa825ac9362c901f0d3b690c3 100644 (file)
@@ -792,6 +792,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    550,
 /**/
     549,
 /**/