From 8f1985274607e68f3b18c2fcef0cfe27af8c0e65 Mon Sep 17 00:00:00 2001 From: Lorenzo Torres Date: Fri, 5 Dec 2025 15:23:21 +0100 Subject: [PATCH] made struct registration single pass --- sema.c | 20 +++++++------------- sema.h | 1 + 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/sema.c b/sema.c index b2c643e..c913e8a 100644 --- a/sema.c +++ b/sema.c @@ -2,7 +2,6 @@ #include "sema.h" #include #include -#include typedef struct _res_node { struct _res_node **in; @@ -140,23 +139,16 @@ static void register_struct(sema *s, char *name, type *t) { usize alignment = 0; member *m = t->data.structure.members; - while (m) { - type *m_type = get_type(s, m->type); - if (alignment < m_type->alignment) { - alignment = m_type->alignment; - } - - m = m->next; - } - - t->alignment = alignment; - - m = t->data.structure.members; usize offset = 0; type *m_type = NULL; while (m) { m_type = get_type(s, m->type); + + if (alignment < m_type->alignment) { + alignment = m_type->alignment; + } + usize padding = (m_type->alignment - (offset % m_type->alignment)) % m_type->alignment; offset += padding; m->offset = offset; @@ -165,6 +157,8 @@ static void register_struct(sema *s, char *name, type *t) m = m->next; } + t->alignment = alignment; + if (t->alignment > 0) { usize trailing_padding = (t->alignment - (offset % t->alignment)) % t->alignment; offset += trailing_padding; diff --git a/sema.h b/sema.h index c2fbb4b..60fa3ef 100644 --- a/sema.h +++ b/sema.h @@ -1,6 +1,7 @@ #ifndef SEMA_H #define SEMA_H +#include #include "parser.h" #include "stb_ds.h" #include "utils.h"