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


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