1
0
forked from aniani/vim

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.
This commit is contained in:
Bram Moolenaar
2018-11-28 20:38:37 +01:00
parent 10efcd5b02
commit 76a6345433
4 changed files with 6 additions and 5 deletions

View File

@@ -7999,6 +7999,7 @@ ex_echo(exarg_T *eap)
int needclr = TRUE; int needclr = TRUE;
int atstart = TRUE; int atstart = TRUE;
char_u numbuf[NUMBUFLEN]; char_u numbuf[NUMBUFLEN];
int did_emsg_before = did_emsg;
if (eap->skip) if (eap->skip)
++emsg_skip; ++emsg_skip;
@@ -8016,7 +8017,7 @@ ex_echo(exarg_T *eap)
* has been cancelled due to an aborting error, an interrupt, or an * has been cancelled due to an aborting error, an interrupt, or an
* exception. * exception.
*/ */
if (!aborting()) if (!aborting() && did_emsg == did_emsg_before)
EMSG2(_(e_invexpr2), p); EMSG2(_(e_invexpr2), p);
need_clr_eos = FALSE; need_clr_eos = FALSE;
break; break;

View File

@@ -636,7 +636,7 @@ emsg(char_u *s)
if (cause_errthrow(s, severe, &ignore) == TRUE) if (cause_errthrow(s, severe, &ignore) == TRUE)
{ {
if (!ignore) if (!ignore)
did_emsg = TRUE; ++did_emsg;
return TRUE; return TRUE;
} }
@@ -689,7 +689,7 @@ emsg(char_u *s)
beep_flush(); /* also includes flush_buffers() */ beep_flush(); /* also includes flush_buffers() */
else else
flush_buffers(FLUSH_MINIMAL); // flush internal buffers flush_buffers(FLUSH_MINIMAL); // flush internal buffers
did_emsg = TRUE; // flag for DoOneCmd() ++did_emsg; // flag for DoOneCmd()
#ifdef FEAT_EVAL #ifdef FEAT_EVAL
did_uncaught_emsg = TRUE; did_uncaught_emsg = TRUE;
#endif #endif

View File

@@ -28,7 +28,6 @@ undefined var3 on former level:
Error detected while processing function Foo[2]..Bar[2]..Bazz: Error detected while processing function Foo[2]..Bar[2]..Bazz:
line 3: line 3:
E121: Undefined variable: var3 E121: Undefined variable: var3
E15: Invalid expression: var3
here var3 is defined with "another var": here var3 is defined with "another var":
another var another var
@@ -36,7 +35,6 @@ undefined var2 on former level
Error detected while processing function Foo[2]..Bar: Error detected while processing function Foo[2]..Bar:
line 3: line 3:
E121: Undefined variable: var2 E121: Undefined variable: var2
E15: Invalid expression: var2
here var2 is defined with 10: here var2 is defined with 10:
10 10

View File

@@ -792,6 +792,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
550,
/**/ /**/
549, 549,
/**/ /**/