diff options
author | Arthur Cohen <arthur.cohen@embecosm.com> | 2022-04-22 12:15:52 +0200 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2022-04-22 12:31:58 +0200 |
commit | cae1e873392009c600e73375db9b0c2fb54b3a63 (patch) | |
tree | 4699739f860846f17bb7c2edb0f647c81408e869 /gcc | |
parent | 7be856f7b6f39694f05c7c3453653046e48b3a52 (diff) | |
download | gcc-cae1e873392009c600e73375db9b0c2fb54b3a63.zip gcc-cae1e873392009c600e73375db9b0c2fb54b3a63.tar.gz gcc-cae1e873392009c600e73375db9b0c2fb54b3a63.tar.bz2 |
privacy: visibility: Handle modules properly
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/privacy/rust-visibility-resolver.cc | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/gcc/rust/privacy/rust-visibility-resolver.cc b/gcc/rust/privacy/rust-visibility-resolver.cc index 99f1367..336d4d6 100644 --- a/gcc/rust/privacy/rust-visibility-resolver.cc +++ b/gcc/rust/privacy/rust-visibility-resolver.cc @@ -25,14 +25,15 @@ namespace Privacy { VisibilityResolver::VisibilityResolver (Analysis::Mappings &mappings) : mappings (mappings) -{ - // FIXME: Insert a top module (crate) inside the module_stack - // FIXME: Insert the visibility of the crate in the mappings maybe? -} +{} void VisibilityResolver::go (HIR::Crate &crate) { + module_stack.push_back (crate.get_mappings ().get_defid ()); + mappings.insert_visibility (crate.get_mappings ().get_defid (), + ModuleVisibility::create_public ()); + for (auto &item : crate.items) { if (item->get_hir_kind () == HIR::Node::VIS_ITEM) @@ -74,7 +75,20 @@ VisibilityResolver::peek_module () void VisibilityResolver::visit (HIR::Module &mod) -{} +{ + module_stack.push_back (mod.get_mappings ().get_defid ()); + + for (auto &item : mod.get_items ()) + { + if (item->get_hir_kind () == HIR::Node::VIS_ITEM) + { + auto vis_item = static_cast<HIR::VisItem *> (item.get ()); + vis_item->accept_vis (*this); + } + } + + module_stack.pop_back (); +} void VisibilityResolver::visit (HIR::ExternCrate &crate) |