~pmikkelsen/pprolog

0a706b5b413aa96a944f45f28fb948c62e763555 — Peter Mikkelsen a month ago ef55dad
Reduce size of the Term struct from about 72 bytes to 48
2 files changed, 16 insertions(+), 9 deletions(-)

M dat.h
M parser.c
M dat.h => dat.h +14 -7
@@ 18,18 18,25 @@ struct Operator
	Operator *next;
};

struct Term
struct Compound
{
	int tag;

	Rune *text;
	int arity;
	Term *next;
	Term *children;
	vlong ival;
	double dval;
};

struct Term
{
	u8int tag;
	u8int inparens;
	uvlong clausenr;
	int inparens; /* kinda bad hack needed for the current parser */
	Term *next;

	union {
		vlong ival;
		double dval;
		struct Compound;
	};
};

struct Binding

M parser.c => parser.c +2 -2
@@ 211,8 211,8 @@ parseoperators(Term *list)
	OpInfo *infos = gmalloc(sizeof(OpInfo) * length);

	for(i = 0, t = list; i < length; i++){
		Operator *op = getoperator(t->text, currentmod);
		if(op && t->tag == AtomTerm && !t->inparens){
		Operator *op;
		if(t->tag == AtomTerm && !t->inparens && (op = getoperator(t->text, currentmod))){
			infos[i].type = op->type;
			infos[i].level = op->level;
		}else{