summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2023-05-14 19:59:59 +0100
committerBram Moolenaar <Bram@vim.org>2023-05-14 19:59:59 +0100
commitcf2610c82b64b1785af0804916789295cae45e93 (patch)
tree8e233fcfa61259b8ce883530fe8c9c7766a04ab8
parentb7398fe41c9e1e731d058105a34158871ee83e3f (diff)
downloadvim-git-cf2610c82b64b1785af0804916789295cae45e93.tar.gz
patch 9.0.1556: Vim9: error for missing "return" after "throw"v9.0.1556
Problem: Vim9: error for missing "return" after "throw". Solution: Set had_return flag for "throw". (closes #12262)
-rw-r--r--src/testdir/test_vim9_func.vim13
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c1
3 files changed, 16 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 2965afac8..ffb8de48d 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -488,6 +488,19 @@ def Test_missing_return()
'enddef'], 'E1095:')
enddef
+def Test_not_missing_return()
+ var lines =<< trim END
+ def Funky(): number
+ if false
+ return 0
+ endif
+ throw 'Error'
+ enddef
+ defcompile
+ END
+ v9.CheckScriptSuccess(lines)
+enddef
+
def Test_return_bool()
var lines =<< trim END
vim9script
diff --git a/src/version.c b/src/version.c
index 292f2285f..c0c1ca0d9 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1556,
+/**/
1555,
/**/
1554,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 477f5eed7..b894c6f29 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -3611,6 +3611,7 @@ compile_def_function(
break;
case CMD_throw:
line = compile_throw(p, &cctx);
+ cctx.ctx_had_return = TRUE;
break;
case CMD_eval: