ht.h: Require a semicolon after HT_PROTOTYPE and HT_GENERATE[2]

This commit is contained in:
Nick Mathewson 2020-02-10 12:54:06 -05:00
parent fbc1eaa0af
commit a9cc4ce0eb

View File

@ -232,6 +232,10 @@ ht_string_hash(const char *s)
#define HT_ASSERT_(x) (void)0 #define HT_ASSERT_(x) (void)0
#endif #endif
/* Macro put at the end of the end of a macro definition so that it
* consumes the following semicolon at file scope. Used only inside ht.h. */
#define HT_EAT_SEMICOLON__ struct ht_semicolon_eater
#define HT_PROTOTYPE(name, type, field, hashfn, eqfn) \ #define HT_PROTOTYPE(name, type, field, hashfn, eqfn) \
int name##_HT_GROW(struct name *ht, unsigned min_capacity); \ int name##_HT_GROW(struct name *ht, unsigned min_capacity); \
void name##_HT_CLEAR(struct name *ht); \ void name##_HT_CLEAR(struct name *ht); \
@ -413,7 +417,8 @@ ht_string_hash(const char *s)
} \ } \
return NULL; \ return NULL; \
} \ } \
} } \
HT_EAT_SEMICOLON__
#define HT_GENERATE2(name, type, field, hashfn, eqfn, load, reallocarrayfn, \ #define HT_GENERATE2(name, type, field, hashfn, eqfn, load, reallocarrayfn, \
freefn) \ freefn) \
@ -538,7 +543,8 @@ ht_string_hash(const char *s)
if (n != head->hth_n_entries) \ if (n != head->hth_n_entries) \
return 6; \ return 6; \
return 0; \ return 0; \
} } \
HT_EAT_SEMICOLON__
#define HT_GENERATE(name, type, field, hashfn, eqfn, load, mallocfn, \ #define HT_GENERATE(name, type, field, hashfn, eqfn, load, mallocfn, \
reallocfn, freefn) \ reallocfn, freefn) \