]> git.lizzy.rs Git - rust.git/commitdiff
librustc: Fix bugs regarding to impl privacy. rs=bugfix
authorPatrick Walton <pcwalton@mimiga.net>
Thu, 31 Jan 2013 20:40:05 +0000 (12:40 -0800)
committerPatrick Walton <pcwalton@mimiga.net>
Mon, 4 Feb 2013 01:50:27 +0000 (17:50 -0800)
src/librustc/metadata/encoder.rs
src/librustc/middle/resolve.rs
src/test/auxiliary/impl_privacy_xc_1.rs [new file with mode: 0644]
src/test/auxiliary/impl_privacy_xc_2.rs [new file with mode: 0644]
src/test/run-pass/impl-privacy-xc-1.rs [new file with mode: 0644]
src/test/run-pass/impl-privacy-xc-2.rs [new file with mode: 0644]

index b8a1b942453f0182a289831dee4bb2e54b7741c5..c6be09725e4d6f52d8bae5c9b9dddc1b0c8a7b85 100644 (file)
@@ -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; }
index c47baa8f7a4e348dda9955b3570d6f376af0924e..09886913bc5332057ae9a6273119a13291302e7f 100644 (file)
@@ -1212,7 +1212,7 @@ fn build_reduced_graph_for_item(item: @item,
                         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 (file)
index 0000000..05d5cee
--- /dev/null
@@ -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 (file)
index 0000000..009e132
--- /dev/null
@@ -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 (file)
index 0000000..0fbb88e
--- /dev/null
@@ -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 (file)
index 0000000..ab0612a
--- /dev/null
@@ -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 " });
+}
+