From b7123c55042aa423f63ee3e2225e284743632263 Mon Sep 17 00:00:00 2001 From: Marcos Henrich Date: Fri, 7 Feb 2025 08:51:15 +0000 Subject: [PATCH] Fixes double call of get_items_for_type. (#6626) ## Description ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [ ] If my change requires substantial documentation changes, I have [requested support from the DevRel team](https://github.com/FuelLabs/devrel-requests/issues/new/choose) - [ ] I have added tests that prove my fix is effective or that my feature works. - [x] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers. Co-authored-by: Joshua Batty --- .../semantic_analysis/type_check_context.rs | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/sway-core/src/semantic_analysis/type_check_context.rs b/sway-core/src/semantic_analysis/type_check_context.rs index fb68d4e6ca6..b42fd0b13ff 100644 --- a/sway-core/src/semantic_analysis/type_check_context.rs +++ b/sway-core/src/semantic_analysis/type_check_context.rs @@ -719,14 +719,6 @@ impl<'a> TypeCheckContext<'a> { return Err(*err); } - // grab the local module - let local_module = self - .namespace() - .require_module_from_absolute_path(handler, &self.namespace().current_mod_path)?; - - // grab the local items from the local module - let local_items = local_module.get_items_for_type(self.engines, type_id); - // resolve the type let type_id = resolve_type( handler, @@ -743,16 +735,26 @@ impl<'a> TypeCheckContext<'a> { ) .unwrap_or_else(|err| type_engine.id_of_error_recovery(err)); - // grab the module where the type itself is declared - let type_module = self + // grab the local module + let local_module = self .namespace() - .require_module_from_absolute_path(handler, &item_prefix.to_vec())?; + .require_module_from_absolute_path(handler, &self.namespace().current_mod_path)?; - // grab the items from where the type is declared - let mut type_items = type_module.get_items_for_type(self.engines, type_id); + // grab the local items from the local module + let local_items = local_module.get_items_for_type(self.engines, type_id); let mut items = local_items; - items.append(&mut type_items); + if item_prefix.to_vec() != self.namespace().current_mod_path { + // grab the module where the type itself is declared + let type_module = self + .namespace() + .require_module_from_absolute_path(handler, &item_prefix.to_vec())?; + + // grab the items from where the type is declared + let mut type_items = type_module.get_items_for_type(self.engines, type_id); + + items.append(&mut type_items); + } let mut matching_item_decl_refs: Vec = vec![];