diff --git a/7.3.637 b/7.3.637 new file mode 100644 index 0000000..f7f1d90 --- /dev/null +++ b/7.3.637 @@ -0,0 +1,94 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.637 +Fcc: outbox +From: Bram Moolenaar +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 + + +*** ../vim-7.3.636/src/ex_docmd.c 2012-08-15 14:04:50.000000000 +0200 +--- src/ex_docmd.c 2012-08-23 18:39:08.000000000 +0200 +*************** +*** 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; + } +*** ../vim-7.3.636/src/globals.h 2012-07-10 16:49:08.000000000 +0200 +--- src/globals.h 2012-08-23 18:29:09.000000000 +0200 +*************** +*** 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 */ +*** ../vim-7.3.636/src/version.c 2012-08-23 15:53:00.000000000 +0200 +--- src/version.c 2012-08-23 17:59:12.000000000 +0200 +*************** +*** 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 ///