mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
patch 9.1.0027: Vim is missing a foreach() func
Problem: Vim is missing a foreach() func Solution: Implement foreach({expr1}, {expr2}) function, which applies {expr2} for each item in {expr1} without changing it (Ernie Rael) closes: #12166 Signed-off-by: Ernie Rael <errael@raelity.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
d8cb1ddab7
commit
e79e207760
37
src/blob.c
37
src/blob.c
@@ -641,25 +641,28 @@ blob_filter_map(
|
||||
if (filter_map_one(&tv, expr, filtermap, fc, &newtv, &rem) == FAIL
|
||||
|| did_emsg)
|
||||
break;
|
||||
if (newtv.v_type != VAR_NUMBER && newtv.v_type != VAR_BOOL)
|
||||
if (filtermap != FILTERMAP_FOREACH)
|
||||
{
|
||||
clear_tv(&newtv);
|
||||
emsg(_(e_invalid_operation_for_blob));
|
||||
break;
|
||||
}
|
||||
if (filtermap != FILTERMAP_FILTER)
|
||||
{
|
||||
if (newtv.vval.v_number != val)
|
||||
blob_set(b_ret, i, newtv.vval.v_number);
|
||||
}
|
||||
else if (rem)
|
||||
{
|
||||
char_u *p = (char_u *)blob_arg->bv_ga.ga_data;
|
||||
if (newtv.v_type != VAR_NUMBER && newtv.v_type != VAR_BOOL)
|
||||
{
|
||||
clear_tv(&newtv);
|
||||
emsg(_(e_invalid_operation_for_blob));
|
||||
break;
|
||||
}
|
||||
if (filtermap != FILTERMAP_FILTER)
|
||||
{
|
||||
if (newtv.vval.v_number != val)
|
||||
blob_set(b_ret, i, newtv.vval.v_number);
|
||||
}
|
||||
else if (rem)
|
||||
{
|
||||
char_u *p = (char_u *)blob_arg->bv_ga.ga_data;
|
||||
|
||||
mch_memmove(p + i, p + i + 1,
|
||||
(size_t)b->bv_ga.ga_len - i - 1);
|
||||
--b->bv_ga.ga_len;
|
||||
--i;
|
||||
mch_memmove(p + i, p + i + 1,
|
||||
(size_t)b->bv_ga.ga_len - i - 1);
|
||||
--b->bv_ga.ga_len;
|
||||
--i;
|
||||
}
|
||||
}
|
||||
++idx;
|
||||
}
|
||||
|
Reference in New Issue
Block a user