From 9939f57b7f1c17a0142ebfe4f9e0b634158593e1 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 16 Sep 2020 22:29:52 +0200 Subject: [PATCH] patch 8.2.1700: Vim9: try/catch causes wrong value to be returned Problem: Vim9: try/catch causes wrong value to be returned. Solution: Reset tcd_return. (closes #6964) --- src/testdir/test_vim9_script.vim | 20 ++++++++++++++++++++ src/version.c | 2 ++ src/vim9execute.c | 1 + 3 files changed, 23 insertions(+) diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index c400e82acc993..2f1e708f29847 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -1169,6 +1169,26 @@ def Test_try_catch_nested() assert_equal('finally', g:in_finally) enddef +def TryOne(): number + try + return 0 + catch + endtry + return 0 +enddef + +def TryTwo(n: number): string + try + let x = {} + catch + endtry + return 'text' +enddef + +def Test_try_catch_twice() + assert_equal('text', TryOne()->TryTwo()) +enddef + def Test_try_catch_match() let seq = 'a' try diff --git a/src/version.c b/src/version.c index e77c7957e64d0..ff5534ff69a67 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1700, /**/ 1699, /**/ diff --git a/src/vim9execute.c b/src/vim9execute.c index 7c8f77977c208..40d6193ca58e3 100644 --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -1922,6 +1922,7 @@ call_def_function( trycmd->tcd_catch_idx = iptr->isn_arg.try.try_catch; trycmd->tcd_finally_idx = iptr->isn_arg.try.try_finally; trycmd->tcd_caught = FALSE; + trycmd->tcd_return = FALSE; } break;