Mercurial > vim
changeset 28095:8a80c48bd103 v8.2.4572
patch 8.2.4572: Vim9: return type "any" is changed to first returned type
Commit: https://github.com/vim/vim/commit/1a572e9b3b497e0412b4001cd9c6859db0c35412
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Mar 15 12:28:10 2022 +0000
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 15 Mar 2022 13:30:03 +0100 |
parents | 945bcf779047 |
children | 079a3f69681e |
files | src/testdir/test_vim9_func.vim src/version.c src/vim9cmds.c |
diffstat | 3 files changed, 27 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4572, +/**/ 4571, /**/ 4570,
--- a/src/vim9cmds.c +++ b/src/vim9cmds.c @@ -2258,8 +2258,7 @@ compile_return(char_u *arg, int check_re // 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)) {