0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 8.2.0287: Vim9: return in try block not tested; catch not tested

Problem:    Vim9: return in try block not tested; catch with pattern not
            tested.
Solution:   Add tests.  Make it work.
This commit is contained in:
Bram Moolenaar
2020-02-20 20:41:06 +01:00
parent 11ec807639
commit f575adff06
3 changed files with 32 additions and 1 deletions

View File

@@ -236,12 +236,40 @@ def CatchInDef()
endtry
enddef
def ReturnFinally(): string
try
return 'intry'
finally
g:in_finally = 'finally'
endtry
return 'end'
enddef
def Test_try_catch_nested()
CatchInFunc()
assert_equal('getout', g:thrown_func)
CatchInDef()
assert_equal('getout', g:thrown_def)
assert_equal('intry', ReturnFinally())
assert_equal('finally', g:in_finally)
enddef
def Test_try_catch_match()
let seq = 'a'
try
throw 'something'
catch /nothing/
seq ..= 'x'
catch /some/
seq ..= 'b'
catch /asdf/
seq ..= 'x'
finally
seq ..= 'c'
endtry
assert_equal('abc', seq)
enddef
let s:export_script_lines =<< trim END

View File

@@ -738,6 +738,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
287,
/**/
286,
/**/

View File

@@ -1065,6 +1065,7 @@ call_def_function(
trycmd->tcd_frame = ectx.ec_frame;
trycmd->tcd_catch_idx = iptr->isn_arg.try.try_catch;
trycmd->tcd_finally_idx = iptr->isn_arg.try.try_finally;
trycmd->tcd_caught = FALSE;
}
break;
@@ -1109,7 +1110,7 @@ call_def_function(
--trylevel;
trycmd = ((trycmd_T *)trystack->ga_data)
+ trystack->ga_len;
if (trycmd->tcd_caught)
if (trycmd->tcd_caught && current_exception != NULL)
{
// discard the exception
if (caught_stack == current_exception)