about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-09-27 17:42:25 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-09-27 17:43:09 -0700
commit7b0ed94bdc6f42f0abed2ee2e293e3800725eaeb (patch)
tree1ef798cb443364c33556b976aa745e174dbfa51a
parent4eb5177d8c0bc6de0383ea1376115ba630627c34 (diff)
downloadrust-7b0ed94bdc6f42f0abed2ee2e293e3800725eaeb.tar.gz
rust-7b0ed94bdc6f42f0abed2ee2e293e3800725eaeb.zip
rustc: Make enum export visibility inherit properly
-rw-r--r--src/rustc/middle/resolve.rs15
-rw-r--r--src/test/run-pass/enum-export-inheritance.rs12
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;
+}
+