correct procedural struct/union byte size calculation in eval types

This commit is contained in:
Ryan Fleury
2024-08-13 13:07:13 -07:00
parent 0eff5aca06
commit a1605acb7b
+3 -10
View File
@@ -451,22 +451,15 @@ e_type_from_key(Arena *arena, E_TypeKey key)
type->byte_size = ptee_size * type->count; type->byte_size = ptee_size * type->count;
}break; }break;
case E_TypeKind_Struct: 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_Union:
case E_TypeKind_Class:
{ {
type->members = push_array(arena, E_Member, type->count); type->members = push_array(arena, E_Member, type->count);
MemoryCopy(type->members, node->params.members, sizeof(E_Member)*type->count); MemoryCopy(type->members, node->params.members, sizeof(E_Member)*type->count);
for(U64 idx = 0; idx < type->count; idx += 1) for(U64 idx = 0; idx < type->count; idx += 1)
{ {
U64 member_size = e_type_byte_size_from_key(type->members[idx].type_key); 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, member_size); type->byte_size = Max(type->byte_size, opl_byte);
} }
}break; }break;
case E_TypeKind_Enum: case E_TypeKind_Enum: