Mercurial > vim
diff src/vim9execute.c @ 23618:d228ca435f3a v8.2.2351
patch 8.2.2351: Vim9: error msg for "throw" in function called with "silent!"
Commit: https://github.com/vim/vim/commit/8f81b22e8691f6e7c76153e945bbef15a8190cd9
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jan 14 21:47:06 2021 +0100
patch 8.2.2351: Vim9: error msg for "throw" in function called with "silent!"
Problem: Vim9: error message for "throw" in function that was called with
"silent!".
Solution: Do not throw the exception when not caught or displayed.
(closes #7672)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 14 Jan 2021 22:00:04 +0100 |
parents | 1816ea68c022 |
children | b26bbc03126a |
line wrap: on
line diff
--- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -2605,6 +2605,17 @@ call_def_function( break; case ISN_THROW: + if (ectx.ec_trystack.ga_len == 0 && trylevel == 0 + && emsg_silent) + { + // throwing an exception while using "silent!" causes the + // function to abort but not display an error. + tv = STACK_TV_BOT(-1); + clear_tv(tv); + tv->v_type = VAR_NUMBER; + tv->vval.v_number = 0; + goto done; + } --ectx.ec_stack.ga_len; tv = STACK_TV_BOT(0); if (tv->vval.v_string == NULL