# HG changeset patch # User vimboss # Date 1258456835 0 # Node ID 6ba0265d1f1b70b8a4a2b3337b18ded763f58f09 # Parent 1f53050b38688e127c4ea67251ab2730002541bd updated for version 7.2-295 diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -3802,7 +3802,8 @@ map({expr}, {string}) *map()* Replace each item in {expr} with the result of evaluating {string}. Inside {string} |v:val| has the value of the current item. - For a |Dictionary| |v:key| has the key of the current item. + For a |Dictionary| |v:key| has the key of the current item + and for a |List| |v:key| has the index of the current item. Example: > :call map(mylist, '"> " . v:val . " <"') < This puts "> " before and " <" after each item in "mylist". diff --git a/src/eval.c b/src/eval.c --- a/src/eval.c +++ b/src/eval.c @@ -9928,6 +9928,7 @@ filter_map(argvars, rettv, map) int todo; char_u *ermsg = map ? (char_u *)"map()" : (char_u *)"filter()"; int save_did_emsg; + int index = 0; if (argvars[0].v_type == VAR_LIST) { @@ -9961,9 +9962,9 @@ filter_map(argvars, rettv, map) save_did_emsg = did_emsg; did_emsg = FALSE; + prepare_vimvar(VV_KEY, &save_key); if (argvars[0].v_type == VAR_DICT) { - prepare_vimvar(VV_KEY, &save_key); vimvars[VV_KEY].vv_type = VAR_STRING; ht = &d->dv_hashtab; @@ -9987,24 +9988,27 @@ filter_map(argvars, rettv, map) } } hash_unlock(ht); - - restore_vimvar(VV_KEY, &save_key); - } - else - { + } + else + { + vimvars[VV_KEY].vv_type = VAR_NUMBER; + for (li = l->lv_first; li != NULL; li = nli) { if (tv_check_lock(li->li_tv.v_lock, ermsg)) break; nli = li->li_next; + vimvars[VV_KEY].vv_nr = index; if (filter_map_one(&li->li_tv, expr, map, &rem) == FAIL || did_emsg) break; if (!map && rem) listitem_remove(l, li); - } - } - + ++index; + } + } + + restore_vimvar(VV_KEY, &save_key); restore_vimvar(VV_VAL, &save_val); did_emsg |= save_did_emsg; diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -682,6 +682,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 295, +/**/ 294, /**/ 293,