comparison src/proto/eval.pro @ 6565:38add5a3d617 v7.4.609

updated for version 7.4.609 Problem: For complicated list and dict use the garbage collector can run out of stack space. Solution: Use a stack of dicts and lists to be marked, thus making it iterative instead of recursive. (Ben Fritz)
author Bram Moolenaar <bram@vim.org>
date Tue, 03 Feb 2015 12:55:18 +0100
parents e13f8073c9f9
children 676906c33768
comparison
equal deleted inserted replaced
6564:84171683fd66 6565:38add5a3d617
60 int list_append_string __ARGS((list_T *l, char_u *str, int len)); 60 int list_append_string __ARGS((list_T *l, char_u *str, int len));
61 int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item)); 61 int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
62 void list_insert __ARGS((list_T *l, listitem_T *ni, listitem_T *item)); 62 void list_insert __ARGS((list_T *l, listitem_T *ni, listitem_T *item));
63 void vimlist_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2)); 63 void vimlist_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
64 int garbage_collect __ARGS((void)); 64 int garbage_collect __ARGS((void));
65 void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID)); 65 int set_ref_in_ht __ARGS((hashtab_T *ht, int copyID, list_stack_T **list_stack));
66 void set_ref_in_list __ARGS((list_T *l, int copyID)); 66 int set_ref_in_list __ARGS((list_T *l, int copyID, ht_stack_T **ht_stack));
67 void set_ref_in_item __ARGS((typval_T *tv, int copyID)); 67 int set_ref_in_item __ARGS((typval_T *tv, int copyID, ht_stack_T **ht_stack, list_stack_T **list_stack));
68 dict_T *dict_alloc __ARGS((void)); 68 dict_T *dict_alloc __ARGS((void));
69 void dict_unref __ARGS((dict_T *d)); 69 void dict_unref __ARGS((dict_T *d));
70 void dict_free __ARGS((dict_T *d, int recurse)); 70 void dict_free __ARGS((dict_T *d, int recurse));
71 dictitem_T *dictitem_alloc __ARGS((char_u *key)); 71 dictitem_T *dictitem_alloc __ARGS((char_u *key));
72 void dictitem_free __ARGS((dictitem_T *item)); 72 void dictitem_free __ARGS((dictitem_T *item));