]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.637 v7.3.637
authorBram Moolenaar <Bram@vim.org>
Thu, 23 Aug 2012 16:43:10 +0000 (18:43 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 23 Aug 2012 16:43:10 +0000 (18:43 +0200)
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
src/globals.h
src/version.c

index ead520a22190c6034577e465857b060f74c6798e..2257c551caf404156c36d3616df33da97d1f0649 100644 (file)
@@ -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;
     }
index 81cdabba2f216e3a1127b9dc369bcb5b78de6fd7..41eb8859f94b3857ef27d4f4060cec0580047840 100644 (file)
@@ -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 */
index 88836bc452db5ca83dce98b4ffc1c280e98637bb..b22c901070bbf270fe7772eeafd8df9e12e0a8c4 100644 (file)
@@ -719,6 +719,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    637,
 /**/
     636,
 /**/