diff options
-rw-r--r-- | dat.h | 21 | ||||
-rw-r--r-- | parser.c | 4 |
2 files changed, 16 insertions, 9 deletions
@@ -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 @@ -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{ |