Mercurial > vim
comparison src/dict.c @ 34126:da670b1549b3 v9.1.0027
patch 9.1.0027: Vim is missing a foreach() func
Commit: https://github.com/vim/vim/commit/e79e2077607e8f829ba823308c91104a795736ba
Author: Ernie Rael <errael@raelity.com>
Date: Sat Jan 13 11:47:33 2024 +0100
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>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 13 Jan 2024 12:00:06 +0100 |
parents | aceaf677dd92 |
children | 0cc43bca5bd9 |
comparison
equal
deleted
inserted
replaced
34125:93171f4925c5 | 34126:da670b1549b3 |
---|---|
1327 else | 1327 else |
1328 copy_tv(&argvars[0], rettv); | 1328 copy_tv(&argvars[0], rettv); |
1329 } | 1329 } |
1330 | 1330 |
1331 /* | 1331 /* |
1332 * Implementation of map() and filter() for a Dict. Apply "expr" to every | 1332 * Implementation of map(), filter(), foreach() for a Dict. Apply "expr" to |
1333 * item in Dict "d" and return the result in "rettv". | 1333 * every item in Dict "d" and return the result in "rettv". |
1334 */ | 1334 */ |
1335 void | 1335 void |
1336 dict_filter_map( | 1336 dict_filter_map( |
1337 dict_T *d, | 1337 dict_T *d, |
1338 filtermap_T filtermap, | 1338 filtermap_T filtermap, |
1390 arg_errmsg, TRUE) | 1390 arg_errmsg, TRUE) |
1391 || var_check_ro(di->di_flags, | 1391 || var_check_ro(di->di_flags, |
1392 arg_errmsg, TRUE))) | 1392 arg_errmsg, TRUE))) |
1393 break; | 1393 break; |
1394 set_vim_var_string(VV_KEY, di->di_key, -1); | 1394 set_vim_var_string(VV_KEY, di->di_key, -1); |
1395 newtv.v_type = VAR_UNKNOWN; | |
1396 r = filter_map_one(&di->di_tv, expr, filtermap, fc, &newtv, &rem); | 1395 r = filter_map_one(&di->di_tv, expr, filtermap, fc, &newtv, &rem); |
1397 clear_tv(get_vim_var_tv(VV_KEY)); | 1396 clear_tv(get_vim_var_tv(VV_KEY)); |
1398 if (r == FAIL || did_emsg) | 1397 if (r == FAIL || did_emsg) |
1399 { | 1398 { |
1400 clear_tv(&newtv); | 1399 clear_tv(&newtv); |