patch 8.2.3117: Vim9: type not properly checked in for loop
Problem: Vim9: type not properly checked in for loop.
Solution: Have items() return a list of lists. Add runtime type checks.
(closes #8515)
diff --git a/src/vim9compile.c b/src/vim9compile.c
index d630736..3a717e4 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -7932,8 +7932,11 @@
if (lhs_type == &t_any)
lhs_type = item_type;
else if (item_type != &t_unknown
- && !(var_list && item_type == &t_any)
- && check_type(lhs_type, item_type, TRUE, where) == FAIL)
+ && ((var_list && item_type == &t_any)
+ ? need_type(item_type, lhs_type,
+ -1, 0, cctx, FALSE, FALSE)
+ : check_type(lhs_type, item_type, TRUE, where))
+ == FAIL)
goto failed;
var_lvar = reserve_local(cctx, arg, varlen, TRUE, lhs_type);
if (var_lvar == NULL)