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);