From 3cd4121951c956f1a4c9c08679011625155d0042 Mon Sep 17 00:00:00 2001 From: sofia Date: Tue, 5 Aug 2025 22:02:19 +0300 Subject: [PATCH] Fix linker cyclical fields checker --- examples/triple_import_ship.reid | 5 ++++- reid/src/mir/linker.rs | 22 +++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/examples/triple_import_ship.reid b/examples/triple_import_ship.reid index 58c3fad..643320b 100644 --- a/examples/triple_import_ship.reid +++ b/examples/triple_import_ship.reid @@ -1,3 +1,6 @@ import triple_import_vec2::Vec2; -struct Ship { position: Vec2 } \ No newline at end of file +struct Ship { + position: Vec2, + velocity: Vec2, + } \ No newline at end of file diff --git a/reid/src/mir/linker.rs b/reid/src/mir/linker.rs index 0bf5dd2..39ffa40 100644 --- a/reid/src/mir/linker.rs +++ b/reid/src/mir/linker.rs @@ -447,7 +447,7 @@ impl<'map> Pass for LinkerPass<'map> { &inner_ty, importer_module.module_id, &modules, - &mut HashSet::new(), + HashSet::new(), ) { Ok(ty) => ty, Err(e) => { @@ -475,14 +475,14 @@ impl<'map> Pass for LinkerPass<'map> { )); } } - let resolved = - match resolve_types_recursively(&ty, importer_module.module_id, &modules, &mut HashSet::new()) { - Ok(ty) => ty, - Err(e) => { - state.note_errors(&vec![e], meta); - return Ok(()); - } - }; + let resolved = match resolve_types_recursively(&ty, importer_module.module_id, &modules, HashSet::new()) + { + Ok(ty) => ty, + Err(e) => { + state.note_errors(&vec![e], meta); + return Ok(()); + } + }; imported_types.extend(resolved); } @@ -664,7 +664,7 @@ fn resolve_types_recursively( ty: &CustomTypeKey, resolver: SourceModuleId, modules: &HashMap, - seen: &mut HashSet, + mut seen: HashSet, ) -> Result, ErrorKind> { let resolved_ty = resolve_type(ty, modules)?; @@ -691,7 +691,7 @@ fn resolve_types_recursively( for field in fields { match &field.1 { TypeKind::CustomType(ty_key) => { - types.extend(resolve_types_recursively(ty_key, resolved_ty.1, modules, seen)?); + types.extend(resolve_types_recursively(ty_key, resolved_ty.1, modules, seen.clone())?); } _ => {} }