diff options
Diffstat (limited to 'parser.c')
-rw-r--r-- | parser.c | 9 |
1 files changed, 4 insertions, 5 deletions
@@ -264,8 +264,8 @@ parseoperators(Term *list) int i; int length = termslength(list); Term *t; - Term **terms = malloc(sizeof(Term *) * length); - OpInfo *infos = malloc(sizeof(OpInfo) * length); + Term **terms = gmalloc(sizeof(Term *) * length); + OpInfo *infos = gmalloc(sizeof(OpInfo) * length); for(i = 0, t = list; i < length; i++){ Operator *op = getoperator(t->text); @@ -346,8 +346,6 @@ parseoperators(Term *list) } Term *result = terms[0]; - free(infos); - free(terms); return result; } @@ -409,6 +407,7 @@ initoperators(void) void addoperator(int level, int type, Rune *spelling) { + /* the operator table is never garbage collected, so just use normal malloc */ Operator *op = malloc(sizeof(Operator)); op->type = type; op->level = level; @@ -431,7 +430,7 @@ getoperator(Rune *spelling) for(tmp = operators[level]; tmp != nil; tmp = tmp->next){ if(runestrcmp(tmp->spelling, spelling) == 0){ if(op == nil){ - op = malloc(sizeof(Operator)); + op = gmalloc(sizeof(Operator)); memcpy(op, tmp, sizeof(Operator)); }else op->type |= tmp->type; |