forked from aniani/vim
patch 7.4.2090
Problem: Using submatch() in a lambda passed to substitute() is verbose.
Solution: Use a static list and pass it as an optional argument to the
function. Fix memory leak.
This commit is contained in:
31
src/list.c
31
src/list.c
@@ -924,4 +924,35 @@ write_list(FILE *fd, list_T *list, int binary)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize a static list with 10 items.
|
||||
*/
|
||||
void
|
||||
init_static_list(staticList10_T *sl)
|
||||
{
|
||||
list_T *l = &sl->sl_list;
|
||||
int i;
|
||||
|
||||
memset(sl, 0, sizeof(staticList10_T));
|
||||
l->lv_first = &sl->sl_items[0];
|
||||
l->lv_last = &sl->sl_items[9];
|
||||
l->lv_refcount = DO_NOT_FREE_CNT;
|
||||
l->lv_lock = VAR_FIXED;
|
||||
sl->sl_list.lv_len = 10;
|
||||
|
||||
for (i = 0; i < 10; ++i)
|
||||
{
|
||||
listitem_T *li = &sl->sl_items[i];
|
||||
|
||||
if (i == 0)
|
||||
li->li_prev = NULL;
|
||||
else
|
||||
li->li_prev = li - 1;
|
||||
if (i == 9)
|
||||
li->li_next = NULL;
|
||||
else
|
||||
li->li_next = li + 1;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* defined(FEAT_EVAL) */
|
||||
|
||||
Reference in New Issue
Block a user