diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/eval.c | 19 | ||||
-rw-r--r-- | src/nvim/mark.c | 40 | ||||
-rw-r--r-- | src/nvim/ops.c | 8 | ||||
-rw-r--r-- | src/nvim/shada.c | 18 |
4 files changed, 35 insertions, 50 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; diff --git a/src/nvim/mark.c b/src/nvim/mark.c index a134905d98..db0f18c3a5 100644 --- a/src/nvim/mark.c +++ b/src/nvim/mark.c @@ -1173,7 +1173,7 @@ void copy_jumplist(win_T *from, win_T *to) /// NULL if iteration is over. const void *mark_jumplist_iter(const void *const iter, const win_T *const win, xfmark_T *const fm) - FUNC_ATTR_PURE FUNC_ATTR_NONNULL_ARG(2, 3) FUNC_ATTR_WARN_UNUSED_RESULT + FUNC_ATTR_NONNULL_ARG(2, 3) FUNC_ATTR_WARN_UNUSED_RESULT { if (iter == NULL && win->w_jumplistlen == 0) { *fm = (xfmark_T) {{{0, 0, 0}, 0, 0, NULL}, NULL}; @@ -1204,8 +1204,9 @@ const void *mark_jumplist_iter(const void *const iter, const win_T *const win, /// NULL if iteration is over. const void *mark_global_iter(const void *const iter, char *const name, xfmark_T *const fm) - FUNC_ATTR_PURE FUNC_ATTR_NONNULL_ARG(2, 3) FUNC_ATTR_WARN_UNUSED_RESULT + FUNC_ATTR_NONNULL_ARG(2, 3) FUNC_ATTR_WARN_UNUSED_RESULT { + *name = NUL; const xfmark_T *iter_mark = (iter == NULL ? &(namedfm[0]) : (const xfmark_T *const) iter); @@ -1215,7 +1216,6 @@ const void *mark_global_iter(const void *const iter, char *const name, } if ((size_t) (iter_mark - &(namedfm[0])) == ARRAY_SIZE(namedfm) || !iter_mark->fmark.mark.lnum) { - *fm = (xfmark_T) { .fmark = { .mark = { .lnum = 0 } } }; return NULL; } size_t iter_off = (size_t) (iter_mark - &(namedfm[0])); @@ -1244,7 +1244,7 @@ const void *mark_global_iter(const void *const iter, char *const name, /// @return Pointer to the next mark or NULL. static inline const fmark_T *next_buffer_mark(const buf_T *const buf, char *const mark_name) - FUNC_ATTR_NONNULL_ALL + FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT { switch (*mark_name) { case NUL: { @@ -1287,8 +1287,9 @@ static inline const fmark_T *next_buffer_mark(const buf_T *const buf, /// NULL if iteration is over. const void *mark_buffer_iter(const void *const iter, const buf_T *const buf, char *const name, fmark_T *const fm) - FUNC_ATTR_PURE FUNC_ATTR_NONNULL_ARG(2, 3, 4) FUNC_ATTR_WARN_UNUSED_RESULT + FUNC_ATTR_NONNULL_ARG(2, 3, 4) FUNC_ATTR_WARN_UNUSED_RESULT { + *name = NUL; char mark_name = (char) (iter == NULL ? NUL : (iter == &(buf->b_last_cursor) @@ -1304,7 +1305,6 @@ const void *mark_buffer_iter(const void *const iter, const buf_T *const buf, iter_mark = next_buffer_mark(buf, &mark_name); } if (iter_mark == NULL) { - *fm = (fmark_T) {.mark = {.lnum = 0}}; return NULL; } size_t iter_off = (size_t) (iter_mark - &(buf->b_namedm[0])); @@ -1317,34 +1317,6 @@ const void *mark_buffer_iter(const void *const iter, const buf_T *const buf, return (const void *) iter_mark; } -/// Get a number of valid marks -size_t mark_global_amount(void) - FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT -{ - size_t ret = 0; - for (size_t i = 0; i < NGLOBALMARKS; i++) { - if (namedfm[i].fmark.mark.lnum != 0) { - ret++; - } - } - return ret; -} - -/// Get a number of valid marks -size_t mark_buffer_amount(const buf_T *const buf) - FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL -{ - size_t ret = (size_t) ((buf->b_last_cursor.mark.lnum != 0) - + (buf->b_last_insert.mark.lnum != 0) - + (buf->b_last_change.mark.lnum != 0)); - for (size_t i = 0; i < NMARKS; i++) { - if (buf->b_namedm[i].mark.lnum != 0) { - ret++; - } - } - return ret; -} - /// Set global mark /// /// @param[in] name Mark name. diff --git a/src/nvim/ops.c b/src/nvim/ops.c index f7219aba31..d59630697d 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -5312,7 +5312,7 @@ void end_global_changes(void) /// Check whether register is empty static inline bool reg_empty(const yankreg_T *const reg) - FUNC_ATTR_CONST + FUNC_ATTR_PURE { return (reg->y_array == NULL || reg->y_size == 0 @@ -5331,8 +5331,9 @@ static inline bool reg_empty(const yankreg_T *const reg) /// NULL if iteration is over. const void *op_register_iter(const void *const iter, char *const name, yankreg_T *const reg) - FUNC_ATTR_PURE FUNC_ATTR_NONNULL_ARG(2, 3) FUNC_ATTR_WARN_UNUSED_RESULT + FUNC_ATTR_NONNULL_ARG(2, 3) FUNC_ATTR_WARN_UNUSED_RESULT { + *name = NUL; const yankreg_T *iter_reg = (iter == NULL ? &(y_regs[0]) : (const yankreg_T *const) iter); @@ -5340,7 +5341,6 @@ const void *op_register_iter(const void *const iter, char *const name, iter_reg++; } if (iter_reg - &(y_regs[0]) == NUM_SAVED_REGISTERS || reg_empty(iter_reg)) { - *reg = (yankreg_T) { .y_array = NULL }; return NULL; } size_t iter_off = iter_reg - &(y_regs[0]); @@ -5356,7 +5356,7 @@ const void *op_register_iter(const void *const iter, char *const name, /// Get a number of non-empty registers size_t op_register_amount(void) - FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT + FUNC_ATTR_WARN_UNUSED_RESULT { size_t ret = 0; for (size_t i = 0; i < NUM_SAVED_REGISTERS; i++) { diff --git a/src/nvim/shada.c b/src/nvim/shada.c index b5e60d0c08..314fc7e9db 100644 --- a/src/nvim/shada.c +++ b/src/nvim/shada.c @@ -1037,8 +1037,8 @@ static void hms_insert(HistoryMergerState *const hms_p, const ShadaEntry entry, } } else { while (hms_p->iter != NULL - && hms_p->last_hist_entry.type != kSDItemMissing - && hms_p->last_hist_entry.timestamp < entry.timestamp) { + && hms_p->last_hist_entry.type != kSDItemMissing + && hms_p->last_hist_entry.timestamp < entry.timestamp) { hms_insert(hms_p, hms_p->last_hist_entry, false, hms_p->reading); hms_p->iter = shada_hist_iter(hms_p->iter, hms_p->history_type, hms_p->reading, @@ -1111,7 +1111,7 @@ static inline void hms_insert_whole_neovim_history( hms_insert(hms_p, hms_p->last_hist_entry, false, hms_p->reading); } while (hms_p->iter != NULL - && hms_p->last_hist_entry.type != kSDItemMissing) { + && hms_p->last_hist_entry.type != kSDItemMissing) { hms_p->iter = shada_hist_iter(hms_p->iter, hms_p->history_type, hms_p->reading, &(hms_p->last_hist_entry)); @@ -2631,10 +2631,10 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer, if (dump_global_marks) { const void *global_mark_iter = NULL; do { - char name; + char name = NUL; xfmark_T fm; global_mark_iter = mark_global_iter(global_mark_iter, &name, &fm); - if (fm.fmark.mark.lnum == 0) { + if (name == NUL) { break; } const char *fname; @@ -2675,9 +2675,9 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer, 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) { break; } if (limit_reg_lines && reg.y_size > max_reg_lines) { @@ -2721,9 +2721,9 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer, } do { fmark_T fm; - char name; + char name = NUL; local_marks_iter = mark_buffer_iter(local_marks_iter, buf, &name, &fm); - if (fm.mark.lnum == 0) { + if (name == NUL) { break; } filemarks->marks[mark_local_index(name)] = (PossiblyFreedShadaEntry) { |