Skip to content

Commit 04eb9b4

Browse files
committed
librustc: Fix bugs regarding to impl privacy. rs=bugfix
1 parent 5d03612 commit 04eb9b4

File tree

6 files changed

+47
-3
lines changed

6 files changed

+47
-3
lines changed

src/librustc/metadata/encoder.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -547,8 +547,8 @@ fn encode_info_for_item(ecx: @encode_ctxt, ebml_w: writer::Encoder,
547547
let tcx = ecx.tcx;
548548
let must_write =
549549
match item.node {
550-
item_enum(_, _) | item_impl(*)
551-
| item_trait(*) | item_struct(*) => true,
550+
item_enum(_, _) | item_impl(*) | item_trait(*) | item_struct(*) |
551+
item_mod(*) | item_foreign_mod(*) => true,
552552
_ => false
553553
};
554554
if !must_write && !reachable(ecx, item.id) { return; }

src/librustc/middle/resolve.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1212,7 +1212,7 @@ pub impl Resolver {
12121212
let parent_link = self.get_parent_link(new_parent,
12131213
ident);
12141214
let def_id = local_def(item.id);
1215-
name_bindings.define_module(privacy,
1215+
name_bindings.define_module(Public,
12161216
parent_link,
12171217
Some(def_id),
12181218
TraitModuleKind,
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#[crate_type = "lib"];
2+
3+
pub struct Fish {
4+
x: int
5+
}
6+
7+
impl Fish {
8+
fn swim(&self) {}
9+
}
10+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#[crate_type = "lib"];
2+
3+
pub struct Fish {
4+
x: int
5+
}
6+
7+
mod unexported {
8+
use super::Fish;
9+
impl Fish : Eq {
10+
pure fn eq(&self, _: &Fish) -> bool { true }
11+
pure fn ne(&self, _: &Fish) -> bool { false }
12+
}
13+
}
14+
15+
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// aux-build:impl_privacy_xc_1.rs
2+
3+
extern mod impl_privacy_xc_1;
4+
5+
fn main() {
6+
let fish = impl_privacy_xc_1::Fish { x: 1 };
7+
fish.swim();
8+
}
9+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// aux-build:impl_privacy_xc_2.rs
2+
3+
extern mod impl_privacy_xc_2;
4+
5+
fn main() {
6+
let fish1 = impl_privacy_xc_2::Fish { x: 1 };
7+
let fish2 = impl_privacy_xc_2::Fish { x: 2 };
8+
io::println(if fish1.eq(&fish2) { "yes" } else { "no " });
9+
}
10+

0 commit comments

Comments
 (0)