almost ISO C now, fixed all the MEM_VECTOR trailing semicolon issues.

This commit is contained in:
Dale Weiler 2012-04-28 05:54:24 -04:00
parent 75b78720fd
commit b09d75518c
5 changed files with 29 additions and 26 deletions

View file

@ -1,5 +1,5 @@
CC ?= clang
CFLAGS += -Wall
CFLAGS += -Wall -pedantic -std=c99
OBJ = main.o \
lex.o \
error.o \

2
asm.c
View file

@ -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);

6
code.c
View file

@ -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++;

21
gmqcc.h
View file

@ -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

24
ir.h
View file

@ -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);