commit 7d55877af232c75fec4ba659971625224fae8cfd
parent 763d1ed78735e876ab8323004eb5429aaff1172d
Author: m21c <ho*******@gmail.com>
Date: Fri, 19 Jun 2026 00:44:06 +0200
worked on mem management: records and fields
Diffstat:
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/compiler.c b/compiler.c
@@ -2508,9 +2508,9 @@ defertypedeclaration(Source *source, int key)
// @section record {{{
static Record *
-makerecord(Decl *recorddecl)
+makerecord(Source *source, Decl *recorddecl)
{
- Record *record = myalloc(&arenas->record, Record);
+ Record *record = myalloc(&source->arenas.record, Record);
record->head = record->tail = NULL;
@@ -2523,9 +2523,9 @@ makerecord(Decl *recorddecl)
}
static Field *
-makefield(Record *record, Decl *decl)
+makefield(Source *source, Record *record, Decl *decl)
{
- Field *field = myalloc(&arenas->field, Field);
+ Field *field = myalloc(&source->arenas.field, Field);
field->decl = decl;
field->offset = field->size = 0;
@@ -3233,7 +3233,7 @@ readident(Source *source, int flags)
}
static void
-extractfields(Record *record, Node *recordscope)
+extractfields(Source *source, Record *record, Node *recordscope)
{
Node *stmt;
@@ -3252,7 +3252,8 @@ extractfields(Record *record, Node *recordscope)
Node *nested;
if (expr->kind == ADECL)
- makefield(record, expr->u.declref);
+ makefield(
+ source, record, expr->u.declref);
if (expr->kind != ACOMMA)
break;
@@ -3262,14 +3263,14 @@ extractfields(Record *record, Node *recordscope)
if (nested->kind != ADECL)
continue;
- makefield(record, nested->u.declref);
+ makefield(source, record, nested->u.declref);
}
continue;
}
if (expr->kind != ADECL)
continue;
- makefield(record, expr->u.declref);
+ makefield(source, record, expr->u.declref);
}
}
@@ -3360,14 +3361,14 @@ readrecord(Source *source, bool isunion)
module->contentenv = recordnode->rhs->u.env;
}
- record = makerecord(module);
+ record = makerecord(source, module);
/* @todo validate record body, extract declarations,
* compute size and align, resolve aliases */
if (recordnode->rhs) {
assert(recordnode->rhs->kind == ASCOPE);
- extractfields(record, recordnode->rhs);
+ extractfields(source, record, recordnode->rhs);
}
calculatefields(record, recordnode->type);