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; }
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,
--- /dev/null
+#[crate_type = "lib"];
+
+pub struct Fish {
+ x: int
+}
+
+impl Fish {
+ fn swim(&self) {}
+}
+
--- /dev/null
+#[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 }
+ }
+}
+
+
--- /dev/null
+// 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();
+}
+
--- /dev/null
+// 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 " });
+}
+