diff options
author | Peter Mikkelsen <peter@pmikkelsen.com> | 2021-07-08 17:07:15 +0000 |
---|---|---|
committer | Peter Mikkelsen <peter@pmikkelsen.com> | 2021-07-08 17:07:15 +0000 |
commit | 28e7dd47d568908702264977d70860c25467fb6e (patch) | |
tree | 61ec96a7ffc789fa518313ab5c78ead65d0db8a8 /parser.c | |
parent | 96639193bad1db5ff22f17bacbcd4eeecd024ba9 (diff) |
Add a mark-sweep garbage collector
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; |