Skip to content

Commit 76a6345

Browse files
committed
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.
1 parent 10efcd5 commit 76a6345

4 files changed

Lines changed: 6 additions & 5 deletions

File tree

src/eval.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7999,6 +7999,7 @@ ex_echo(exarg_T *eap)
79997999
int needclr = TRUE;
80008000
int atstart = TRUE;
80018001
char_u numbuf[NUMBUFLEN];
8002+
int did_emsg_before = did_emsg;
80028003

80038004
if (eap->skip)
80048005
++emsg_skip;
@@ -8016,7 +8017,7 @@ ex_echo(exarg_T *eap)
80168017
* has been cancelled due to an aborting error, an interrupt, or an
80178018
* exception.
80188019
*/
8019-
if (!aborting())
8020+
if (!aborting() && did_emsg == did_emsg_before)
80208021
EMSG2(_(e_invexpr2), p);
80218022
need_clr_eos = FALSE;
80228023
break;

src/message.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ emsg(char_u *s)
636636
if (cause_errthrow(s, severe, &ignore) == TRUE)
637637
{
638638
if (!ignore)
639-
did_emsg = TRUE;
639+
++did_emsg;
640640
return TRUE;
641641
}
642642

@@ -689,7 +689,7 @@ emsg(char_u *s)
689689
beep_flush(); /* also includes flush_buffers() */
690690
else
691691
flush_buffers(FLUSH_MINIMAL); // flush internal buffers
692-
did_emsg = TRUE; // flag for DoOneCmd()
692+
++did_emsg; // flag for DoOneCmd()
693693
#ifdef FEAT_EVAL
694694
did_uncaught_emsg = TRUE;
695695
#endif

src/testdir/test108.ok

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,13 @@ undefined var3 on former level:
2828
Error detected while processing function Foo[2]..Bar[2]..Bazz:
2929
line 3:
3030
E121: Undefined variable: var3
31-
E15: Invalid expression: var3
3231
here var3 is defined with "another var":
3332
another var
3433

3534
undefined var2 on former level
3635
Error detected while processing function Foo[2]..Bar:
3736
line 3:
3837
E121: Undefined variable: var2
39-
E15: Invalid expression: var2
4038
here var2 is defined with 10:
4139
10
4240

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -792,6 +792,8 @@ static char *(features[]) =
792792

793793
static int included_patches[] =
794794
{ /* Add new patch number below this line */
795+
/**/
796+
550,
795797
/**/
796798
549,
797799
/**/

0 commit comments

Comments
 (0)