Aria

A low-level systems programming language
git clone git://git.m21c.me/Aria.git
Log | Files | Refs | README | LICENSE

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:
Mcompiler.c | 21+++++++++++----------
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);