patch 9.1.0529: silent! causes following try/catch to not work

Commit: 
https://github.com/vim/vim/commit/749ba0f6d922b3f6b54a66543c214479492b5a0e
Author: LemonBoy <thatle...@gmail.com>
Date:   Thu Jul 4 19:23:16 2024 +0200

    patch 9.1.0529: silent! causes following try/catch to not work
    
    Problem:  silent! causes following try/catch to not work
              (Malcolm Rowe)
    Solution: consider emsg_silent in handle_did_throw() and do not abort
              evaluation flow for :silent! (LemonBoy)
    
    The silent! flag causes the evaluation not to be aborted in case of
    uncaught exceptions, adjust handle_did_throw to take this detail into
    account.
    
    Fixes the long-standing todo.txt item:
    ```
    Problem that a previous silent ":throw" causes a following try/catch not
    to work. (ZyX, 2013 Sep 28) With examples: (Malcolm Rowe, 2015 Dec 24)
    Also see #8487 for an example.
    ```
    
    fixes: #538
    closes: #15128
    
    Signed-off-by: LemonBoy <thatle...@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index c37a1d4bd..5b15a46b8 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 9.1.  Last change: 2024 Jun 03
+*todo.txt*      For Vim version 9.1.  Last change: 2024 Jul 04
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -512,10 +512,6 @@ Information for a specific terminal (e.g. gnome, tmux, 
konsole, alacritty) is
 spread out.  Make a section with copy/paste examples of script and pointers to
 more information.
 
-Problem that a previous silent ":throw" causes a following try/catch not to
-work. (ZyX, 2013 Sep 28) With examples: (Malcolm Rowe, 2015 Dec 24)
-Also see #8487 for an example.
-
 Request to use "." for the cursor column in search pattern \%<.c and \%<.v.
 (#8179)
 
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 71bfa9322..59d3db4dd 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -1460,8 +1460,13 @@ handle_did_throw(void)
     current_exception->throw_name = NULL;
 
     discard_current_exception();       // uses IObuff if 'verbose'
-    suppress_errthrow = TRUE;
-    force_abort = TRUE;
+
+    // If "silent!" is active the uncaught exception is not fatal.
+    if (emsg_silent == 0)
+    {
+       suppress_errthrow = TRUE;
+       force_abort = TRUE;
+    }
 
     if (messages != NULL)
     {
diff --git a/src/testdir/test_vimscript.vim b/src/testdir/test_vimscript.vim
index 897677957..21f894e9a 100644
--- a/src/testdir/test_vimscript.vim
+++ b/src/testdir/test_vimscript.vim
@@ -7536,6 +7536,31 @@ func Test_deeply_nested_source()
   call system(cmd)
 endfunc
 
+func Test_exception_silent()
+  XpathINIT
+  let lines =<< trim END
+  func Throw()
+    Xpath 'a'
+    throw "Uncaught"
+    " This line is not executed.
+    Xpath 'b'
+  endfunc
+  " The exception is suppressed due to the presence of silent!.
+  silent! call Throw()
+  try
+    call DoesNotExist()
+  catch /E117:/
+    Xpath 'c'
+  endtry
+  Xpath 'd'
+  END
+  let verify =<< trim END
+    call assert_equal('acd', g:Xpath)
+  END
+
+  call RunInNewVim(lines, verify)
+endfunc
+
 
"-------------------------------------------------------------------------------
 " Modelines                                                                {{{1
 " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
diff --git a/src/version.c b/src/version.c
index 07720befc..b7812fa00 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    529,
 /**/
     528,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1sPQW0-002hJO-3Q%40256bit.org.

Raspunde prin e-mail lui