#else
# define GMQCC_WARN
#endif
+/*
+ * This is a hack to silent clang regarding empty
+ * body if statements.
+ */
+#define GMQCC_SUPRESS_EMPTY_BODY do { } while (0)
/*
* stdint.h and inttypes.h -less subset
#endif
/* Builds vector type (usefull for inside structures) */
+#define VECTOR_SNAP(X,Y) X ## Y
+#define VECTOR_FILL(X,Y) VECTOR_SNAP(X,Y)
#define VECTOR_TYPE(T,N) \
T* N##_data = NULL; \
long N##_elements = 0; \
elements--; \
while (N##_add(*++elements) != -1 && len--); \
return N##_elements; \
- }
+ } \
+ typedef char VECTOR_FILL(extra_semicolon_,__COUNTER__)
/* Builds a full vector inspot */
#define VECTOR_MAKE(T,N) \
VECTOR_TYPE(T,N); \
union {
int16_t s1; /* signed */
uint16_t u1; /* unsigned */
- };
+ } o1;
/* operand 2 */
union {
int16_t s2; /* signed */
uint16_t u2; /* unsigned */
- };
+ } o2;
/* operand 3 */
union {
int16_t s3; /* signed */
uint16_t u3; /* unsigned */
- };
+ } o3;
/*
* This is the same as the structure in darkplaces
//======================================================================
#define MEM_VECTOR_PROTO(Towner, Tmem, mem) \
bool GMQCC_WARN Towner##_##mem##_add(Towner*, Tmem); \
- bool GMQCC_WARN Towner##_##mem##_remove(Towner*, size_t);
+ bool GMQCC_WARN Towner##_##mem##_remove(Towner*, size_t)
#define MEM_VECTOR_PROTO_ALL(Towner, Tmem, mem) \
- MEM_VECTOR_PROTO(Towner, Tmem, mem) \
+ MEM_VECTOR_PROTO(Towner, Tmem, mem); \
bool GMQCC_WARN Towner##_##mem##_find(Towner*, Tmem, size_t*); \
- void Towner##_##mem##_clear(Towner*);
+ void Towner##_##mem##_clear(Towner*)
#define MEM_VECTOR_MAKE(Twhat, name) \
Twhat *name; \
{ \
if (!self->mem) \
return; \
- free((void*) self->mem); \
+ mem_d((void*) self->mem); \
self->mem = NULL; \
self->mem##_count = 0; \
self->mem##_alloc = 0; \
}
-#define MEM_VECTOR_CLEAR(owner, mem) \
- if ((owner)->mem) \
- free((void*)((owner)->mem)); \
- (owner)->mem = NULL; \
- (owner)->mem##_count = 0; \
+#define MEM_VECTOR_CLEAR(owner, mem) \
+ if ((owner)->mem) \
+ mem_d((void*)((owner)->mem)); \
+ (owner)->mem = NULL; \
+ (owner)->mem##_count = 0; \
(owner)->mem##_alloc = 0
#define MEM_VECTOR_INIT(owner, mem) \
* A shallow copy of a lex_file to remember where which ast node
* came from.
*/
-typedef struct lex_ctx {
+typedef struct {
const char *file;
- size_t line;
+ size_t line;
} lex_ctx;
#endif