forked from aniani/vim
patch 8.2.4629: flattennew() makes a deep copy unnecessarily
Problem: flattennew() makes a deep copy unnecessarily. Solution: Use a shallow copy. (issue #10012)
This commit is contained in:
@@ -925,7 +925,6 @@ list_assign_range(
|
|||||||
list_flatten(list_T *list, listitem_T *first, long maxitems, long maxdepth)
|
list_flatten(list_T *list, listitem_T *first, long maxitems, long maxdepth)
|
||||||
{
|
{
|
||||||
listitem_T *item;
|
listitem_T *item;
|
||||||
listitem_T *tofree;
|
|
||||||
int done = 0;
|
int done = 0;
|
||||||
|
|
||||||
if (maxdepth == 0)
|
if (maxdepth == 0)
|
||||||
@@ -955,13 +954,12 @@ list_flatten(list_T *list, listitem_T *first, long maxitems, long maxdepth)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
clear_tv(&item->li_tv);
|
clear_tv(&item->li_tv);
|
||||||
tofree = item;
|
|
||||||
|
|
||||||
if (maxdepth > 0)
|
if (maxdepth > 0)
|
||||||
list_flatten(list, item->li_prev == NULL
|
list_flatten(list, item->li_prev == NULL
|
||||||
? list->lv_first : item->li_prev->li_next,
|
? list->lv_first : item->li_prev->li_next,
|
||||||
itemlist->lv_len, maxdepth - 1);
|
itemlist->lv_len, maxdepth - 1);
|
||||||
list_free_item(list, tofree);
|
list_free_item(list, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
++done;
|
++done;
|
||||||
@@ -1012,7 +1010,7 @@ flatten_common(typval_T *argvars, typval_T *rettv, int make_copy)
|
|||||||
|
|
||||||
if (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;
|
rettv->vval.v_list = l;
|
||||||
if (l == NULL)
|
if (l == NULL)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
4629,
|
||||||
/**/
|
/**/
|
||||||
4628,
|
4628,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user