mirror of
https://github.com/vim/vim.git
synced 2025-10-03 05:14:07 -04:00
patch 8.2.2073: Vim9: for with unpack only works for local variables
Problem: Vim9: for with unpack only works for local variables. Solution: Recognize different destinations.
This commit is contained in:
@@ -1863,22 +1863,49 @@ def Test_for_loop_fails()
|
||||
enddef
|
||||
|
||||
def Test_for_loop_unpack()
|
||||
var result = []
|
||||
for [v1, v2] in [[1, 2], [3, 4]]
|
||||
result->add(v1)
|
||||
result->add(v2)
|
||||
endfor
|
||||
assert_equal([1, 2, 3, 4], result)
|
||||
|
||||
result = []
|
||||
for [v1, v2; v3] in [[1, 2], [3, 4, 5, 6]]
|
||||
result->add(v1)
|
||||
result->add(v2)
|
||||
result->add(v3)
|
||||
endfor
|
||||
assert_equal([1, 2, [], 3, 4, [5, 6]], result)
|
||||
|
||||
var lines =<< trim END
|
||||
var result = []
|
||||
for [v1, v2] in [[1, 2], [3, 4]]
|
||||
result->add(v1)
|
||||
result->add(v2)
|
||||
endfor
|
||||
assert_equal([1, 2, 3, 4], result)
|
||||
|
||||
result = []
|
||||
for [v1, v2; v3] in [[1, 2], [3, 4, 5, 6]]
|
||||
result->add(v1)
|
||||
result->add(v2)
|
||||
result->add(v3)
|
||||
endfor
|
||||
assert_equal([1, 2, [], 3, 4, [5, 6]], result)
|
||||
|
||||
result = []
|
||||
for [&ts, &sw] in [[1, 2], [3, 4]]
|
||||
result->add(&ts)
|
||||
result->add(&sw)
|
||||
endfor
|
||||
assert_equal([1, 2, 3, 4], result)
|
||||
|
||||
var slist: list<string>
|
||||
for [$LOOPVAR, @r, v:errmsg] in [['a', 'b', 'c'], ['d', 'e', 'f']]
|
||||
slist->add($LOOPVAR)
|
||||
slist->add(@r)
|
||||
slist->add(v:errmsg)
|
||||
endfor
|
||||
assert_equal(['a', 'b', 'c', 'd', 'e', 'f'], slist)
|
||||
|
||||
slist = []
|
||||
for [g:globalvar, b:bufvar, w:winvar, t:tabvar] in [['global', 'buf', 'win', 'tab'], ['1', '2', '3', '4']]
|
||||
slist->add(g:globalvar)
|
||||
slist->add(b:bufvar)
|
||||
slist->add(w:winvar)
|
||||
slist->add(t:tabvar)
|
||||
endfor
|
||||
assert_equal(['global', 'buf', 'win', 'tab', '1', '2', '3', '4'], slist)
|
||||
END
|
||||
CheckDefAndScriptSuccess(lines)
|
||||
|
||||
lines =<< trim END
|
||||
for [v1, v2] in [[1, 2, 3], [3, 4]]
|
||||
echo v1 v2
|
||||
endfor
|
||||
|
Reference in New Issue
Block a user