patch 8.2.3230: Vim9: type error when function return type is not known yet
Problem: Vim9: type error when function return type is not known yet.
Solution: When return type is unknown, use "any". (closes #8644)
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim
index 2001079..bd52f70 100644
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -1172,6 +1172,16 @@
var F: func = function('min', [[5, 8, 6]])
F->get('name')->assert_equal('min')
F->get('args')->assert_equal([[5, 8, 6]])
+
+ var lines =<< trim END
+ vim9script
+ def DoThat(): number
+ var Getqflist: func = function('getqflist', [{id: 42}])
+ return Getqflist()->get('id', 77)
+ enddef
+ assert_equal(0, DoThat())
+ END
+ CheckScriptSuccess(lines)
enddef
def Test_getbufinfo()
diff --git a/src/version.c b/src/version.c
index a628f51..425f8f3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3230,
+/**/
3229,
/**/
3228,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 7d169f8..0d54db3 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -2130,6 +2130,9 @@
}
}
ret_type = type->tt_member;
+ if (ret_type == &t_unknown)
+ // return type not known yet, use a runtime check
+ ret_type = &t_any;
}
else
{