summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/testdir/test_vim9_script.vim14
-rw-r--r--src/version.c2
-rw-r--r--src/vim9cmds.c2
3 files changed, 17 insertions, 1 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 05fd2fb57f..a0b8352f3f 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -2275,6 +2275,20 @@ def Test_for_loop()
v9.CheckDefAndScriptSuccess(lines)
enddef
+def Test_for_loop_list_of_lists()
+ # loop variable is final, not const
+ var lines =<< trim END
+ # Filter out all odd numbers in each sublist
+ var list: list<list<number>> = [[1], [1, 2], [1, 2, 3], [1, 2, 3, 4]]
+ for i in list
+ filter(i, (_, n: number): bool => n % 2 == 0)
+ endfor
+
+ assert_equal([[], [2], [2], [2, 4]], list)
+ END
+ v9.CheckDefAndScriptSuccess(lines)
+enddef
+
def Test_for_loop_with_closure()
# using the loop variable in a closure results in the last used value
var lines =<< trim END
diff --git a/src/version.c b/src/version.c
index aa5ca6794d..251ece71d0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 726,
+/**/
725,
/**/
724,
diff --git a/src/vim9cmds.c b/src/vim9cmds.c
index a1e8ac18c0..73f95b26df 100644
--- a/src/vim9cmds.c
+++ b/src/vim9cmds.c
@@ -1048,7 +1048,7 @@ compile_for(char_u *arg_start, cctx_T *cctx)
&& need_type_where(item_type, lhs_type, -1,
where, cctx, FALSE, FALSE) == FAIL)
goto failed;
- var_lvar = reserve_local(cctx, arg, varlen, ASSIGN_CONST,
+ var_lvar = reserve_local(cctx, arg, varlen, ASSIGN_FINAL,
lhs_type);
if (var_lvar == NULL)
// out of memory or used as an argument