From 7b0ed94bdc6f42f0abed2ee2e293e3800725eaeb Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 27 Sep 2012 17:42:25 -0700 Subject: [PATCH] rustc: Make enum export visibility inherit properly --- src/rustc/middle/resolve.rs | 15 ++++++++++----- src/test/run-pass/enum-export-inheritance.rs | 12 ++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 src/test/run-pass/enum-export-inheritance.rs diff --git a/src/rustc/middle/resolve.rs b/src/rustc/middle/resolve.rs index 99d98c52f959..def21ae03e08 100644 --- a/src/rustc/middle/resolve.rs +++ b/src/rustc/middle/resolve.rs @@ -1063,6 +1063,7 @@ impl Resolver { for enum_definition.variants.each |variant| { self.build_reduced_graph_for_variant(*variant, local_def(item.id), + privacy, new_parent, visitor); } @@ -1156,17 +1157,20 @@ impl Resolver { // type and/or value namespaces. fn build_reduced_graph_for_variant(variant: variant, item_id: def_id, + +parent_privacy: Privacy, parent: ReducedGraphParent, &&visitor: vt) { - let legacy = match parent { - ModuleReducedGraphParent(m) => m.legacy_exports - }; - let ident = variant.node.name; let (child, _) = self.add_child(ident, parent, ~[ValueNS], variant.span); - let privacy = self.visibility_to_privacy(variant.node.vis, legacy); + + let privacy; + match variant.node.vis { + public => privacy = Public, + private => privacy = Private, + inherited => privacy = parent_privacy + } match variant.node.kind { tuple_variant_kind(_) => { @@ -1188,6 +1192,7 @@ impl Resolver { variant.span); for enum_definition.variants.each |variant| { self.build_reduced_graph_for_variant(*variant, item_id, + parent_privacy, parent, visitor); } } diff --git a/src/test/run-pass/enum-export-inheritance.rs b/src/test/run-pass/enum-export-inheritance.rs new file mode 100644 index 000000000000..1fddddba331b --- /dev/null +++ b/src/test/run-pass/enum-export-inheritance.rs @@ -0,0 +1,12 @@ +mod a { + pub enum Foo { + Bar, + Baz, + Boo + } +} + +fn main() { + let x = a::Bar; +} +