From a3589a0d6cdb314e70421c0f2e5a2d1abf68e597 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 14 Apr 2021 13:30:46 +0200 Subject: patch 8.2.2763: Vim9: cannot use type in for loop unpack at script level Problem: Vim9: cannot use type in for loop unpack at script level. Solution: Advance over the type name. --- src/evalvars.c | 2 +- src/testdir/test_vim9_script.vim | 23 +++++++++++++++-------- src/version.c | 2 ++ 3 files changed, 18 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/evalvars.c b/src/evalvars.c index eb9ad6da16..ebfc42b187 100644 --- a/src/evalvars.c +++ b/src/evalvars.c @@ -1523,7 +1523,7 @@ ex_let_one( else { set_var_lval(&lv, p, tv, copy, flags, op, var_idx); - arg_end = p; + arg_end = lv.ll_name_end; } } clear_lval(&lv); diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index af7e5fdbb6..03da2fd86f 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -2336,8 +2336,22 @@ def Test_for_loop() endfor assert_equal(6, total) - # loop over string + # with type + total = 0 + for n: number in [1, 2, 3] + total += n + endfor + assert_equal(6, total) + + # unpack with type var res = '' + for [n: number, s: string] in [[1, 'a'], [2, 'b']] + res ..= n .. s + endfor + assert_equal('1a2b', res) + + # loop over string + res = '' for c in 'aéc̀d' res ..= c .. '-' endfor @@ -2364,13 +2378,6 @@ def Test_for_loop() assert_equal([{a: 'Cat', counter: 12}], foo) END CheckDefAndScriptSuccess(lines) - - # TODO: should also work at script level - var res = "" - for [n: number, s: string] in [[1, 'a'], [2, 'b']] - res ..= n .. s - endfor - assert_equal('1a2b', res) enddef def Test_for_loop_fails() diff --git a/src/version.c b/src/version.c index 72da5f91ba..3dee026c1d 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2763, /**/ 2762, /**/ -- cgit v1.2.3