patch 7.4.2057
Problem:    eval.c is too big.
Solution:   Move List functions to list.c
diff --git a/src/proto/eval.pro b/src/proto/eval.pro
index 78288e6..ee663ee 100644
--- a/src/proto/eval.pro
+++ b/src/proto/eval.pro
@@ -33,8 +33,6 @@
 void prof_child_exit(proftime_T *tm);
 int eval_foldexpr(char_u *arg, int *cp);
 void ex_let(exarg_T *eap);
-void list_add_watch(list_T *l, listwatch_T *lw);
-void list_rem_watch(list_T *l, listwatch_T *lwrem);
 void *eval_for_line(char_u *arg, int *errp, char_u **nextcmdp, int skip);
 int next_for_item(void *fi_void, char_u *arg);
 void free_for_info(void *fi_void);
@@ -47,24 +45,7 @@
 char_u *get_user_var_name(expand_T *xp, int idx);
 int eval1(char_u **arg, typval_T *rettv, int evaluate);
 void partial_unref(partial_T *pt);
-list_T *list_alloc(void);
-int rettv_list_alloc(typval_T *rettv);
-void list_unref(list_T *l);
-void list_free(list_T *l);
-listitem_T *listitem_alloc(void);
-void listitem_free(listitem_T *item);
-void listitem_remove(list_T *l, listitem_T *item);
 int tv_equal(typval_T *tv1, typval_T *tv2, int ic, int recursive);
-listitem_T *list_find(list_T *l, long n);
-char_u *list_find_str(list_T *l, long idx);
-void list_append(list_T *l, listitem_T *item);
-int list_append_tv(list_T *l, typval_T *tv);
-int list_append_dict(list_T *list, dict_T *dict);
-int list_append_string(list_T *l, char_u *str, int len);
-int list_append_number(list_T *l, varnumber_T n);
-int list_insert_tv(list_T *l, typval_T *tv, listitem_T *item);
-void list_insert(list_T *l, listitem_T *ni, listitem_T *item);
-void vimlist_remove(list_T *l, listitem_T *item, listitem_T *item2);
 int get_copyID(void);
 int garbage_collect(int testing);
 int set_ref_in_ht(hashtab_T *ht, int copyID, list_stack_T **list_stack);
diff --git a/src/proto/list.pro b/src/proto/list.pro
new file mode 100644
index 0000000..602166a
--- /dev/null
+++ b/src/proto/list.pro
@@ -0,0 +1,34 @@
+/* list.c */
+void list_add_watch(list_T *l, listwatch_T *lw);
+void list_rem_watch(list_T *l, listwatch_T *lwrem);
+void list_fix_watch(list_T *l, listitem_T *item);
+list_T *list_alloc(void);
+int rettv_list_alloc(typval_T *rettv);
+void list_unref(list_T *l);
+int list_free_nonref(int copyID);
+void list_free_items(int copyID);
+void list_free(list_T *l);
+listitem_T *listitem_alloc(void);
+void listitem_free(listitem_T *item);
+void listitem_remove(list_T *l, listitem_T *item);
+long list_len(list_T *l);
+int list_equal(list_T *l1, list_T *l2, int ic, int recursive);
+listitem_T *list_find(list_T *l, long n);
+long list_find_nr(list_T *l, long idx, int *errorp);
+char_u *list_find_str(list_T *l, long idx);
+long list_idx_of_item(list_T *l, listitem_T *item);
+void list_append(list_T *l, listitem_T *item);
+int list_append_tv(list_T *l, typval_T *tv);
+int list_append_dict(list_T *list, dict_T *dict);
+int list_append_string(list_T *l, char_u *str, int len);
+int list_append_number(list_T *l, varnumber_T n);
+int list_insert_tv(list_T *l, typval_T *tv, listitem_T *item);
+void list_insert(list_T *l, listitem_T *ni, listitem_T *item);
+int list_extend(list_T *l1, list_T *l2, listitem_T *bef);
+int list_concat(list_T *l1, list_T *l2, typval_T *tv);
+list_T *list_copy(list_T *orig, int deep, int copyID);
+void vimlist_remove(list_T *l, listitem_T *item, listitem_T *item2);
+char_u *list2string(typval_T *tv, int copyID, int restore_copyID);
+int list_join(garray_T *gap, list_T *l, char_u *sep, int echo_style, int restore_copyID, int copyID);
+int get_list_tv(char_u **arg, typval_T *rettv, int evaluate);
+/* vim: set ft=c : */