patch 8.2.3118: Vim9: "any" type not handled correctly in for loop
Problem: Vim9: "any" type not handled correctly in for loop.
Solution: Change compile time check into runtime check. (closes #8516)
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 4abe401..60f51a4 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -2488,6 +2488,12 @@
endfor
assert_equal('foobar', chars)
+ chars = ''
+ for x: string in {a: 'a', b: 'b'}->values()
+ chars ..= x
+ endfor
+ assert_equal('ab', chars)
+
# unpack with type
var res = ''
for [n: number, s: string] in [[1, 'a'], [2, 'b']]
diff --git a/src/version.c b/src/version.c
index e1774a4..e080a2f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3118,
+/**/
3117,
/**/
3116,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 3a717e4..c1fc31e 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -7932,7 +7932,7 @@
if (lhs_type == &t_any)
lhs_type = item_type;
else if (item_type != &t_unknown
- && ((var_list && item_type == &t_any)
+ && (item_type == &t_any
? need_type(item_type, lhs_type,
-1, 0, cctx, FALSE, FALSE)
: check_type(lhs_type, item_type, TRUE, where))