forked from aniani/vim
updated for version 7.3.637
Problem: Cannot catch the error caused by a foldopen when there is no fold. (ZyX, Issue 48) Solution: Do not break out of the loop early when inside try/catch. (Christian Brabandt) Except when there is a syntax error.
This commit is contained in:
parent
dde0efed85
commit
00b8ae0d3d
@ -1295,7 +1295,14 @@ do_cmdline(cmdline, fgetline, cookie, flags)
|
|||||||
&& cstack.cs_trylevel == 0
|
&& cstack.cs_trylevel == 0
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
&& !(did_emsg && used_getline
|
&& !(did_emsg
|
||||||
|
#ifdef FEAT_EVAL
|
||||||
|
/* Keep going when inside try/catch, so that the error can be
|
||||||
|
* dealth with, except when it is a syntax error, it may cause
|
||||||
|
* the :endtry to be missed. */
|
||||||
|
&& (cstack.cs_trylevel == 0 || did_emsg_syntax)
|
||||||
|
#endif
|
||||||
|
&& used_getline
|
||||||
&& (getline_equal(fgetline, cookie, getexmodeline)
|
&& (getline_equal(fgetline, cookie, getexmodeline)
|
||||||
|| getline_equal(fgetline, cookie, getexline)))
|
|| getline_equal(fgetline, cookie, getexline)))
|
||||||
&& (next_cmdline != NULL
|
&& (next_cmdline != NULL
|
||||||
@ -1305,6 +1312,7 @@ do_cmdline(cmdline, fgetline, cookie, flags)
|
|||||||
|| (flags & DOCMD_REPEAT)));
|
|| (flags & DOCMD_REPEAT)));
|
||||||
|
|
||||||
vim_free(cmdline_copy);
|
vim_free(cmdline_copy);
|
||||||
|
did_emsg_syntax = FALSE;
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
free_cmdlines(&lines_ga);
|
free_cmdlines(&lines_ga);
|
||||||
ga_clear(&lines_ga);
|
ga_clear(&lines_ga);
|
||||||
@ -2137,6 +2145,7 @@ do_one_cmd(cmdlinep, sourcing,
|
|||||||
if (!sourcing)
|
if (!sourcing)
|
||||||
append_command(*cmdlinep);
|
append_command(*cmdlinep);
|
||||||
errormsg = IObuff;
|
errormsg = IObuff;
|
||||||
|
did_emsg_syntax = TRUE;
|
||||||
}
|
}
|
||||||
goto doend;
|
goto doend;
|
||||||
}
|
}
|
||||||
|
@ -183,6 +183,8 @@ EXTERN int did_endif INIT(= FALSE); /* just had ":endif" */
|
|||||||
#endif
|
#endif
|
||||||
EXTERN int did_emsg; /* set by emsg() when the message
|
EXTERN int did_emsg; /* set by emsg() when the message
|
||||||
is displayed or thrown */
|
is displayed or thrown */
|
||||||
|
EXTERN int did_emsg_syntax; /* did_emsg set because of a
|
||||||
|
syntax error */
|
||||||
EXTERN int called_emsg; /* always set by emsg() */
|
EXTERN int called_emsg; /* always set by emsg() */
|
||||||
EXTERN int ex_exitval INIT(= 0); /* exit value for ex mode */
|
EXTERN int ex_exitval INIT(= 0); /* exit value for ex mode */
|
||||||
EXTERN int emsg_on_display INIT(= FALSE); /* there is an error message */
|
EXTERN int emsg_on_display INIT(= FALSE); /* there is an error message */
|
||||||
|
@ -719,6 +719,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 */
|
||||||
|
/**/
|
||||||
|
637,
|
||||||
/**/
|
/**/
|
||||||
636,
|
636,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user