Skip to content

Commit

Permalink
updated for version 7.3.637
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
brammool committed Aug 23, 2012
1 parent db6eb57 commit 9aed0b6
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 1 deletion.
11 changes: 10 additions & 1 deletion src/ex_docmd.c
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
Expand Down Expand Up @@ -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;
} }
Expand Down
2 changes: 2 additions & 0 deletions src/globals.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -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,
/**/ /**/
Expand Down

0 comments on commit 9aed0b6

Please sign in to comment.