From 0a706b5b413aa96a944f45f28fb948c62e763555 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Sat, 24 Jul 2021 14:44:07 +0000 Subject: Reduce size of the Term struct from about 72 bytes to 48 --- dat.h | 21 ++++++++++++++------- parser.c | 4 ++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/dat.h b/dat.h index d6adb18..b2ae80b 100644 --- a/dat.h +++ b/dat.h @@ -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 diff --git a/parser.c b/parser.c index b00382d..51eb436 100644 --- a/parser.c +++ b/parser.c @@ -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{ -- cgit v1.2.3