diff options
| -rw-r--r-- | backend.h | 40 | ||||
| -rw-r--r-- | decl.c | 62 | ||||
| -rw-r--r-- | decl.h | 16 | ||||
| -rw-r--r-- | eval.c | 10 | ||||
| -rw-r--r-- | eval.h | 2 | ||||
| -rw-r--r-- | expr.c | 98 | ||||
| -rw-r--r-- | expr.h | 42 | ||||
| -rw-r--r-- | init.c | 16 | ||||
| -rw-r--r-- | init.h | 12 | ||||
| -rw-r--r-- | qbe.c | 130 | ||||
| -rw-r--r-- | scope.c | 8 | ||||
| -rw-r--r-- | scope.h | 6 | ||||
| -rw-r--r-- | stmt.c | 8 | ||||
| -rw-r--r-- | stmt.h | 4 | ||||
| -rw-r--r-- | type.c | 14 | ||||
| -rw-r--r-- | type.h | 22 | 
16 files changed, 244 insertions, 246 deletions
@@ -8,10 +8,10 @@ struct switchcases {  	struct value *defaultlabel;  }; -struct representation; -struct declaration; -struct expression; -struct initializer; +struct repr; +struct decl; +struct expr; +struct init;  struct scope;  struct type; @@ -20,22 +20,22 @@ void switchcase(struct switchcases *, uint64_t, struct value *);  struct value *mkblock(char *);  struct value *mkglobal(char *, _Bool); -struct value *mkintconst(struct representation *, uint64_t); +struct value *mkintconst(struct repr *, uint64_t);  uint64_t intconstvalue(struct value *); -struct function *mkfunc(char *, struct type *, struct scope *); -struct type *functype(struct function *); -void funclabel(struct function *, struct value *); -struct value *funcexpr(struct function *, struct expression *); -void funcjmp(struct function *, struct value *); -void funcjnz(struct function *, struct value *, struct value *, struct value *); -void funcret(struct function *, struct value *); -struct gotolabel *funcgoto(struct function *, char *); -void funcswitch(struct function *, struct value *, struct switchcases *, struct value *); -void funcinit(struct function *, struct declaration *, struct initializer *); - -void emitfunc(struct function *, _Bool); -void emitdata(struct declaration *,  struct initializer *); - -extern struct representation i8, i16, i32, i64, f32, f64; +struct func *mkfunc(char *, struct type *, struct scope *); +struct type *functype(struct func *); +void funclabel(struct func *, struct value *); +struct value *funcexpr(struct func *, struct expr *); +void funcjmp(struct func *, struct value *); +void funcjnz(struct func *, struct value *, struct value *, struct value *); +void funcret(struct func *, struct value *); +struct gotolabel *funcgoto(struct func *, char *); +void funcswitch(struct func *, struct value *, struct switchcases *, struct value *); +void funcinit(struct func *, struct decl *, struct init *); + +void emitfunc(struct func *, _Bool); +void emitdata(struct decl *,  struct init *); + +extern struct repr i8, i16, i32, i64, f32, f64; @@ -31,7 +31,7 @@ enum storageclass {  	SCTHREADLOCAL = 1<<6,  }; -enum typespecifier { +enum typespec {  	SPECNONE,  	SPECVOID     = 1<<1, @@ -50,17 +50,17 @@ enum typespecifier {  	SPECLONGLONG = SPECLONG|SPECLONG2,  }; -enum funcspecifier { +enum funcspec {  	FUNCNONE,  	FUNCINLINE   = 1<<1,  	FUNCNORETURN = 1<<2,  }; -struct declaration * -mkdecl(enum declarationkind k, struct type *t, enum linkage linkage) +struct decl * +mkdecl(enum declkind k, struct type *t, enum linkage linkage)  { -	struct declaration *d; +	struct decl *d;  	d = xmalloc(sizeof(*d));  	d->kind = k; @@ -108,7 +108,7 @@ storageclass(enum storageclass *sc)  /* 6.7.3 Type qualifiers */  static int -typequal(enum typequalifier *tq) +typequal(enum typequal *tq)  {  	switch (tok.kind) {  	case TCONST:    *tq |= QUALCONST;    break; @@ -124,9 +124,9 @@ typequal(enum typequalifier *tq)  /* 6.7.4 Function specifiers */  static int -funcspec(enum funcspecifier *fs) +funcspec(enum funcspec *fs)  { -	enum funcspecifier new; +	enum funcspec new;  	switch (tok.kind) {  	case TINLINE:    new = FUNCINLINE;   break; @@ -149,7 +149,7 @@ tagspec(struct scope *s)  	struct type *t;  	char *tag;  	enum typekind kind; -	struct declaration *d; +	struct decl *d;  	struct member **end;  	uint64_t i; @@ -226,12 +226,12 @@ tagspec(struct scope *s)  /* 6.7 Declarations */  static struct type * -declspecs(struct scope *s, enum storageclass *sc, enum funcspecifier *fs, int *align) +declspecs(struct scope *s, enum storageclass *sc, enum funcspec *fs, int *align)  {  	struct type *t; -	struct declaration *d; -	enum typespecifier ts = SPECNONE; -	enum typequalifier tq = QUALNONE; +	struct decl *d; +	enum typespec ts = SPECNONE; +	enum typequal tq = QUALNONE;  	int ntypes = 0;  	uint64_t i; @@ -401,7 +401,7 @@ done:  }  /* 6.7.6 Declarators */ -static struct parameter *parameter(struct scope *); +static struct param *parameter(struct scope *);  struct partialtype {  	struct type *outer; @@ -411,7 +411,7 @@ struct partialtype {  static bool  istypename(struct scope *s, const char *name)  { -	struct declaration *d; +	struct decl *d;  	d = scopegetdecl(s, name, 1);  	return d && d->kind == DECLTYPE; @@ -422,9 +422,9 @@ declaratortypes(struct scope *s, struct list *result, char **name, bool allowabs  {  	struct list *ptr;  	struct type *t; -	struct parameter **p; +	struct param **p;  	uint64_t i; -	enum typequalifier tq; +	enum typequal tq;  	while (consume(TMUL)) {  		t = mkpointertype(NULL); @@ -577,7 +577,7 @@ declarator(struct scope *s, struct type *base, char **name, bool allowabstract)  static struct type *  adjust(struct type *t)  { -	enum typequalifier tq = QUALNONE; +	enum typequal tq = QUALNONE;  	t = typeunqual(t, &tq);  	switch (t->kind) { @@ -592,10 +592,10 @@ adjust(struct type *t)  	return t;  } -static struct parameter * +static struct param *  parameter(struct scope *s)  { -	struct parameter *p; +	struct param *p;  	struct type *t;  	enum storageclass sc; @@ -611,9 +611,9 @@ parameter(struct scope *s)  }  static bool -paramdecl(struct scope *s, struct parameter *params) +paramdecl(struct scope *s, struct param *params)  { -	struct parameter *p; +	struct param *p;  	struct type *t, *base;  	char *name; @@ -708,17 +708,17 @@ typename(struct scope *s)  }  bool -decl(struct scope *s, struct function *f) +decl(struct scope *s, struct func *f)  {  	struct type *t, *base;  	enum storageclass sc; -	enum funcspecifier fs; -	struct initializer *init; -	struct parameter *p; +	enum funcspec fs; +	struct init *init; +	struct param *p;  	char *name;  	int allowfunc = !f; -	struct declaration *d; -	enum declarationkind kind; +	struct decl *d; +	enum declkind kind;  	enum linkage linkage;  	uint64_t c;  	int align; @@ -892,12 +892,12 @@ decl(struct scope *s, struct function *f)  	}  } -struct declaration *stringdecl(struct expression *expr) +struct decl *stringdecl(struct expr *expr)  {  	static struct hashtable *strings;  	struct hashtablekey key;  	void **entry; -	struct declaration *d; +	struct decl *d;  	if (!strings)  		strings = mkhtab(64); @@ -920,5 +920,5 @@ emittentativedefns(void)  	struct list *l;  	for (l = tentativedefns.next; l != &tentativedefns; l = l->next) -		emitdata(listelement(l, struct declaration, link), NULL); +		emitdata(listelement(l, struct decl, link), NULL);  } @@ -1,4 +1,4 @@ -enum declarationkind { +enum declkind {  	DECLTYPE,  	DECLOBJECT,  	DECLFUNC, @@ -25,8 +25,8 @@ enum builtinkind {  	BUILTINVASTART,  }; -struct declaration { -	enum declarationkind kind; +struct decl { +	enum declkind kind;  	enum linkage linkage;  	struct type *type;  	struct value *value; @@ -41,13 +41,13 @@ struct declaration {  };  struct scope; -struct function; +struct func; -struct declaration *mkdecl(enum declarationkind, struct type *, enum linkage); -_Bool decl(struct scope *, struct function *); +struct decl *mkdecl(enum declkind, struct type *, enum linkage); +_Bool decl(struct scope *, struct func *);  struct type *typename(struct scope *); -struct expression; -struct declaration *stringdecl(struct expression *); +struct expr; +struct decl *stringdecl(struct expr *);  void emittentativedefns(void); @@ -10,7 +10,7 @@  #include "type.h"  static void -binary(struct expression *expr, enum tokenkind op, struct expression *l, struct expression *r) +binary(struct expr *expr, enum tokenkind op, struct expr *l, struct expr *r)  {  	expr->kind = EXPRCONST;  #define F (1<<8) @@ -69,11 +69,11 @@ binary(struct expression *expr, enum tokenkind op, struct expression *l, struct  #undef S  } -struct expression * -eval(struct expression *expr) +struct expr * +eval(struct expr *expr)  { -	struct expression *l, *r, *c; -	struct declaration *d; +	struct expr *l, *r, *c; +	struct decl *d;  	switch (expr->kind) {  	case EXPRIDENT: @@ -1 +1 @@ -struct expression *eval(struct expression *); +struct expr *eval(struct expr *); @@ -17,10 +17,10 @@  #include "token.h"  #include "type.h" -static struct expression * -mkexpr(enum expressionkind k, struct type *t, enum expressionflags flags) +static struct expr * +mkexpr(enum exprkind k, struct type *t, enum exprflags flags)  { -	struct expression *e; +	struct expr *e;  	e = xmalloc(sizeof(*e));  	e->type = flags & EXPRFLAG_LVAL || !t ? t : typeunqual(t, NULL); @@ -31,10 +31,10 @@ mkexpr(enum expressionkind k, struct type *t, enum expressionflags flags)  	return e;  } -static struct expression * +static struct expr *  mkconstexpr(struct type *t, uint64_t n)  { -	struct expression *e; +	struct expr *e;  	e = mkexpr(EXPRCONST, t, 0);  	e->constant.i = n; @@ -43,19 +43,19 @@ mkconstexpr(struct type *t, uint64_t n)  }  void -delexpr(struct expression *e) +delexpr(struct expr *e)  {  	free(e);  } -static struct expression *mkunaryexpr(enum tokenkind, struct expression *); +static struct expr *mkunaryexpr(enum tokenkind, struct expr *);  /* 6.3.2.1 Conversion of arrays and function designators */ -static struct expression * -decay(struct expression *e) +static struct expr * +decay(struct expr *e)  {  	struct type *t; -	enum typequalifier tq = QUALNONE; +	enum typequal tq = QUALNONE;  	// XXX: combine with decl.c:adjust in some way?  	t = typeunqual(e->type, &tq); @@ -75,16 +75,16 @@ decay(struct expression *e)  }  static void -lvalueconvert(struct expression *e) +lvalueconvert(struct expr *e)  {  	e->type = typeunqual(e->type, NULL);  	e->flags &= ~EXPRFLAG_LVAL;  } -static struct expression * -mkunaryexpr(enum tokenkind op, struct expression *base) +static struct expr * +mkunaryexpr(enum tokenkind op, struct expr *base)  { -	struct expression *expr; +	struct expr *expr;  	switch (op) {  	case TBAND: @@ -110,7 +110,7 @@ mkunaryexpr(enum tokenkind op, struct expression *base)  }  static struct type * -commonreal(struct expression **e1, struct expression **e2) +commonreal(struct expr **e1, struct expr **e2)  {  	struct type *t; @@ -121,12 +121,12 @@ commonreal(struct expression **e1, struct expression **e2)  	return t;  } -static struct expression * -mkbinaryexpr(struct location *loc, enum tokenkind op, struct expression *l, struct expression *r) +static struct expr * +mkbinaryexpr(struct location *loc, enum tokenkind op, struct expr *l, struct expr *r)  { -	struct expression *e; +	struct expr *e;  	struct type *t = NULL; -	enum typeproperty lp, rp; +	enum typeprop lp, rp;  	lvalueconvert(l);  	lvalueconvert(r); @@ -316,11 +316,11 @@ unescape(char **p)  }  /* 6.5 Expressions */ -static struct expression * +static struct expr *  primaryexpr(struct scope *s)  { -	struct expression *e; -	struct declaration *d; +	struct expr *e; +	struct decl *d;  	char *src, *dst, *end;  	int base; @@ -405,12 +405,12 @@ primaryexpr(struct scope *s)  	return e;  } -static struct expression *condexpr(struct scope *); +static struct expr *condexpr(struct scope *); -static struct expression * +static struct expr *  builtinfunc(struct scope *s, enum builtinkind kind)  { -	struct expression *e; +	struct expr *e;  	struct type *t;  	char *name;  	uint64_t offset; @@ -483,13 +483,13 @@ builtinfunc(struct scope *s, enum builtinkind kind)  	return e;  } -static struct expression * -postfixexpr(struct scope *s, struct expression *r) +static struct expr * +postfixexpr(struct scope *s, struct expr *r)  { -	struct expression *e, *arr, *idx, *tmp, **end; +	struct expr *e, *arr, *idx, *tmp, **end;  	struct type *t; -	enum typequalifier tq; -	struct parameter *p; +	enum typequal tq; +	struct param *p;  	uint64_t offset;  	enum tokenkind op;  	bool lvalue; @@ -601,13 +601,13 @@ postfixexpr(struct scope *s, struct expression *r)  	}  } -static struct expression *castexpr(struct scope *); +static struct expr *castexpr(struct scope *); -static struct expression * +static struct expr *  unaryexpr(struct scope *s)  {  	enum tokenkind op; -	struct expression *e, *l; +	struct expr *e, *l;  	struct type *t;  	op = tok.kind; @@ -695,11 +695,11 @@ unaryexpr(struct scope *s)  	return e;  } -static struct expression * +static struct expr *  castexpr(struct scope *s)  {  	struct type *t; -	struct expression *r, *e, **end; +	struct expr *r, *e, **end;  	end = &r;  	while (consume(TLPAREN)) { @@ -758,7 +758,7 @@ ismultiplicative(enum tokenkind t)  	return t == TMUL || t == TDIV || t == TMOD;  } -static struct expression * +static struct expr *  binaryexpr(struct scope *s, size_t i)  {  	static const struct { @@ -777,7 +777,7 @@ binaryexpr(struct scope *s, size_t i)  		{.fn = isadditive},  		{.fn = ismultiplicative},  	}; -	struct expression *e, *l, *r; +	struct expr *e, *l, *r;  	struct location loc;  	enum tokenkind op; @@ -797,7 +797,7 @@ binaryexpr(struct scope *s, size_t i)  }  static bool -nullpointer(struct expression *e) +nullpointer(struct expr *e)  {  	if (e->kind != EXPRCONST)  		return false; @@ -806,12 +806,12 @@ nullpointer(struct expression *e)  	return e->constant.i == 0;  } -static struct expression * +static struct expr *  condexpr(struct scope *s)  { -	struct expression *r, *e; +	struct expr *r, *e;  	struct type *t, *f; -	enum typequalifier tq; +	enum typequal tq;  	r = binaryexpr(s, 0);  	if (!consume(TQUESTION)) @@ -861,7 +861,7 @@ condexpr(struct scope *s)  uint64_t  intconstexpr(struct scope *s, bool allowneg)  { -	struct expression *e; +	struct expr *e;  	e = eval(condexpr(s));  	if (e->kind != EXPRCONST || !(typeprop(e->type) & PROPINT)) @@ -871,10 +871,10 @@ intconstexpr(struct scope *s, bool allowneg)  	return e->constant.i;  } -struct expression * +struct expr *  assignexpr(struct scope *s)  { -	struct expression *e, *l, *r, *tmp = NULL, **res = &e; +	struct expr *e, *l, *r, *tmp = NULL, **res = &e;  	enum tokenkind op;  	l = condexpr(s); @@ -920,10 +920,10 @@ assignexpr(struct scope *s)  	return e;  } -struct expression * +struct expr *  expr(struct scope *s)  { -	struct expression *r, *e, **end; +	struct expr *r, *e, **end;  	end = &r;  	for (;;) { @@ -942,10 +942,10 @@ expr(struct scope *s)  	return e;  } -struct expression * -exprconvert(struct expression *e, struct type *t) +struct expr * +exprconvert(struct expr *e, struct type *t)  { -	struct expression *cast; +	struct expr *cast;  	if (typecompatible(e->type, t))  		return e; @@ -1,4 +1,4 @@ -enum expressionkind { +enum exprkind {  	/* primary expression */  	EXPRIDENT,  	EXPRCONST, @@ -22,19 +22,19 @@ enum expressionkind {  	EXPRTEMP,  }; -enum expressionflags { +enum exprflags {  	EXPRFLAG_LVAL    = 1<<0,  	EXPRFLAG_DECAYED = 1<<1,  }; -struct expression { -	enum expressionkind kind; -	enum expressionflags flags; +struct expr { +	enum exprkind kind; +	enum exprflags flags;  	struct type *type; -	struct expression *next; +	struct expr *next;  	union {  		struct { -			struct declaration *decl; +			struct decl *decl;  		} ident;  		union {  			uint64_t i; @@ -45,40 +45,40 @@ struct expression {  			size_t size;  		} string;  		struct { -			struct expression *func, *args; +			struct expr *func, *args;  			size_t nargs;  		} call;  		struct { -			struct initializer *init; +			struct init *init;  		} compound;  		struct {  			int op;  			_Bool post; -			struct expression *base; +			struct expr *base;  		} incdec;  		struct {  			int op; -			struct expression *base; +			struct expr *base;  		} unary;  		struct { -			struct expression *e; +			struct expr *e;  		} cast;  		struct {  			int op; -			struct expression *l, *r; +			struct expr *l, *r;  		} binary;  		struct { -			struct expression *e, *t, *f; +			struct expr *e, *t, *f;  		} cond;  		struct { -			struct expression *l, *r; +			struct expr *l, *r;  		} assign;  		struct { -			struct expression *exprs; +			struct expr *exprs;  		} comma;  		struct {  			int kind; -			struct expression *arg; +			struct expr *arg;  		} builtin;  		struct value *temp;  	}; @@ -86,9 +86,9 @@ struct expression {  struct scope; -struct expression *expr(struct scope *); -struct expression *assignexpr(struct scope *); +struct expr *expr(struct scope *); +struct expr *assignexpr(struct scope *);  uint64_t intconstexpr(struct scope *, _Bool); -void delexpr(struct expression *); +void delexpr(struct expr *); -struct expression *exprconvert(struct expression *, struct type *); +struct expr *exprconvert(struct expr *, struct type *); @@ -29,10 +29,10 @@ struct initparser {  	struct object obj[32], *cur, *sub;  }; -struct initializer * -mkinit(uint64_t start, uint64_t end, struct expression *expr) +struct init * +mkinit(uint64_t start, uint64_t end, struct expr *expr)  { -	struct initializer *init; +	struct init *init;  	init = xmalloc(sizeof(*init));  	init->start = start; @@ -44,9 +44,9 @@ mkinit(uint64_t start, uint64_t end, struct expression *expr)  }  static void -initadd(struct initializer **init, struct initializer *new) +initadd(struct init **init, struct init *new)  { -	struct initializer *next, *sub, *last; +	struct init *next, *sub, *last;  	uint64_t offset;  	while (*init && new->start >= (*init)->end) @@ -208,12 +208,12 @@ advance(struct initparser *p)  }  /* 6.7.9 Initialization */ -struct initializer * +struct init *  parseinit(struct scope *s, struct type *t)  {  	struct initparser p; -	struct initializer *init = NULL; -	struct expression *expr; +	struct init *init = NULL; +	struct expr *expr;  	struct type *base;  	t = typeunqual(t, NULL); @@ -1,13 +1,11 @@ -struct initializer { +struct init {  	uint64_t start, end; -	struct expression *expr; -	struct initializer *next, *subinit; +	struct expr *expr; +	struct init *next, *subinit;  };  struct scope;  struct type; -struct function; -struct declaration; -struct initializer *mkinit(uint64_t, uint64_t, struct expression *); -struct initializer *parseinit(struct scope *, struct type *); +struct init *mkinit(uint64_t, uint64_t, struct expr *); +struct init *parseinit(struct scope *, struct type *); @@ -22,7 +22,7 @@ struct name {  	uint64_t id;  }; -struct representation { +struct repr {  	char base;  	char ext;  	struct name abi; @@ -36,7 +36,7 @@ struct value {  		VALLABEL,  		VALTEMP,  	} kind; -	struct representation *repr; +	struct repr *repr;  	union {  		struct name name;  		uint64_t i; @@ -44,7 +44,7 @@ struct value {  	};  }; -enum instructionkind { +enum instkind {  	INONE,  #define OP(op, ret, arg, name) op, @@ -52,8 +52,8 @@ enum instructionkind {  #undef OP  }; -struct instruction { -	enum instructionkind kind; +struct inst { +	enum instkind kind;  	struct value res, *arg[];  }; @@ -70,22 +70,22 @@ struct switchcase {  	struct value *body;  }; -struct function { +struct func {  	char *name; -	struct declaration *namedecl; +	struct decl *namedecl;  	struct type *type;  	struct block *start, *end;  	struct hashtable *gotos;  	uint64_t lastid;  }; -struct representation i8 = {'w', 'b'}; -struct representation i16 = {'w', 'h'}; -struct representation i32 = {'w', 'w'}; -struct representation i64 = {'l', 'l'}; -struct representation f32 = {'s', 's'}; -struct representation f64 = {'d', 'd'}; -struct representation iptr = {'l', 'l'}; +struct repr i8 = {'w', 'b'}; +struct repr i16 = {'w', 'h'}; +struct repr i32 = {'w', 'w'}; +struct repr i64 = {'l', 'l'}; +struct repr f32 = {'s', 's'}; +struct repr f64 = {'d', 'd'}; +struct repr iptr = {'l', 'l'};  void  switchcase(struct switchcases *cases, uint64_t i, struct value *v) @@ -121,14 +121,14 @@ static void emittype(struct type *);  static void emitvalue(struct value *);  static void -funcname(struct function *f, struct name *n, char *s) +funcname(struct func *f, struct name *n, char *s)  {  	n->id = ++f->lastid;  	n->str = s;  }  static void -functemp(struct function *f, struct value *v, struct representation *repr) +functemp(struct func *f, struct value *v, struct repr *repr)  {  	if (!repr)  		fatal("temp has no type"); @@ -147,9 +147,9 @@ static struct {  };  static struct value * -funcinstn(struct function *f, int op, struct representation *repr, struct value *args[]) +funcinstn(struct func *f, int op, struct repr *repr, struct value *args[])  { -	struct instruction *inst; +	struct inst *inst;  	size_t n;  	if (f->end->terminated) @@ -179,7 +179,7 @@ funcinstn(struct function *f, int op, struct representation *repr, struct value  #define funcinst(f, op, repr, ...) funcinstn(f, op, repr, (struct value *[]){__VA_ARGS__})  struct value * -mkintconst(struct representation *r, uint64_t n) +mkintconst(struct repr *r, uint64_t n)  {  	struct value *v; @@ -199,7 +199,7 @@ intconstvalue(struct value *v)  }  static struct value * -mkfltconst(struct representation *r, double n) +mkfltconst(struct repr *r, double n)  {  	struct value *v; @@ -212,10 +212,10 @@ mkfltconst(struct representation *r, double n)  }  static void -funcalloc(struct function *f, struct declaration *d) +funcalloc(struct func *f, struct decl *d)  { -	enum instructionkind op; -	struct instruction *inst; +	enum instkind op; +	struct inst *inst;  	assert(!d->type->incomplete);  	assert(d->type->size > 0); @@ -241,10 +241,10 @@ funcalloc(struct function *f, struct declaration *d)  }  static void -funcstore(struct function *f, struct type *t, struct value *addr, struct value *v) +funcstore(struct func *f, struct type *t, struct value *addr, struct value *v)  { -	enum instructionkind op; -	enum typequalifier tq = QUALNONE; +	enum instkind op; +	enum typequal tq = QUALNONE;  	t = typeunqual(t, &tq);  	if (tq & QUALVOLATILE) @@ -268,7 +268,7 @@ funcstore(struct function *f, struct type *t, struct value *addr, struct value *  	case TYPESTRUCT:  	case TYPEUNION:  	case TYPEARRAY: { -		enum instructionkind loadop, op; +		enum instkind loadop, op;  		struct value *src, *dst, *tmp, *align;  		uint64_t offset; @@ -298,11 +298,11 @@ funcstore(struct function *f, struct type *t, struct value *addr, struct value *  }  static struct value * -funcload(struct function *f, struct type *t, struct value *addr) +funcload(struct func *f, struct type *t, struct value *addr)  {  	struct value *v; -	enum instructionkind op; -	enum typequalifier tq; +	enum instkind op; +	enum typequal tq;  	t = typeunqual(t, &tq);  	switch (t->kind) { @@ -353,12 +353,12 @@ parameter affected by default argument promotion, we need to emit a QBE  function with the promoted type and implicitly convert to the declared  parameter type before storing into the allocated memory for the parameter.  */ -struct function * +struct func *  mkfunc(char *name, struct type *t, struct scope *s)  { -	struct function *f; -	struct parameter *p; -	struct declaration *d; +	struct func *f; +	struct param *p; +	struct decl *d;  	f = xmalloc(sizeof(*f));  	f->name = name; @@ -406,13 +406,13 @@ mkfunc(char *name, struct type *t, struct scope *s)  }  struct type * -functype(struct function *f) +functype(struct func *f)  {  	return f->type;  }  void -funclabel(struct function *f, struct value *v) +funclabel(struct func *f, struct value *v)  {  	assert(v->kind == VALLABEL);  	f->end->next = (struct block *)v; @@ -420,28 +420,28 @@ funclabel(struct function *f, struct value *v)  }  void -funcjmp(struct function *f, struct value *v) +funcjmp(struct func *f, struct value *v)  {  	funcinst(f, IJMP, NULL, v);  	f->end->terminated = true;  }  void -funcjnz(struct function *f, struct value *v, struct value *l1, struct value *l2) +funcjnz(struct func *f, struct value *v, struct value *l1, struct value *l2)  {  	funcinst(f, IJNZ, NULL, v, l1, l2);  	f->end->terminated = true;  }  void -funcret(struct function *f, struct value *v) +funcret(struct func *f, struct value *v)  {  	funcinst(f, IRET, NULL, v);  	f->end->terminated = true;  }  struct gotolabel * -funcgoto(struct function *f, char *name) +funcgoto(struct func *f, char *name)  {  	void **entry;  	struct gotolabel *g; @@ -460,9 +460,9 @@ funcgoto(struct function *f, char *name)  }  static struct value * -objectaddr(struct function *f, struct expression *e) +objectaddr(struct func *f, struct expr *e)  { -	struct declaration *d; +	struct decl *d;  	switch (e->kind) {  	case EXPRIDENT: @@ -497,7 +497,7 @@ objectaddr(struct function *f, struct expression *e)  /* TODO: move these conversions to QBE */  static struct value * -utof(struct function *f, struct representation *r, struct value *v) +utof(struct func *f, struct repr *r, struct value *v)  {  	struct value *odd, *big, *phi[5] = {0}, *join; @@ -529,10 +529,10 @@ utof(struct function *f, struct representation *r, struct value *v)  }  static struct value * -ftou(struct function *f, struct representation *r, struct value *v) +ftou(struct func *f, struct repr *r, struct value *v)  {  	struct value *big, *phi[5] = {0}, *join, *maxflt, *maxint; -	enum instructionkind op = v->repr->base == 's' ? ISTOSI : IDTOSI; +	enum instkind op = v->repr->base == 's' ? ISTOSI : IDTOSI;  	if (r->base == 'w') {  		v = funcinst(f, op, &i64, v); @@ -563,9 +563,9 @@ ftou(struct function *f, struct representation *r, struct value *v)  }  static struct value * -extend(struct function *f, struct type *t, struct value *v) +extend(struct func *f, struct type *t, struct value *v)  { -	enum instructionkind op; +	enum instkind op;  	switch (t->size) {  	case 1: op = t->basic.issigned ? IEXTSB : IEXTUB; break; @@ -576,12 +576,12 @@ extend(struct function *f, struct type *t, struct value *v)  }  struct value * -funcexpr(struct function *f, struct expression *e) +funcexpr(struct func *f, struct expr *e)  { -	enum instructionkind op = INONE; -	struct declaration *d; +	enum instkind op = INONE; +	struct decl *d;  	struct value *l, *r, *v, *addr, **argvals, **argval; -	struct expression *arg; +	struct expr *arg;  	struct value *label[5];  	struct type *t; @@ -865,9 +865,9 @@ funcexpr(struct function *f, struct expression *e)  }  static void -zero(struct function *func, struct value *addr, int align, uint64_t offset, uint64_t end) +zero(struct func *func, struct value *addr, int align, uint64_t offset, uint64_t end)  { -	enum instructionkind store[] = { +	enum instkind store[] = {  		[1] = ISTOREB,  		[2] = ISTOREH,  		[4] = ISTOREW, @@ -889,7 +889,7 @@ zero(struct function *func, struct value *addr, int align, uint64_t offset, uint  }  void -funcinit(struct function *func, struct declaration *d, struct initializer *init) +funcinit(struct func *func, struct decl *d, struct init *init)  {  	struct value *src, *dst;  	uint64_t offset = 0; @@ -917,7 +917,7 @@ funcinit(struct function *func, struct declaration *d, struct initializer *init)  }  static void -casesearch(struct function *f, struct value *v, struct switchcase *c, struct value *defaultlabel) +casesearch(struct func *f, struct value *v, struct switchcase *c, struct value *defaultlabel)  {  	struct value *res, *label[3], *key; @@ -943,7 +943,7 @@ casesearch(struct function *f, struct value *v, struct switchcase *c, struct val  }  void -funcswitch(struct function *f, struct value *v, struct switchcases *c, struct value *defaultlabel) +funcswitch(struct func *f, struct value *v, struct switchcases *c, struct value *defaultlabel)  {  	casesearch(f, v, c->root, defaultlabel);  } @@ -986,7 +986,7 @@ emitvalue(struct value *v)  }  static void -emitrepr(struct representation *r, bool abi, bool ext) +emitrepr(struct repr *r, bool abi, bool ext)  {  	if (abi && r->abi.id) {  		putchar(':'); @@ -1038,7 +1038,7 @@ emittype(struct type *t)  }  static void -emitinst(struct instruction *inst) +emitinst(struct inst *inst)  {  	struct value **arg; @@ -1098,11 +1098,11 @@ emitinst(struct instruction *inst)  }  void -emitfunc(struct function *f, bool global) +emitfunc(struct func *f, bool global)  {  	struct block *b; -	struct instruction **inst; -	struct parameter *p; +	struct inst **inst; +	struct param *p;  	size_t n;  	if (!f->end->terminated) @@ -1136,9 +1136,9 @@ emitfunc(struct function *f, bool global)  }  static void -dataitem(struct expression *expr, uint64_t size) +dataitem(struct expr *expr, uint64_t size)  { -	struct declaration *decl; +	struct decl *decl;  	size_t i;  	char c; @@ -1186,10 +1186,10 @@ dataitem(struct expression *expr, uint64_t size)  }  void -emitdata(struct declaration *d, struct initializer *init) +emitdata(struct decl *d, struct init *init)  {  	uint64_t offset = 0; -	struct initializer *cur; +	struct init *cur;  	if (!d->align)  		d->align = d->type->align; @@ -15,7 +15,7 @@ scopeinit(void)  {  	static struct builtin {  		char *name; -		struct declaration decl; +		struct decl decl;  	} builtins[] = {  		{"__builtin_alloca",     {.kind = DECLBUILTIN, .builtin = BUILTINALLOCA}},  		{"__builtin_constant_p", {.kind = DECLBUILTIN, .builtin = BUILTINCONSTANTP}}, @@ -64,10 +64,10 @@ delscope(struct scope *s)  	return parent;  } -struct declaration * +struct decl *  scopegetdecl(struct scope *s, const char *name, bool recurse)  { -	struct declaration *d; +	struct decl *d;  	struct hashtablekey k;  	htabstrkey(&k, name); @@ -95,7 +95,7 @@ scopegettag(struct scope *s, const char *name, bool recurse)  }  void -scopeputdecl(struct scope *s, const char *name, struct declaration *d) +scopeputdecl(struct scope *s, const char *name, struct decl *d)  {  	struct hashtablekey k; @@ -11,9 +11,9 @@ void scopeinit(void);  struct scope *mkscope(struct scope *);  struct scope *delscope(struct scope *); -struct declaration; -void scopeputdecl(struct scope *, const char *, struct declaration *); -struct declaration *scopegetdecl(struct scope *, const char *, _Bool); +struct decl; +void scopeputdecl(struct scope *, const char *, struct decl *); +struct decl *scopegetdecl(struct scope *, const char *, _Bool);  struct type;  void scopeputtag(struct scope *, const char *, struct type *); @@ -15,7 +15,7 @@  #include "type.h"  static bool -gotolabel(struct function *f) +gotolabel(struct func *f)  {  	char *name;  	struct gotolabel *g; @@ -33,10 +33,10 @@ gotolabel(struct function *f)  /* 6.8 Statements and blocks */  void -stmt(struct function *f, struct scope *s) +stmt(struct func *f, struct scope *s)  {  	char *name; -	struct expression *e; +	struct expr *e;  	struct type *t;  	struct value *v, *label[4];  	struct switchcases swtch = {0}; @@ -54,7 +54,7 @@ stmt(struct function *f, struct scope *s)  		funclabel(f, label[0]);  		i = intconstexpr(s, true);  		switchcase(s->switchcases, i, label[0]); -		expect(TCOLON, "after case expression"); +		expect(TCOLON, "after case expr");  		stmt(f, s);  		break;  	case TDEFAULT: @@ -1,4 +1,4 @@ -struct function; +struct func;  struct scope; -void stmt(struct function *, struct scope *); +void stmt(struct func *, struct scope *); @@ -47,7 +47,7 @@ mktype(enum typekind kind)  }  struct type * -mkqualifiedtype(struct type *base, enum typequalifier tq) +mkqualifiedtype(struct type *base, enum typequal tq)  {  	struct type *t; @@ -96,10 +96,10 @@ mkarraytype(struct type *base, uint64_t len)  	return t;  } -enum typeproperty +enum typeprop  typeprop(struct type *t)  { -	enum typeproperty p = PROPNONE; +	enum typeprop p = PROPNONE;  	switch (t->kind) {  	case TYPEVOID: @@ -163,7 +163,7 @@ bool  typecompatible(struct type *t1, struct type *t2)  {  	struct type *tmp; -	struct parameter *p1, *p2; +	struct param *p1, *p2;  	if (t1 == t2)  		return true; @@ -232,7 +232,7 @@ typecomposite(struct type *t1, struct type *t2)  }  struct type * -typeunqual(struct type *t, enum typequalifier *tq) +typeunqual(struct type *t, enum typequal *tq)  {  	while (t->kind == TYPEQUALIFIED) {  		if (tq) @@ -319,10 +319,10 @@ typemember(struct type *t, const char *name, uint64_t *offset)  	return NULL;  } -struct parameter * +struct param *  mkparam(char *name, struct type *t)  { -	struct parameter *p; +	struct param *p;  	p = xmalloc(sizeof(*p));  	p->name = name; @@ -1,4 +1,4 @@ -enum typequalifier { +enum typequal {  	QUALNONE,  	QUALCONST    = 1<<1, @@ -20,7 +20,7 @@ enum typekind {  	TYPEUNION,  }; -enum typeproperty { +enum typeprop {  	PROPNONE,  	PROPOBJECT  = 1<<0, @@ -34,11 +34,11 @@ enum typeproperty {  	PROPFLOAT   = 1<<8,  }; -struct parameter { +struct param {  	char *name;  	struct type *type;  	struct value *value; -	struct parameter *next; +	struct param *next;  };  struct member { @@ -52,7 +52,7 @@ struct type {  	enum typekind kind;  	int align;  	uint64_t size; -	struct representation *repr; +	struct repr *repr;  	union {  		struct type *base;  		struct list link;  /* used only during construction of type */ @@ -60,7 +60,7 @@ struct type {  	_Bool incomplete;  	union {  		struct { -			enum typequalifier kind; +			enum typequal kind;  		} qualified;  		struct {  			enum { @@ -82,7 +82,7 @@ struct type {  		} array;  		struct {  			_Bool isprototype, isvararg, isnoreturn, paraminfo; -			struct parameter *params; +			struct param *params;  		} func;  		struct {  			char *tag; @@ -92,21 +92,21 @@ struct type {  };  struct type *mktype(enum typekind); -struct type *mkqualifiedtype(struct type *, enum typequalifier); +struct type *mkqualifiedtype(struct type *, enum typequal);  struct type *mkpointertype(struct type *);  struct type *mkarraytype(struct type *, uint64_t);  _Bool typecompatible(struct type *, struct type *);  _Bool typesame(struct type *, struct type *);  struct type *typecomposite(struct type *, struct type *); -struct type *typeunqual(struct type *, enum typequalifier *); +struct type *typeunqual(struct type *, enum typequal *);  struct type *typecommonreal(struct type *, struct type *);  struct type *typeargpromote(struct type *);  struct type *typeintpromote(struct type *); -enum typeproperty typeprop(struct type *); +enum typeprop typeprop(struct type *);  struct type *typemember(struct type *, const char *, uint64_t *); -struct parameter *mkparam(char *, struct type *); +struct param *mkparam(char *, struct type *);  extern struct type typevoid;  extern struct type typebool;  | 
