Mercurial > vim
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)); |