diff options
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 84721feade..338ee9dfed 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -5604,14 +5604,27 @@ bool garbage_collect(void) const void *reg_iter = NULL; do { yankreg_T reg; - char name; + char name = NUL; reg_iter = op_register_iter(reg_iter, &name, ®); - if (reg.y_array != NULL) { + if (name != NUL) { ABORTING(set_ref_dict)(reg.additional_data, copyID); } } while (reg_iter != NULL); } + // global marks (ShaDa additional data) + { + const void *mark_iter = NULL; + do { + xfmark_T fm; + char name = NUL; + mark_iter = mark_global_iter(mark_iter, &name, &fm); + if (name != NUL) { + ABORTING(set_ref_dict)(fm.fmark.additional_data, copyID); + } + } while (mark_iter != NULL); + } + // tabpage-local variables FOR_ALL_TABS(tp) { ABORTING(set_ref_in_item)(&tp->tp_winvar.di_tv, copyID, NULL, NULL); @@ -20882,7 +20895,7 @@ static var_flavour_T var_flavour(char_u *varname) /// or NULL to indicate that iteration is over. const void *var_shada_iter(const void *const iter, const char **const name, typval_T *rettv) - FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ARG(2, 3) + FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ARG(2, 3) { const hashitem_T *hi; const hashitem_T *hifirst = globvarht.ht_array; |