about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2013-01-31 12:40:05 -0800
committerPatrick Walton <pcwalton@mimiga.net>2013-02-03 17:50:27 -0800
commit04eb9b4eb0472aa89dce1ad53d33f5e52284b128 (patch)
tree6736b65caf9907427ce8cdc25ee1b6e8bbc4fae6
parent5d03612f9d643b6a49678535972715456dd6ac19 (diff)
downloadrust-04eb9b4eb0472aa89dce1ad53d33f5e52284b128.tar.gz
rust-04eb9b4eb0472aa89dce1ad53d33f5e52284b128.zip
librustc: Fix bugs regarding to impl privacy. rs=bugfix
-rw-r--r--src/librustc/metadata/encoder.rs4
-rw-r--r--src/librustc/middle/resolve.rs2
-rw-r--r--src/test/auxiliary/impl_privacy_xc_1.rs10
-rw-r--r--src/test/auxiliary/impl_privacy_xc_2.rs15
-rw-r--r--src/test/run-pass/impl-privacy-xc-1.rs9
-rw-r--r--src/test/run-pass/impl-privacy-xc-2.rs10
6 files changed, 47 insertions, 3 deletions
diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs
index b8a1b942453..c6be09725e4 100644
--- a/src/librustc/metadata/encoder.rs
+++ b/src/librustc/metadata/encoder.rs
@@ -547,8 +547,8 @@ fn encode_info_for_item(ecx: @encode_ctxt, ebml_w: writer::Encoder,
     let tcx = ecx.tcx;
     let must_write =
         match item.node {
-          item_enum(_, _) | item_impl(*)
-          | item_trait(*) | item_struct(*) => true,
+          item_enum(_, _) | item_impl(*) | item_trait(*) | item_struct(*) |
+          item_mod(*) | item_foreign_mod(*) => true,
           _ => false
         };
     if !must_write && !reachable(ecx, item.id) { return; }
diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs
index c47baa8f7a4..09886913bc5 100644
--- a/src/librustc/middle/resolve.rs
+++ b/src/librustc/middle/resolve.rs
@@ -1212,7 +1212,7 @@ pub impl Resolver {
                         let parent_link = self.get_parent_link(new_parent,
                                                                ident);
                         let def_id = local_def(item.id);
-                        name_bindings.define_module(privacy,
+                        name_bindings.define_module(Public,
                                                     parent_link,
                                                     Some(def_id),
                                                     TraitModuleKind,
diff --git a/src/test/auxiliary/impl_privacy_xc_1.rs b/src/test/auxiliary/impl_privacy_xc_1.rs
new file mode 100644
index 00000000000..05d5cee47f2
--- /dev/null
+++ b/src/test/auxiliary/impl_privacy_xc_1.rs
@@ -0,0 +1,10 @@
+#[crate_type = "lib"];
+
+pub struct Fish {
+    x: int
+}
+
+impl Fish {
+    fn swim(&self) {}
+}
+
diff --git a/src/test/auxiliary/impl_privacy_xc_2.rs b/src/test/auxiliary/impl_privacy_xc_2.rs
new file mode 100644
index 00000000000..009e132f598
--- /dev/null
+++ b/src/test/auxiliary/impl_privacy_xc_2.rs
@@ -0,0 +1,15 @@
+#[crate_type = "lib"];
+
+pub struct Fish {
+    x: int
+}
+
+mod unexported {
+    use super::Fish;
+    impl Fish : Eq {
+        pure fn eq(&self, _: &Fish) -> bool { true }
+        pure fn ne(&self, _: &Fish) -> bool { false }
+    }
+}
+
+
diff --git a/src/test/run-pass/impl-privacy-xc-1.rs b/src/test/run-pass/impl-privacy-xc-1.rs
new file mode 100644
index 00000000000..0fbb88e2ff8
--- /dev/null
+++ b/src/test/run-pass/impl-privacy-xc-1.rs
@@ -0,0 +1,9 @@
+// aux-build:impl_privacy_xc_1.rs
+
+extern mod impl_privacy_xc_1;
+
+fn main() {
+    let fish = impl_privacy_xc_1::Fish { x: 1 };
+    fish.swim();
+}
+
diff --git a/src/test/run-pass/impl-privacy-xc-2.rs b/src/test/run-pass/impl-privacy-xc-2.rs
new file mode 100644
index 00000000000..ab0612ab82d
--- /dev/null
+++ b/src/test/run-pass/impl-privacy-xc-2.rs
@@ -0,0 +1,10 @@
+// aux-build:impl_privacy_xc_2.rs
+
+extern mod impl_privacy_xc_2;
+
+fn main() {
+    let fish1 = impl_privacy_xc_2::Fish { x: 1 };
+    let fish2 = impl_privacy_xc_2::Fish { x: 2 };
+    io::println(if fish1.eq(&fish2) { "yes" } else { "no " });
+}
+