mirror of
https://github.com/neovim/neovim.git
synced 2025-10-16 06:46:07 +00:00
refactor: missing parenthesis may cause unexpected problems (#17443)
related vim-8.2.{4402,4639}
This commit is contained in:
@@ -512,8 +512,8 @@ static inline void hmll_init(HMLList *const hmll, const size_t size)
|
||||
///
|
||||
/// @return `for` cycle header (use `HMLL_FORALL(hmll, cur_entry) {body}`).
|
||||
#define HMLL_FORALL(hmll, cur_entry, code) \
|
||||
for (HMLListEntry *cur_entry = (hmll)->first; cur_entry != NULL; \
|
||||
cur_entry = cur_entry->next) { \
|
||||
for (HMLListEntry *(cur_entry) = (hmll)->first; (cur_entry) != NULL; \
|
||||
(cur_entry) = (cur_entry)->next) { \
|
||||
code \
|
||||
} \
|
||||
|
||||
@@ -1072,13 +1072,13 @@ static inline bool marks_equal(const pos_T a, const pos_T b)
|
||||
entry, fname_cond, free_func, fin_func, \
|
||||
idxadj_func, afterfree_func) \
|
||||
do { \
|
||||
const int jl_len = (int)jumps_size; \
|
||||
const int jl_len = (int)(jumps_size); \
|
||||
int i; \
|
||||
for (i = jl_len; i > 0; i--) { \
|
||||
const jumps_type jl_entry = jumps[i - 1]; \
|
||||
if (jl_entry.timestamp_attr <= entry.timestamp) { \
|
||||
if (marks_equal(jl_entry.mark_attr, entry.data.filemark.mark) \
|
||||
&& fname_cond) { \
|
||||
const jumps_type jl_entry = (jumps)[i - 1]; \
|
||||
if (jl_entry.timestamp_attr <= (entry).timestamp) { \
|
||||
if (marks_equal(jl_entry.mark_attr, (entry).data.filemark.mark) \
|
||||
&& (fname_cond)) { \
|
||||
i = -1; \
|
||||
} \
|
||||
break; \
|
||||
@@ -1086,30 +1086,30 @@ static inline bool marks_equal(const pos_T a, const pos_T b)
|
||||
} \
|
||||
if (i > 0) { \
|
||||
if (jl_len == JUMPLISTSIZE) { \
|
||||
free_func(jumps[0]); \
|
||||
free_func((jumps)[0]); \
|
||||
i--; \
|
||||
if (i > 0) { \
|
||||
memmove(&jumps[0], &jumps[1], sizeof(jumps[1]) * (size_t)i); \
|
||||
memmove(&(jumps)[0], &(jumps)[1], sizeof((jumps)[1]) * (size_t)i); \
|
||||
} \
|
||||
} else if (i != jl_len) { \
|
||||
memmove(&jumps[i + 1], &jumps[i], \
|
||||
sizeof(jumps[0]) * (size_t)(jl_len - i)); \
|
||||
memmove(&(jumps)[i + 1], &(jumps)[i], \
|
||||
sizeof((jumps)[0]) * (size_t)(jl_len - i)); \
|
||||
} \
|
||||
} else if (i == 0) { \
|
||||
if (jl_len == JUMPLISTSIZE) { \
|
||||
i = -1; \
|
||||
} else if (jl_len > 0) { \
|
||||
memmove(&jumps[1], &jumps[0], sizeof(jumps[0]) * (size_t)jl_len); \
|
||||
memmove(&(jumps)[1], &(jumps)[0], sizeof((jumps)[0]) * (size_t)jl_len); \
|
||||
} \
|
||||
} \
|
||||
if (i != -1) { \
|
||||
jumps[i] = fin_func(entry); \
|
||||
(jumps)[i] = fin_func(entry); \
|
||||
if (jl_len < JUMPLISTSIZE) { \
|
||||
jumps_size++; \
|
||||
(jumps_size)++; \
|
||||
} \
|
||||
idxadj_func(i); \
|
||||
} else { \
|
||||
shada_free_shada_entry(&entry); \
|
||||
shada_free_shada_entry(&(entry)); \
|
||||
afterfree_func(entry); \
|
||||
} \
|
||||
} while (0)
|
||||
@@ -1304,7 +1304,7 @@ static void shada_read(ShaDaReadDef *const sd_reader, const int flags)
|
||||
} else {
|
||||
#define SDE_TO_XFMARK(entry) fm
|
||||
#define ADJUST_IDX(i) \
|
||||
if (curwin->w_jumplistidx >= i \
|
||||
if (curwin->w_jumplistidx >= (i) \
|
||||
&& curwin->w_jumplistidx + 1 <= curwin->w_jumplistlen) { \
|
||||
curwin->w_jumplistidx++; \
|
||||
}
|
||||
@@ -1547,7 +1547,7 @@ static ShaDaWriteResult shada_pack_entry(msgpack_packer *const packer, ShadaEntr
|
||||
} \
|
||||
} while (0)
|
||||
#define CHECK_DEFAULT(entry, attr) \
|
||||
(sd_default_values[entry.type].data.attr == entry.data.attr)
|
||||
(sd_default_values[(entry).type].data.attr == (entry).data.attr)
|
||||
#define ONE_IF_NOT_DEFAULT(entry, attr) \
|
||||
((size_t)(!CHECK_DEFAULT(entry, attr)))
|
||||
switch (entry.type) {
|
||||
@@ -1637,7 +1637,7 @@ static ShaDaWriteResult shada_pack_entry(msgpack_packer *const packer, ShadaEntr
|
||||
do { \
|
||||
if (!CHECK_DEFAULT(entry, search_pattern.attr)) { \
|
||||
PACK_STATIC_STR(name); \
|
||||
if (sd_default_values[entry.type].data.search_pattern.attr) { \
|
||||
if (sd_default_values[(entry).type].data.search_pattern.attr) { \
|
||||
msgpack_pack_false(spacker); \
|
||||
} else { \
|
||||
msgpack_pack_true(spacker); \
|
||||
@@ -2221,12 +2221,12 @@ static inline ShaDaWriteResult shada_read_when_writing(ShaDaReadDef *const sd_re
|
||||
} else {
|
||||
#define FREE_POSSIBLY_FREED_SHADA_ENTRY(entry) \
|
||||
do { \
|
||||
if (entry.can_free_entry) { \
|
||||
shada_free_shada_entry(&entry.data); \
|
||||
if ((entry).can_free_entry) { \
|
||||
shada_free_shada_entry(&(entry).data); \
|
||||
} \
|
||||
} while (0)
|
||||
#define SDE_TO_PFSDE(entry) \
|
||||
((PossiblyFreedShadaEntry) { .can_free_entry = true, .data = entry })
|
||||
((PossiblyFreedShadaEntry) { .can_free_entry = true, .data = (entry) })
|
||||
#define AFTERFREE_DUMMY(entry)
|
||||
#define DUMMY_IDX_ADJ(i)
|
||||
MERGE_JUMPS(filemarks->changes_size, filemarks->changes,
|
||||
@@ -2814,8 +2814,8 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer, ShaDaReadDef
|
||||
#define PACK_WMS_ARRAY(wms_array) \
|
||||
do { \
|
||||
for (size_t i_ = 0; i_ < ARRAY_SIZE(wms_array); i_++) { \
|
||||
if (wms_array[i_].data.type != kSDItemMissing) { \
|
||||
if (shada_pack_pfreed_entry(packer, wms_array[i_], max_kbyte) \
|
||||
if ((wms_array)[i_].data.type != kSDItemMissing) { \
|
||||
if (shada_pack_pfreed_entry(packer, (wms_array)[i_], max_kbyte) \
|
||||
== kSDWriteFailed) { \
|
||||
ret = kSDWriteFailed; \
|
||||
goto shada_write_exit; \
|
||||
@@ -2835,7 +2835,7 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer, ShaDaReadDef
|
||||
}
|
||||
#define PACK_WMS_ENTRY(wms_entry) \
|
||||
do { \
|
||||
if (wms_entry.data.type != kSDItemMissing) { \
|
||||
if ((wms_entry).data.type != kSDItemMissing) { \
|
||||
if (shada_pack_pfreed_entry(packer, wms_entry, max_kbyte) \
|
||||
== kSDWriteFailed) { \
|
||||
ret = kSDWriteFailed; \
|
||||
@@ -3312,16 +3312,16 @@ static ShaDaReadResult msgpack_read_uint64(ShaDaReadDef *const sd_reader, const
|
||||
RERR "Error while reading ShaDa file: " \
|
||||
entry_name " entry at position %" PRIu64 " " \
|
||||
error_desc
|
||||
#define CHECK_KEY(key, expected) ( \
|
||||
key.via.str.size == sizeof(expected) - 1 \
|
||||
&& STRNCMP(key.via.str.ptr, expected, sizeof(expected) - 1) == 0)
|
||||
#define CHECK_KEY(key, \
|
||||
expected) ((key).via.str.size == (sizeof(expected) - 1) \
|
||||
&& STRNCMP((key).via.str.ptr, expected, (sizeof(expected) - 1)) == 0)
|
||||
#define CLEAR_GA_AND_ERROR_OUT(ga) \
|
||||
do { \
|
||||
ga_clear(&ga); \
|
||||
ga_clear(&(ga)); \
|
||||
goto shada_read_next_item_error; \
|
||||
} while (0)
|
||||
#define ID(s) s
|
||||
#define BINDUP(b) xmemdupz(b.ptr, b.size)
|
||||
#define BINDUP(b) xmemdupz((b).ptr, (b).size)
|
||||
#define TOINT(s) ((int)(s))
|
||||
#define TOLONG(s) ((long)(s))
|
||||
#define TOCHAR(s) ((char)(s))
|
||||
@@ -3334,28 +3334,31 @@ static ShaDaReadResult msgpack_read_uint64(ShaDaReadDef *const sd_reader, const
|
||||
semsg(_(READERR(entry_name, error_desc)), initial_fpos); \
|
||||
CLEAR_GA_AND_ERROR_OUT(ad_ga); \
|
||||
} \
|
||||
tgt = proc(obj.via.attr); \
|
||||
(tgt) = proc((obj).via.attr); \
|
||||
} while (0)
|
||||
#define CHECK_KEY_IS_STR(un, entry_name) \
|
||||
if (un.data.via.map.ptr[i].key.type != MSGPACK_OBJECT_STR) { \
|
||||
if ((un).data.via.map.ptr[i].key.type != MSGPACK_OBJECT_STR) { \
|
||||
semsg(_(READERR(entry_name, "has key which is not a string")), \
|
||||
initial_fpos); \
|
||||
CLEAR_GA_AND_ERROR_OUT(ad_ga); \
|
||||
} else if (un.data.via.map.ptr[i].key.via.str.size == 0) { \
|
||||
} else if ((un).data.via.map.ptr[i].key.via.str.size == 0) { \
|
||||
semsg(_(READERR(entry_name, "has empty key")), initial_fpos); \
|
||||
CLEAR_GA_AND_ERROR_OUT(ad_ga); \
|
||||
}
|
||||
#define CHECKED_KEY(un, entry_name, name, error_desc, tgt, condition, attr, \
|
||||
proc) \
|
||||
else if (CHECK_KEY( /* NOLINT(readability/braces) */ \
|
||||
un.data.via.map.ptr[i].key, name)) { \
|
||||
CHECKED_ENTRY(condition, "has " name " key value " error_desc, \
|
||||
entry_name, un.data.via.map.ptr[i].val, \
|
||||
tgt, attr, proc); \
|
||||
#define CHECKED_KEY(un, entry_name, name, error_desc, tgt, condition, attr, proc) \
|
||||
else if (CHECK_KEY((un).data.via.map.ptr[i].key, name)) /* NOLINT(readability/braces) */ \
|
||||
{ \
|
||||
CHECKED_ENTRY(condition, \
|
||||
"has " name " key value " error_desc, \
|
||||
entry_name, \
|
||||
(un).data.via.map.ptr[i].val, \
|
||||
tgt, \
|
||||
attr, \
|
||||
proc); \
|
||||
}
|
||||
#define TYPED_KEY(un, entry_name, name, type_name, tgt, objtype, attr, proc) \
|
||||
CHECKED_KEY(un, entry_name, name, "which is not " type_name, tgt, \
|
||||
un.data.via.map.ptr[i].val.type == MSGPACK_OBJECT_##objtype, \
|
||||
(un).data.via.map.ptr[i].val.type == MSGPACK_OBJECT_##objtype, \
|
||||
attr, proc)
|
||||
#define BOOLEAN_KEY(un, entry_name, name, tgt) \
|
||||
TYPED_KEY(un, entry_name, name, "a boolean", tgt, BOOLEAN, boolean, ID)
|
||||
@@ -3366,9 +3369,9 @@ static ShaDaReadResult msgpack_read_uint64(ShaDaReadDef *const sd_reader, const
|
||||
BIN_CONVERTED)
|
||||
#define INT_KEY(un, entry_name, name, tgt, proc) \
|
||||
CHECKED_KEY(un, entry_name, name, "which is not an integer", tgt, \
|
||||
((un.data.via.map.ptr[i].val.type \
|
||||
(((un).data.via.map.ptr[i].val.type \
|
||||
== MSGPACK_OBJECT_POSITIVE_INTEGER) \
|
||||
|| (un.data.via.map.ptr[i].val.type \
|
||||
|| ((un).data.via.map.ptr[i].val.type \
|
||||
== MSGPACK_OBJECT_NEGATIVE_INTEGER)), \
|
||||
i64, proc)
|
||||
#define INTEGER_KEY(un, entry_name, name, tgt) \
|
||||
@@ -3379,12 +3382,12 @@ static ShaDaReadResult msgpack_read_uint64(ShaDaReadDef *const sd_reader, const
|
||||
else { /* NOLINT(readability/braces) */ \
|
||||
ga_grow(&ad_ga, 1); \
|
||||
memcpy(((char *)ad_ga.ga_data) + ((size_t)ad_ga.ga_len \
|
||||
* sizeof(*un.data.via.map.ptr)), \
|
||||
un.data.via.map.ptr + i, \
|
||||
sizeof(*un.data.via.map.ptr)); \
|
||||
* sizeof(*(un).data.via.map.ptr)), \
|
||||
(un).data.via.map.ptr + i, \
|
||||
sizeof(*(un).data.via.map.ptr)); \
|
||||
ad_ga.ga_len++; \
|
||||
}
|
||||
#define BIN_CONVERTED(b) (xmemdupz((b.ptr), (b.size)))
|
||||
#define BIN_CONVERTED(b) (xmemdupz(((b).ptr), ((b).size)))
|
||||
#define SET_ADDITIONAL_DATA(tgt, name) \
|
||||
do { \
|
||||
if (ad_ga.ga_len) { \
|
||||
@@ -3407,7 +3410,7 @@ static ShaDaReadResult msgpack_read_uint64(ShaDaReadDef *const sd_reader, const
|
||||
tv_clear(&adtv); \
|
||||
goto shada_read_next_item_error; \
|
||||
} \
|
||||
tgt = adtv.vval.v_dict; \
|
||||
(tgt) = adtv.vval.v_dict; \
|
||||
} \
|
||||
ga_clear(&ad_ga); \
|
||||
} while (0)
|
||||
|
Reference in New Issue
Block a user