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)
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
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 4572,
/**/
4571,
/**/
// 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))
{