diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2012-09-27 17:42:25 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2012-09-27 17:43:09 -0700 |
| commit | 7b0ed94bdc6f42f0abed2ee2e293e3800725eaeb (patch) | |
| tree | 1ef798cb443364c33556b976aa745e174dbfa51a | |
| parent | 4eb5177d8c0bc6de0383ea1376115ba630627c34 (diff) | |
| download | rust-7b0ed94bdc6f42f0abed2ee2e293e3800725eaeb.tar.gz rust-7b0ed94bdc6f42f0abed2ee2e293e3800725eaeb.zip | |
rustc: Make enum export visibility inherit properly
| -rw-r--r-- | src/rustc/middle/resolve.rs | 15 | ||||
| -rw-r--r-- | src/test/run-pass/enum-export-inheritance.rs | 12 |
2 files changed, 22 insertions, 5 deletions
diff --git a/src/rustc/middle/resolve.rs b/src/rustc/middle/resolve.rs index 99d98c52f95..def21ae03e0 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<ReducedGraphParent>) { - 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 00000000000..1fddddba331 --- /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; +} + |
