From: Bram Moolenaar Date: Tue, 15 Mar 2022 12:28:10 +0000 (+0000) Subject: patch 8.2.4572: Vim9: return type "any" is changed to first returned type X-Git-Tag: v8.2.4572 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1a572e9b3b497e0412b4001cd9c6859db0c35412;p=vim patch 8.2.4572: Vim9: return type "any" is changed to first returned type Problem: Vim9: return type "any" is sometimes changed to first returned type. (Virginia Senioria) Solution: Do not change the return type if declared as "any". (closes #9949) --- diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index 8c99ad400..06f135a45 100644 --- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -535,6 +535,30 @@ def Test_return_list_any() v9.CheckScriptSuccess(lines) enddef +def Test_return_any_two_types() + var lines =<< trim END + vim9script + + def G(Fn: func(string): any) + g:result = Fn("hello") + enddef + + def F(a: number, b: string): any + echo b + if a > 0 + return 1 + else + return [] + endif + enddef + + G(function(F, [1])) + END + v9.CheckScriptSuccess(lines) + assert_equal(1, g:result) + unlet g:result +enddef + func s:Increment() let g:counter += 1 endfunc diff --git a/src/version.c b/src/version.c index 777f13116..d9752fd10 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 */ +/**/ + 4572, /**/ 4571, /**/ diff --git a/src/vim9cmds.c b/src/vim9cmds.c index b8a511f27..cc2c04158 100644 --- a/src/vim9cmds.c +++ b/src/vim9cmds.c @@ -2258,8 +2258,7 @@ compile_return(char_u *arg, int check_return_type, int legacy, cctx_T *cctx) // return type here. stack_type = get_type_on_stack(cctx, 0); if ((check_return_type && (cctx->ctx_ufunc->uf_ret_type == NULL - || cctx->ctx_ufunc->uf_ret_type == &t_unknown - || cctx->ctx_ufunc->uf_ret_type == &t_any)) + || cctx->ctx_ufunc->uf_ret_type == &t_unknown)) || (!check_return_type && cctx->ctx_ufunc->uf_ret_type == &t_unknown)) {