| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.637 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 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. |
| Files: src/ex_docmd.c, src/globals.h |
| |
| |
| |
| |
| |
| *** 1295,1301 **** |
| && cstack.cs_trylevel == 0 |
| #endif |
| ) |
| ! && !(did_emsg && used_getline |
| && (getline_equal(fgetline, cookie, getexmodeline) |
| || getline_equal(fgetline, cookie, getexline))) |
| && (next_cmdline != NULL |
| --- 1295,1308 ---- |
| && cstack.cs_trylevel == 0 |
| #endif |
| ) |
| ! && !(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,1310 **** |
| --- 1312,1318 ---- |
| || (flags & DOCMD_REPEAT))); |
| |
| vim_free(cmdline_copy); |
| + did_emsg_syntax = FALSE; |
| #ifdef FEAT_EVAL |
| free_cmdlines(&lines_ga); |
| ga_clear(&lines_ga); |
| |
| *** 2137,2142 **** |
| --- 2145,2151 ---- |
| if (!sourcing) |
| append_command(*cmdlinep); |
| errormsg = IObuff; |
| + did_emsg_syntax = TRUE; |
| } |
| goto doend; |
| } |
| |
| |
| |
| *** 183,188 **** |
| --- 183,190 ---- |
| #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 */ |
| |
| |
| |
| *** 721,722 **** |
| --- 721,724 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 637, |
| /**/ |
| |
| -- |
| GOD: That is your purpose Arthur ... the Quest for the Holy Grail ... |
| "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |