]> granicus.if.org Git - vim/commitdiff
patch 8.2.4629: flattennew() makes a deep copy unnecessarily v8.2.4629
authorBram Moolenaar <Bram@vim.org>
Sat, 26 Mar 2022 10:50:11 +0000 (10:50 +0000)
committerBram Moolenaar <Bram@vim.org>
Sat, 26 Mar 2022 10:50:11 +0000 (10:50 +0000)
Problem:    flattennew() makes a deep copy unnecessarily.
Solution:   Use a shallow copy. (issue #10012)

src/list.c
src/version.c

index 9309048174572449b4cfc5b514d16b0b61a8468d..3354068a4dd18ce9b930461ff026d0a001c0e18a 100644 (file)
@@ -925,7 +925,6 @@ list_assign_range(
 list_flatten(list_T *list, listitem_T *first, long maxitems, long maxdepth)
 {
     listitem_T *item;
-    listitem_T *tofree;
     int                done = 0;
 
     if (maxdepth == 0)
@@ -955,13 +954,12 @@ list_flatten(list_T *list, listitem_T *first, long maxitems, long maxdepth)
                return;
            }
            clear_tv(&item->li_tv);
-           tofree = item;
 
            if (maxdepth > 0)
                list_flatten(list, item->li_prev == NULL
                                     ? list->lv_first : item->li_prev->li_next,
                                itemlist->lv_len, maxdepth - 1);
-           list_free_item(list, tofree);
+           list_free_item(list, item);
        }
 
        ++done;
@@ -1012,7 +1010,7 @@ flatten_common(typval_T *argvars, typval_T *rettv, int make_copy)
 
     if (make_copy)
     {
-       l = list_copy(l, TRUE, TRUE, get_copyID());
+       l = list_copy(l, FALSE, TRUE, get_copyID());
        rettv->vval.v_list = l;
        if (l == NULL)
            return;
index 60b4c1d680d331222b3f740ef5885176b5b0a322..a68c88137ba262f0291db158a83a220a58b5ccdc 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4629,
 /**/
     4628,
 /**/