diff src/userfunc.c @ 25826:5040fae521f6 v8.2.3448

patch 8.2.3448: :endtry after function call that throws not found Commit: https://github.com/vim/vim/commit/1d34189ecb99fa76363c06e1aa815c1075675a1c Author: Bram Moolenaar <Bram@vim.org> Date: Sat Sep 18 15:25:52 2021 +0200 patch 8.2.3448: :endtry after function call that throws not found Problem: :endtry after function call that throws not found. Solution: Do check for following :endtry if an exception is being thrown. (closes #8889)
author Bram Moolenaar <Bram@vim.org>
date Sat, 18 Sep 2021 15:30:04 +0200
parents e855eba4ac39
children f773ef3c641d
line wrap: on
line diff
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -5011,14 +5011,16 @@ ex_call(exarg_T *eap)
 	--emsg_skip;
     clear_evalarg(&evalarg, eap);
 
-    // When inside :try we need to check for following "| catch".
-    if (!aborting() && (!failed || eap->cstack->cs_trylevel > 0))
+    // When inside :try we need to check for following "| catch" or "| endtry".
+    // Not when there was an error, but do check if an exception was thrown.
+    if ((!aborting() || did_throw)
+				  && (!failed || eap->cstack->cs_trylevel > 0))
     {
 	// Check for trailing illegal characters and a following command.
 	arg = skipwhite(arg);
 	if (!ends_excmd2(eap->arg, arg))
 	{
-	    if (!failed)
+	    if (!failed && !aborting())
 	    {
 		emsg_severe = TRUE;
 		semsg(_(e_trailing_arg), arg);