mirror of
https://github.com/neovim/neovim.git
synced 2025-09-15 15:58:17 +00:00
*: Fix problems with clang+asan Release build
This commit is contained in:
@@ -5604,14 +5604,27 @@ bool garbage_collect(void)
|
|||||||
const void *reg_iter = NULL;
|
const void *reg_iter = NULL;
|
||||||
do {
|
do {
|
||||||
yankreg_T reg;
|
yankreg_T reg;
|
||||||
char name;
|
char name = NUL;
|
||||||
reg_iter = op_register_iter(reg_iter, &name, ®);
|
reg_iter = op_register_iter(reg_iter, &name, ®);
|
||||||
if (reg.y_array != NULL) {
|
if (name != NUL) {
|
||||||
ABORTING(set_ref_dict)(reg.additional_data, copyID);
|
ABORTING(set_ref_dict)(reg.additional_data, copyID);
|
||||||
}
|
}
|
||||||
} while (reg_iter != NULL);
|
} 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
|
// tabpage-local variables
|
||||||
FOR_ALL_TABS(tp) {
|
FOR_ALL_TABS(tp) {
|
||||||
ABORTING(set_ref_in_item)(&tp->tp_winvar.di_tv, copyID, NULL, NULL);
|
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.
|
/// or NULL to indicate that iteration is over.
|
||||||
const void *var_shada_iter(const void *const iter, const char **const name,
|
const void *var_shada_iter(const void *const iter, const char **const name,
|
||||||
typval_T *rettv)
|
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 *hi;
|
||||||
const hashitem_T *hifirst = globvarht.ht_array;
|
const hashitem_T *hifirst = globvarht.ht_array;
|
||||||
|
@@ -1173,7 +1173,7 @@ void copy_jumplist(win_T *from, win_T *to)
|
|||||||
/// NULL if iteration is over.
|
/// NULL if iteration is over.
|
||||||
const void *mark_jumplist_iter(const void *const iter, const win_T *const win,
|
const void *mark_jumplist_iter(const void *const iter, const win_T *const win,
|
||||||
xfmark_T *const fm)
|
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) {
|
if (iter == NULL && win->w_jumplistlen == 0) {
|
||||||
*fm = (xfmark_T) {{{0, 0, 0}, 0, 0, NULL}, NULL};
|
*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.
|
/// NULL if iteration is over.
|
||||||
const void *mark_global_iter(const void *const iter, char *const name,
|
const void *mark_global_iter(const void *const iter, char *const name,
|
||||||
xfmark_T *const fm)
|
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
|
const xfmark_T *iter_mark = (iter == NULL
|
||||||
? &(namedfm[0])
|
? &(namedfm[0])
|
||||||
: (const xfmark_T *const) iter);
|
: (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)
|
if ((size_t) (iter_mark - &(namedfm[0])) == ARRAY_SIZE(namedfm)
|
||||||
|| !iter_mark->fmark.mark.lnum) {
|
|| !iter_mark->fmark.mark.lnum) {
|
||||||
*fm = (xfmark_T) { .fmark = { .mark = { .lnum = 0 } } };
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
size_t iter_off = (size_t) (iter_mark - &(namedfm[0]));
|
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.
|
/// @return Pointer to the next mark or NULL.
|
||||||
static inline const fmark_T *next_buffer_mark(const buf_T *const buf,
|
static inline const fmark_T *next_buffer_mark(const buf_T *const buf,
|
||||||
char *const mark_name)
|
char *const mark_name)
|
||||||
FUNC_ATTR_NONNULL_ALL
|
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
|
||||||
{
|
{
|
||||||
switch (*mark_name) {
|
switch (*mark_name) {
|
||||||
case NUL: {
|
case NUL: {
|
||||||
@@ -1287,8 +1287,9 @@ static inline const fmark_T *next_buffer_mark(const buf_T *const buf,
|
|||||||
/// NULL if iteration is over.
|
/// NULL if iteration is over.
|
||||||
const void *mark_buffer_iter(const void *const iter, const buf_T *const buf,
|
const void *mark_buffer_iter(const void *const iter, const buf_T *const buf,
|
||||||
char *const name, fmark_T *const fm)
|
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
|
char mark_name = (char) (iter == NULL
|
||||||
? NUL
|
? NUL
|
||||||
: (iter == &(buf->b_last_cursor)
|
: (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);
|
iter_mark = next_buffer_mark(buf, &mark_name);
|
||||||
}
|
}
|
||||||
if (iter_mark == NULL) {
|
if (iter_mark == NULL) {
|
||||||
*fm = (fmark_T) {.mark = {.lnum = 0}};
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
size_t iter_off = (size_t) (iter_mark - &(buf->b_namedm[0]));
|
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;
|
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
|
/// Set global mark
|
||||||
///
|
///
|
||||||
/// @param[in] name Mark name.
|
/// @param[in] name Mark name.
|
||||||
|
@@ -5312,7 +5312,7 @@ void end_global_changes(void)
|
|||||||
|
|
||||||
/// Check whether register is empty
|
/// Check whether register is empty
|
||||||
static inline bool reg_empty(const yankreg_T *const reg)
|
static inline bool reg_empty(const yankreg_T *const reg)
|
||||||
FUNC_ATTR_CONST
|
FUNC_ATTR_PURE
|
||||||
{
|
{
|
||||||
return (reg->y_array == NULL
|
return (reg->y_array == NULL
|
||||||
|| reg->y_size == 0
|
|| reg->y_size == 0
|
||||||
@@ -5331,8 +5331,9 @@ static inline bool reg_empty(const yankreg_T *const reg)
|
|||||||
/// NULL if iteration is over.
|
/// NULL if iteration is over.
|
||||||
const void *op_register_iter(const void *const iter, char *const name,
|
const void *op_register_iter(const void *const iter, char *const name,
|
||||||
yankreg_T *const reg)
|
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
|
const yankreg_T *iter_reg = (iter == NULL
|
||||||
? &(y_regs[0])
|
? &(y_regs[0])
|
||||||
: (const yankreg_T *const) iter);
|
: (const yankreg_T *const) iter);
|
||||||
@@ -5340,7 +5341,6 @@ const void *op_register_iter(const void *const iter, char *const name,
|
|||||||
iter_reg++;
|
iter_reg++;
|
||||||
}
|
}
|
||||||
if (iter_reg - &(y_regs[0]) == NUM_SAVED_REGISTERS || reg_empty(iter_reg)) {
|
if (iter_reg - &(y_regs[0]) == NUM_SAVED_REGISTERS || reg_empty(iter_reg)) {
|
||||||
*reg = (yankreg_T) { .y_array = NULL };
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
size_t iter_off = iter_reg - &(y_regs[0]);
|
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
|
/// Get a number of non-empty registers
|
||||||
size_t op_register_amount(void)
|
size_t op_register_amount(void)
|
||||||
FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
|
FUNC_ATTR_WARN_UNUSED_RESULT
|
||||||
{
|
{
|
||||||
size_t ret = 0;
|
size_t ret = 0;
|
||||||
for (size_t i = 0; i < NUM_SAVED_REGISTERS; i++) {
|
for (size_t i = 0; i < NUM_SAVED_REGISTERS; i++) {
|
||||||
|
@@ -1037,8 +1037,8 @@ static void hms_insert(HistoryMergerState *const hms_p, const ShadaEntry entry,
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while (hms_p->iter != NULL
|
while (hms_p->iter != NULL
|
||||||
&& hms_p->last_hist_entry.type != kSDItemMissing
|
&& hms_p->last_hist_entry.type != kSDItemMissing
|
||||||
&& hms_p->last_hist_entry.timestamp < entry.timestamp) {
|
&& hms_p->last_hist_entry.timestamp < entry.timestamp) {
|
||||||
hms_insert(hms_p, hms_p->last_hist_entry, false, hms_p->reading);
|
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->iter = shada_hist_iter(hms_p->iter, hms_p->history_type,
|
||||||
hms_p->reading,
|
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);
|
hms_insert(hms_p, hms_p->last_hist_entry, false, hms_p->reading);
|
||||||
}
|
}
|
||||||
while (hms_p->iter != NULL
|
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->iter = shada_hist_iter(hms_p->iter, hms_p->history_type,
|
||||||
hms_p->reading,
|
hms_p->reading,
|
||||||
&(hms_p->last_hist_entry));
|
&(hms_p->last_hist_entry));
|
||||||
@@ -2631,10 +2631,10 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer,
|
|||||||
if (dump_global_marks) {
|
if (dump_global_marks) {
|
||||||
const void *global_mark_iter = NULL;
|
const void *global_mark_iter = NULL;
|
||||||
do {
|
do {
|
||||||
char name;
|
char name = NUL;
|
||||||
xfmark_T fm;
|
xfmark_T fm;
|
||||||
global_mark_iter = mark_global_iter(global_mark_iter, &name, &fm);
|
global_mark_iter = mark_global_iter(global_mark_iter, &name, &fm);
|
||||||
if (fm.fmark.mark.lnum == 0) {
|
if (name == NUL) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
const char *fname;
|
const char *fname;
|
||||||
@@ -2675,9 +2675,9 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer,
|
|||||||
const void *reg_iter = NULL;
|
const void *reg_iter = NULL;
|
||||||
do {
|
do {
|
||||||
yankreg_T reg;
|
yankreg_T reg;
|
||||||
char name;
|
char name = NUL;
|
||||||
reg_iter = op_register_iter(reg_iter, &name, ®);
|
reg_iter = op_register_iter(reg_iter, &name, ®);
|
||||||
if (reg.y_array == NULL) {
|
if (name == NUL) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (limit_reg_lines && reg.y_size > max_reg_lines) {
|
if (limit_reg_lines && reg.y_size > max_reg_lines) {
|
||||||
@@ -2721,9 +2721,9 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer,
|
|||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
fmark_T fm;
|
fmark_T fm;
|
||||||
char name;
|
char name = NUL;
|
||||||
local_marks_iter = mark_buffer_iter(local_marks_iter, buf, &name, &fm);
|
local_marks_iter = mark_buffer_iter(local_marks_iter, buf, &name, &fm);
|
||||||
if (fm.mark.lnum == 0) {
|
if (name == NUL) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
filemarks->marks[mark_local_index(name)] = (PossiblyFreedShadaEntry) {
|
filemarks->marks[mark_local_index(name)] = (PossiblyFreedShadaEntry) {
|
||||||
|
Reference in New Issue
Block a user