summaryrefslogtreecommitdiff
path: root/parser.c
diff options
context:
space:
mode:
authorPeter Mikkelsen <peter@pmikkelsen.com>2021-07-08 17:07:15 +0000
committerPeter Mikkelsen <peter@pmikkelsen.com>2021-07-08 17:07:15 +0000
commit28e7dd47d568908702264977d70860c25467fb6e (patch)
tree61ec96a7ffc789fa518313ab5c78ead65d0db8a8 /parser.c
parent96639193bad1db5ff22f17bacbcd4eeecd024ba9 (diff)
Add a mark-sweep garbage collector
Diffstat (limited to 'parser.c')
-rw-r--r--parser.c9
1 files changed, 4 insertions, 5 deletions
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;