]> granicus.if.org Git - vim/commitdiff
updated for version 7.2-295 v7.2.295
authorBram Moolenaar <Bram@vim.org>
Tue, 17 Nov 2009 11:20:35 +0000 (11:20 +0000)
committerBram Moolenaar <Bram@vim.org>
Tue, 17 Nov 2009 11:20:35 +0000 (11:20 +0000)
runtime/doc/eval.txt
src/eval.c
src/version.c

index ba498af2f7c0bf2e0af7c11a21ff14b9470b92e5..afa38a49356fb56a5e279dbe6a0c10a8d0fc5151 100644 (file)
@@ -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".
index 40fcfefbf6001f6197e69060b946fc015c8e98d7..9f70467703519beb0013b78fc5ab8f4da87f2381 100644 (file)
@@ -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
        {
+           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;
index e98bda8a81a0c976ef98c4e94041907753389cfb..19ac2a8f8dfb8f1052e8c902fadcfbb80974c70c 100644 (file)
@@ -681,6 +681,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    295,
 /**/
     294,
 /**/