From b09d75518cdf37e80db9dd77afb66b38c90cd8fc Mon Sep 17 00:00:00 2001 From: Dale Weiler Date: Sat, 28 Apr 2012 05:54:24 -0400 Subject: [PATCH] almost ISO C now, fixed all the MEM_VECTOR trailing semicolon issues. --- Makefile | 2 +- asm.c | 2 +- code.c | 6 +++--- gmqcc.h | 21 ++++++++++++--------- ir.h | 24 ++++++++++++------------ 5 files changed, 29 insertions(+), 26 deletions(-) diff --git a/Makefile b/Makefile index 1a562b8..ae23ba4 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ CC ?= clang -CFLAGS += -Wall +CFLAGS += -Wall -pedantic -std=c99 OBJ = main.o \ lex.o \ error.o \ diff --git a/asm.c b/asm.c index b1f4880..71a8fa3 100644 --- a/asm.c +++ b/asm.c @@ -43,7 +43,7 @@ VECTOR_MAKE(globals, assembly_constants); */ static char *const asm_getline(size_t *byte, FILE *fp) { char *line = NULL; - ssize_t read = util_getline(&line, byte, fp); + size_t read = util_getline(&line, byte, fp); *byte = read; if (read == -1) { mem_d (line); diff --git a/code.c b/code.c index 3f7ae5a..11fe91b 100644 --- a/code.c +++ b/code.c @@ -213,9 +213,9 @@ void code_write() { code_statements_data[j].opcode != INSTR_RETURN) util_debug("GEN", " %s {0x%05d,0x%05d,0x%05d}\n", asm_instr[code_statements_data[j].opcode].m, - code_statements_data[j].s1, - code_statements_data[j].s2, - code_statements_data[j].s3 + code_statements_data[j].o1.s1, + code_statements_data[j].o2.s2, + code_statements_data[j].o3.s3 ); else break; j++; diff --git a/gmqcc.h b/gmqcc.h index 764ac52..d284526 100644 --- a/gmqcc.h +++ b/gmqcc.h @@ -228,6 +228,8 @@ uint32_t util_crc32(const char *, int, register const short); #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; \ @@ -258,7 +260,8 @@ uint32_t util_crc32(const char *, int, register const short); 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); \ @@ -304,17 +307,17 @@ typedef struct { 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 @@ -573,12 +576,12 @@ extern int opts_compiler; //====================================================================== #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; \ @@ -695,8 +698,8 @@ typedef struct { * 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 diff --git a/ir.h b/ir.h index 1a39c3d..060a971 100644 --- a/ir.h +++ b/ir.h @@ -65,8 +65,8 @@ ir_value* ir_value_out(struct ir_function_s *owner, const char *name, int st, in void ir_value_delete(ir_value*); void ir_value_set_name(ir_value*, const char *name); -MEM_VECTOR_PROTO_ALL(ir_value, struct ir_instr_s*, reads) -MEM_VECTOR_PROTO_ALL(ir_value, struct ir_instr_s*, writes) +MEM_VECTOR_PROTO_ALL(ir_value, struct ir_instr_s*, reads); +MEM_VECTOR_PROTO_ALL(ir_value, struct ir_instr_s*, writes); bool GMQCC_WARN ir_value_set_float(ir_value*, float f); #if 0 @@ -77,7 +77,7 @@ bool GMQCC_WARN ir_value_set_vector(ir_value*, vector v); /*bool ir_value_set_pointer_v(ir_value*, ir_value* p); */ /*bool ir_value_set_pointer_i(ir_value*, int i); */ -MEM_VECTOR_PROTO(ir_value, ir_life_entry_t, life) +MEM_VECTOR_PROTO(ir_value, ir_life_entry_t, life); /* merge an instruction into the life-range */ /* returns false if the lifepoint was already known */ bool ir_value_life_merge(ir_value*, size_t); @@ -112,7 +112,7 @@ typedef struct ir_instr_s ir_instr* ir_instr_new(struct ir_block_s *owner, int opcode); void ir_instr_delete(ir_instr*); -MEM_VECTOR_PROTO(ir_value, ir_phi_entry_t, phi) +MEM_VECTOR_PROTO(ir_value, ir_phi_entry_t, phi); bool GMQCC_WARN ir_instr_op(ir_instr*, int op, ir_value *value, bool writing); void ir_instr_dump(ir_instr* in, char *ind, int (*oprintf)(const char*,...)); @@ -142,9 +142,9 @@ void ir_block_delete(ir_block*); bool ir_block_set_label(ir_block*, const char *label); -MEM_VECTOR_PROTO(ir_block, ir_instr*, instr) -MEM_VECTOR_PROTO_ALL(ir_block, ir_block*, exits) -MEM_VECTOR_PROTO_ALL(ir_block, ir_block*, entries) +MEM_VECTOR_PROTO(ir_block, ir_instr*, instr); +MEM_VECTOR_PROTO_ALL(ir_block, ir_block*, exits); +MEM_VECTOR_PROTO_ALL(ir_block, ir_block*, entries); ir_value* ir_block_create_binop(ir_block*, const char *label, int op, ir_value *left, ir_value *right); @@ -172,7 +172,7 @@ bool GMQCC_WARN ir_block_create_if(ir_block*, ir_value *cond, bool GMQCC_WARN ir_block_create_jump(ir_block*, ir_block *to); bool GMQCC_WARN ir_block_create_goto(ir_block*, ir_block *to); -MEM_VECTOR_PROTO_ALL(ir_block, ir_value*, living) +MEM_VECTOR_PROTO_ALL(ir_block, ir_value*, living); void ir_block_dump(ir_block*, char *ind, int (*oprintf)(const char*,...)); @@ -211,8 +211,8 @@ void ir_function_delete(ir_function*); bool GMQCC_WARN ir_function_collect_value(ir_function*, ir_value *value); bool ir_function_set_name(ir_function*, const char *name); -MEM_VECTOR_PROTO(ir_function, int, params) -MEM_VECTOR_PROTO(ir_function, ir_block*, blocks) +MEM_VECTOR_PROTO(ir_function, int, params); +MEM_VECTOR_PROTO(ir_function, ir_block*, blocks); ir_value* ir_function_get_local(ir_function *self, const char *name); ir_value* ir_function_create_local(ir_function *self, const char *name, int vtype); @@ -241,8 +241,8 @@ void ir_builder_delete(ir_builder*); bool ir_builder_set_name(ir_builder *self, const char *name); -MEM_VECTOR_PROTO(ir_builder, ir_function*, functions) -MEM_VECTOR_PROTO(ir_builder, ir_value*, globals) +MEM_VECTOR_PROTO(ir_builder, ir_function*, functions); +MEM_VECTOR_PROTO(ir_builder, ir_value*, globals); ir_function* ir_builder_get_function(ir_builder*, const char *fun); ir_function* ir_builder_create_function(ir_builder*, const char *name); -- 2.39.2