From 00b8ae0d3d90f80fc817857dca26359b175b18ed Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 23 Aug 2012 18:43:10 +0200 Subject: 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. --- src/ex_docmd.c | 11 ++++++++++- src/globals.h | 2 ++ src/version.c | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/ex_docmd.c b/src/ex_docmd.c index ead520a221..2257c551ca 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -1295,7 +1295,14 @@ do_cmdline(cmdline, fgetline, cookie, flags) && 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, flags) || (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; } diff --git a/src/globals.h b/src/globals.h index 81cdabba2f..41eb8859f9 100644 --- a/src/globals.h +++ b/src/globals.h @@ -183,6 +183,8 @@ EXTERN int did_endif INIT(= FALSE); /* just had ":endif" */ #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 */ diff --git a/src/version.c b/src/version.c index 88836bc452..b22c901070 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 637, /**/ 636, /**/ -- cgit v1.2.3