# HG changeset patch # User Bram Moolenaar # Date 1582128903 -3600 # Node ID 6e27e1ffa2a626210d2d85dfc43adde5d98c28d0 # Parent a94d27943c93be6577ec75dc0ef9a1428dfeeb7d patch 8.2.0280: Vim9: throw in :def function not caught higher up Commit: https://github.com/vim/vim/commit/257cc5ee9593cd0653beca8b5945dc7fbf7f2d8d Author: Bram Moolenaar Date: Wed Feb 19 17:06:11 2020 +0100 patch 8.2.0280: Vim9: throw in :def function not caught higher up Problem: Vim9: throw in :def function not caught higher up. Solution: Set "need_rethrow". diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -206,6 +206,34 @@ def Test_try_catch() assert_equal(['1', 'wrong', '3'], l) enddef +def ThrowFromDef() + throw 'getout' +enddef + +func CatchInFunc() + try + call ThrowFromDef() + catch + let g:thrown_func = v:exception + endtry +endfunc + +def CatchInDef() + try + ThrowFromDef() + catch + g:thrown_def = v:exception + endtry +enddef + +def Test_try_catch_nested() + CatchInFunc() + assert_equal('getout', g:thrown_func) + + CatchInDef() + assert_equal('getout', g:thrown_def) +enddef + let s:export_script_lines =<< trim END vim9script let name: string = 'bob' diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -739,6 +739,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 280, +/**/ 279, /**/ 278, diff --git a/src/vim9execute.c b/src/vim9execute.c --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -482,6 +482,7 @@ call_def_function( tv->v_type = VAR_NUMBER; tv->vval.v_number = 0; ++ectx.ec_stack.ga_len; + need_rethrow = TRUE; goto done; }