diff src/list.c @ 9626:172131507c85 v7.4.2090

commit https://github.com/vim/vim/commit/df48fb456fb6bf63d94cad9b302ff01d8ee8d311 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jul 22 21:50:18 2016 +0200 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.
author Christian Brabandt <cb@256bit.org>
date Fri, 22 Jul 2016 22:00:07 +0200
parents 5eaa708ab50d
children 4aead6a9b7a9
line wrap: on
line diff
--- a/src/list.c
+++ b/src/list.c
@@ -924,4 +924,35 @@ write_list(FILE *fd, list_T *list, int b
     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) */