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 ///