From 6d3e8cb7c69e5194bce7440421af7d80f0c0c7fa Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Mon, 21 Oct 2024 13:30:28 +0100 Subject: [PATCH] Move `Root.is_ancestor`. --- .../src/semantic_analysis/namespace/module.rs | 4 ++++ .../src/semantic_analysis/namespace/root.rs | 16 ++++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/sway-core/src/semantic_analysis/namespace/module.rs b/sway-core/src/semantic_analysis/namespace/module.rs index 8b6b763fc25..73305a70353 100644 --- a/sway-core/src/semantic_analysis/namespace/module.rs +++ b/sway-core/src/semantic_analysis/namespace/module.rs @@ -364,3 +364,7 @@ pub fn module_is_submodule_of( false } } + +pub fn mod_is_ancestor(src: &ModulePath, dst: &ModulePath) -> bool { + dst.len() >= src.len() && src.iter().zip(dst).all(|(src, dst)| src == dst) +} diff --git a/sway-core/src/semantic_analysis/namespace/root.rs b/sway-core/src/semantic_analysis/namespace/root.rs index 218bf3ec5fe..1ba8ef64b98 100644 --- a/sway-core/src/semantic_analysis/namespace/root.rs +++ b/sway-core/src/semantic_analysis/namespace/root.rs @@ -1,6 +1,10 @@ use std::fmt; -use super::{module::Module, trait_map::TraitMap, Ident, ResolvedTraitImplItem}; +use super::{ + module::{mod_is_ancestor, Module}, + trait_map::TraitMap, + Ident, ResolvedTraitImplItem, +}; use crate::{ decl_engine::{DeclEngine, DeclRef}, engine_threading::*, @@ -203,7 +207,7 @@ impl Root { // Collect all items declared in the source module for (symbol, decl) in src_mod.current_items().symbols.iter() { - if is_ancestor(src, dst) || decl.visibility(engines).is_public() { + if mod_is_ancestor(src, dst) || decl.visibility(engines).is_public() { decls_and_item_imports.push((symbol.clone(), decl.clone(), src.to_vec())); } } @@ -287,7 +291,7 @@ impl Root { let src_items = src_mod.current_items(); let (decl, path, src_visibility) = if let Some(decl) = src_items.symbols.get(item) { - let visibility = if is_ancestor(src, dst) { + let visibility = if mod_is_ancestor(src, dst) { Visibility::Public } else { decl.visibility(engines) @@ -690,7 +694,7 @@ impl Root { ) -> Result<(), ErrorEmitted> { let dst = self.module.mod_path(); // you are always allowed to access your ancestor's symbols - if !is_ancestor(src, dst) { + if !mod_is_ancestor(src, dst) { // we don't check the first prefix because direct children are always accessible for prefix in iter_prefixes(src).skip(1) { let module = self.module.lookup_submodule(handler, engines, prefix)?; @@ -999,7 +1003,3 @@ impl From for Root { Root { module } } } - -fn is_ancestor(src: &ModulePath, dst: &ModulePath) -> bool { - dst.len() >= src.len() && src.iter().zip(dst).all(|(src, dst)| src == dst) -}