Get structs in arrays working, but no luck with arrays in structs

This commit is contained in:
Sofia 2025-07-20 14:21:37 +03:00
parent f952651a66
commit e4845c4084
3 changed files with 23 additions and 21 deletions

View File

@ -1024,7 +1024,11 @@ impl TypeKind {
size_bits: self.size_of(),
}),
TypeKind::Array(type_kind, len) => {
let elem_ty = type_kind.get_debug_type_hard(
let elem_ty = match **type_kind {
TypeKind::CustomType(_) => TypeKind::Ptr(Box::new(*type_kind.clone())),
_ => *type_kind.clone(),
};
let elem_ty = elem_ty.clone().get_debug_type_hard(
scope,
debug_info,
debug_types,
@ -1033,8 +1037,8 @@ impl TypeKind {
tokens,
);
DebugTypeData::Array(DebugArrayType {
size_bits: type_kind.size_of() * len,
align_bits: type_kind.alignment(),
size_bits: self.size_of(),
align_bits: self.alignment(),
element_type: elem_ty,
length: *len,
})
@ -1047,13 +1051,17 @@ impl TypeKind {
let mut fields = Vec::new();
let mut size_bits = 0;
for field in &struct_type.0 {
let ty = match &field.1 {
TypeKind::Array(elem_ty, len) => field.1.clone(),
_ => field.1.clone(),
};
fields.push(DebugFieldType {
name: field.0.clone(),
location: field.2.into_debug(tokens).unwrap(),
size_bits: field.1.size_of(),
size_bits: ty.size_of(),
offset: size_bits,
flags: DwarfFlags,
ty: field.1.get_debug_type_hard(
ty: ty.get_debug_type_hard(
scope,
debug_info,
debug_types,

View File

@ -47,7 +47,7 @@ impl TypeKind {
TypeKind::StringPtr => 32,
TypeKind::Array(type_kind, len) => type_kind.size_of() * len,
TypeKind::CustomType(_) => 32,
TypeKind::Ptr(inner) => 32,
TypeKind::Ptr(inner) => 64,
TypeKind::Vague(_) => panic!("Tried to sizeof a vague type!"),
}
}
@ -69,7 +69,7 @@ impl TypeKind {
TypeKind::StringPtr => 32,
TypeKind::Array(type_kind, _) => type_kind.alignment(),
TypeKind::CustomType(_) => 32,
TypeKind::Ptr(type_kind) => 32,
TypeKind::Ptr(type_kind) => 64,
TypeKind::Vague(_) => panic!("Tried to sizeof a vague type!"),
}
}

View File

@ -1,7 +1,8 @@
// Arithmetic, function calls and imports!
struct Test {
field : i32, second : [u32; 4]
field: i32,
second: [u32; 4]
}
fn test() -> [Test; 1] {
@ -15,13 +16,6 @@ fn test() -> [Test; 1] {
fn main() -> u32 {
let mut value = test();
let val1 = 0;
let val2 = 1;
// value[val1].second[val2 + 1] = 99;
let mut b = value[val1];
b.second[2] = 99;
return value[val1].second[2];
return value[0].second[2];
}