Fix struct fields not being linked correctly for foreign types

This commit is contained in:
Sofia 2025-08-04 22:24:03 +03:00
parent 1275063dc2
commit b93b7aa52b

View File

@ -12,7 +12,7 @@ use crate::{
error_raporting::{ErrorModules, ReidError}, error_raporting::{ErrorModules, ReidError},
mir::{ mir::{
pass::BinopKey, BinopDefinition, CustomTypeKey, FunctionDefinitionKind, FunctionParam, SourceModuleId, pass::BinopKey, BinopDefinition, CustomTypeKey, FunctionDefinitionKind, FunctionParam, SourceModuleId,
TypeDefinition, TypeKind, StructType, TypeDefinition, TypeDefinitionKind, TypeKind,
}, },
parse_module, parse_module,
}; };
@ -441,6 +441,22 @@ impl<'map> Pass for LinkerPass<'map> {
Ok(()) Ok(())
} }
fn module(&mut self, module: &mut Module, mut state: PassState<Self::Data, Self::TError>) -> 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( fn function(
&mut self, &mut self,
function: &mut FunctionDefinition, function: &mut FunctionDefinition,