diff --git a/reid/src/codegen.rs b/reid/src/codegen.rs index e46f3f8..f53fa7f 100644 --- a/reid/src/codegen.rs +++ b/reid/src/codegen.rs @@ -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, diff --git a/reid/src/mir/impl.rs b/reid/src/mir/impl.rs index 02443cb..d99fd6a 100644 --- a/reid/src/mir/impl.rs +++ b/reid/src/mir/impl.rs @@ -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!"), } } diff --git a/reid_src/array_structs.reid b/reid_src/array_structs.reid index e5efdb8..cbd851e 100644 --- a/reid_src/array_structs.reid +++ b/reid_src/array_structs.reid @@ -1,27 +1,21 @@ // Arithmetic, function calls and imports! struct Test { - field : i32, second : [u32; 4] + field: i32, + second: [u32; 4] } fn test() -> [Test; 1] { - let value = [Test { - field: 5, - second: [6, 3, 4, 8], - }]; - return value; + let value = [Test { + field: 5, + second: [6, 3, 4, 8], + }]; + return value; } 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]; }