From a1605acb7b0b4f74d3033a1e5139a20d0b7e783b Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Tue, 13 Aug 2024 13:07:13 -0700 Subject: [PATCH] correct procedural struct/union byte size calculation in eval types --- src/eval/eval_types.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/eval/eval_types.c b/src/eval/eval_types.c index d0503390..0b9fa1b8 100644 --- a/src/eval/eval_types.c +++ b/src/eval/eval_types.c @@ -451,22 +451,15 @@ e_type_from_key(Arena *arena, E_TypeKey key) type->byte_size = ptee_size * type->count; }break; case E_TypeKind_Struct: - { - type->members = push_array(arena, E_Member, type->count); - MemoryCopy(type->members, node->params.members, sizeof(E_Member)*type->count); - for(U64 idx = 0; idx < type->count; idx += 1) - { - type->byte_size += e_type_byte_size_from_key(type->members[idx].type_key); - } - }break; case E_TypeKind_Union: + case E_TypeKind_Class: { type->members = push_array(arena, E_Member, type->count); MemoryCopy(type->members, node->params.members, sizeof(E_Member)*type->count); for(U64 idx = 0; idx < type->count; idx += 1) { - U64 member_size = e_type_byte_size_from_key(type->members[idx].type_key); - type->byte_size = Max(type->byte_size, member_size); + U64 opl_byte = type->members[idx].off + e_type_byte_size_from_key(type->members[idx].type_key); + type->byte_size = Max(type->byte_size, opl_byte); } }break; case E_TypeKind_Enum: