diff options
author | Bram Moolenaar <Bram@vim.org> | 2015-02-03 12:55:18 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2015-02-03 12:55:18 +0100 |
commit | 2459a5ecaa43c8549ea53e9364253ff891676da5 (patch) | |
tree | b503323856e11d0e1e47e6c81875d32b1541ee04 /src/proto/eval.pro | |
parent | 4ac163ae5f137af236931e778660cf7878d70c25 (diff) |
updated for version 7.4.609v7.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)
Diffstat (limited to 'src/proto/eval.pro')
-rw-r--r-- | src/proto/eval.pro | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/proto/eval.pro b/src/proto/eval.pro index b264365fe1..30416fb878 100644 --- a/src/proto/eval.pro +++ b/src/proto/eval.pro @@ -62,9 +62,9 @@ int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item)); void list_insert __ARGS((list_T *l, listitem_T *ni, listitem_T *item)); void vimlist_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2)); int garbage_collect __ARGS((void)); -void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID)); -void set_ref_in_list __ARGS((list_T *l, int copyID)); -void set_ref_in_item __ARGS((typval_T *tv, int copyID)); +int set_ref_in_ht __ARGS((hashtab_T *ht, int copyID, list_stack_T **list_stack)); +int set_ref_in_list __ARGS((list_T *l, int copyID, ht_stack_T **ht_stack)); +int set_ref_in_item __ARGS((typval_T *tv, int copyID, ht_stack_T **ht_stack, list_stack_T **list_stack)); dict_T *dict_alloc __ARGS((void)); void dict_unref __ARGS((dict_T *d)); void dict_free __ARGS((dict_T *d, int recurse)); |