From b93b7aa52b0960926e4a9e0e2c3fc4cd7976fd8b Mon Sep 17 00:00:00 2001 From: sofia Date: Mon, 4 Aug 2025 22:24:03 +0300 Subject: [PATCH] Fix struct fields not being linked correctly for foreign types --- reid/src/mir/linker.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/reid/src/mir/linker.rs b/reid/src/mir/linker.rs index 0772f37..aefaaeb 100644 --- a/reid/src/mir/linker.rs +++ b/reid/src/mir/linker.rs @@ -12,7 +12,7 @@ use crate::{ error_raporting::{ErrorModules, ReidError}, mir::{ pass::BinopKey, BinopDefinition, CustomTypeKey, FunctionDefinitionKind, FunctionParam, SourceModuleId, - TypeDefinition, TypeKind, + StructType, TypeDefinition, TypeDefinitionKind, TypeKind, }, parse_module, }; @@ -441,6 +441,22 @@ impl<'map> Pass for LinkerPass<'map> { Ok(()) } + fn module(&mut self, module: &mut Module, mut state: PassState) -> PassResult { + let extern_types = &state.scope.data.extern_imported_types.get(&module.module_id); + if let Some(extern_types) = extern_types { + for ty in &mut module.typedefs { + match &mut ty.kind { + TypeDefinitionKind::Struct(StructType(fields)) => { + for field in fields { + field.1 = field.1.update_imported(extern_types, module.module_id); + } + } + } + } + } + Ok(()) + } + fn function( &mut self, function: &mut FunctionDefinition,