From 28e7dd47d568908702264977d70860c25467fb6e Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Thu, 8 Jul 2021 17:07:15 +0000 Subject: Add a mark-sweep garbage collector --- parser.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'parser.c') diff --git a/parser.c b/parser.c index dc86734..acca0cb 100644 --- a/parser.c +++ b/parser.c @@ -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; -- cgit v1.2.3