aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/map_defs.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/map_defs.h')
-rw-r--r--src/nvim/map_defs.h21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/nvim/map_defs.h b/src/nvim/map_defs.h
index 147c03327a..36c851497d 100644
--- a/src/nvim/map_defs.h
+++ b/src/nvim/map_defs.h
@@ -33,7 +33,8 @@ static inline bool equal_String(String a, String b)
if (a.size != b.size) {
return false;
}
- return memcmp(a.data, b.data, a.size) == 0;
+
+ return (a.size == 0) || (memcmp(a.data, b.data, a.size) == 0);
}
#define Set(type) Set_##type
@@ -152,6 +153,7 @@ KEY_DECLS(HlEntry)
KEY_DECLS(ColorKey)
MAP_DECLS(int, int)
+MAP_DECLS(ptr_t, int)
MAP_DECLS(int, ptr_t)
MAP_DECLS(cstr_t, ptr_t)
MAP_DECLS(cstr_t, int)
@@ -172,9 +174,14 @@ MAP_DECLS(ColorKey, ColorItem)
#define set_put_ref(T, set, key, key_alloc) set_put_##T(set, key, key_alloc)
#define set_put_idx(T, set, key, status) mh_put_##T(set, key, status)
#define set_del(T, set, key) set_del_##T(set, key)
-#define set_destroy(T, set) (xfree((set)->keys), xfree((set)->h.hash))
-#define set_clear(T, set) mh_clear(&(set)->h)
#define set_size(set) ((set)->h.size)
+#define set_clear(T, set) mh_clear(&(set)->h)
+#define set_destroy(T, set) \
+ do { \
+ xfree((set)->keys); \
+ xfree((set)->h.hash); \
+ *(set) = (Set(T)) SET_INIT; \
+ } while (0)
#define map_get(T, U) map_get_##T##U
#define map_has(T, map, key) set_has(T, &(map)->set, key)
@@ -182,9 +189,13 @@ MAP_DECLS(ColorKey, ColorItem)
#define map_ref(T, U) map_ref_##T##U
#define map_put_ref(T, U) map_put_ref_##T##U
#define map_del(T, U) map_del_##T##U
-#define map_destroy(T, map) (set_destroy(T, &(map)->set), xfree((map)->values))
-#define map_clear(T, map) set_clear(T, &(map)->set)
#define map_size(map) set_size(&(map)->set)
+#define map_clear(T, map) set_clear(T, &(map)->set)
+#define map_destroy(T, map) \
+ do { \
+ set_destroy(T, &(map)->set); \
+ XFREE_CLEAR((map)->values); \
+ } while (0)
#define pmap_get(T) map_get(T, ptr_t)
#define pmap_put(T) map_put(T, ptr_t)