changeset 3757:3b62d8f36cdf v7.3.637

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.
author Bram Moolenaar <bram@vim.org>
date Thu, 23 Aug 2012 18:43:10 +0200
parents 8aa6d3a6da20
children e927c141d774
files src/ex_docmd.c src/globals.h src/version.c
diffstat 3 files changed, 14 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -1295,7 +1295,14 @@ do_cmdline(cmdline, fgetline, cookie, fl
 		&& cstack.cs_trylevel == 0
 #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, getexline)))
 	    && (next_cmdline != NULL
@@ -1305,6 +1312,7 @@ do_cmdline(cmdline, fgetline, cookie, fl
 			|| (flags & DOCMD_REPEAT)));
 
     vim_free(cmdline_copy);
+    did_emsg_syntax = FALSE;
 #ifdef FEAT_EVAL
     free_cmdlines(&lines_ga);
     ga_clear(&lines_ga);
@@ -2137,6 +2145,7 @@ do_one_cmd(cmdlinep, sourcing,
 	    if (!sourcing)
 		append_command(*cmdlinep);
 	    errormsg = IObuff;
+	    did_emsg_syntax = TRUE;
 	}
 	goto doend;
     }
--- a/src/globals.h
+++ b/src/globals.h
@@ -183,6 +183,8 @@ EXTERN int	did_endif INIT(= FALSE);    /
 #endif
 EXTERN int	did_emsg;		    /* set by emsg() when the message
 					       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	ex_exitval INIT(= 0);	    /* exit value for ex mode */
 EXTERN int	emsg_on_display INIT(= FALSE);	/* there is an error message */
--- a/src/version.c
+++ b/src/version.c
@@ -720,6 +720,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    637,
+/**/
     636,
 /**/
     635,