diff --git a/doc/tutorial.md b/doc/tutorial.md index f940876187788..d31fbbb0c07a1 100644 --- a/doc/tutorial.md +++ b/doc/tutorial.md @@ -2304,11 +2304,10 @@ mod farm { farmer: Human } - // Note - visibility modifiers on impls currently have no effect impl Farm { priv fn feed_chickens(&self) { ... } priv fn feed_cows(&self) { ... } - fn add_chicken(&self, c: Chicken) { ... } + pub fn add_chicken(&self, c: Chicken) { ... } } pub fn feed_animals(farm: &Farm) { diff --git a/src/libcore/cell.rs b/src/libcore/cell.rs index 5887df6802f57..6c35c62c3a705 100644 --- a/src/libcore/cell.rs +++ b/src/libcore/cell.rs @@ -28,7 +28,7 @@ pub pure fn empty_cell<T>() -> Cell<T> { Cell { value: None } } -impl<T> Cell<T> { +pub impl<T> Cell<T> { /// Yields the value, failing if the cell is empty. fn take() -> T { if self.is_empty() { diff --git a/src/libcore/comm.rs b/src/libcore/comm.rs index 7939644e51cb9..da69cd984cd6f 100644 --- a/src/libcore/comm.rs +++ b/src/libcore/comm.rs @@ -190,7 +190,7 @@ pub fn PortSet<T: Owned>() -> PortSet<T>{ } } -impl<T: Owned> PortSet<T> { +pub impl<T: Owned> PortSet<T> { fn add(port: Port<T>) { self.ports.push(port) @@ -323,12 +323,12 @@ pub fn oneshot<T: Owned>() -> (PortOne<T>, ChanOne<T>) { (port, chan) } -impl<T: Owned> PortOne<T> { +pub impl<T: Owned> PortOne<T> { fn recv(self) -> T { recv_one(self) } fn try_recv(self) -> Option<T> { try_recv_one(self) } } -impl<T: Owned> ChanOne<T> { +pub impl<T: Owned> ChanOne<T> { fn send(self, data: T) { send_one(self, data) } fn try_send(self, data: T) -> bool { try_send_one(self, data) } } diff --git a/src/libcore/condition.rs b/src/libcore/condition.rs index a7c8c1f4d6600..00048beae5acb 100644 --- a/src/libcore/condition.rs +++ b/src/libcore/condition.rs @@ -25,7 +25,7 @@ pub struct Condition<T, U> { key: task::local_data::LocalDataKey<Handler<T, U>> } -impl<T, U> Condition<T, U> { +pub impl<T, U> Condition<T, U> { fn trap(&self, h: &self/fn(T) -> U) -> Trap/&self<T, U> { unsafe { let p : *RustClosure = ::cast::transmute(&h); @@ -69,7 +69,7 @@ struct Trap<T, U> { handler: @Handler<T, U> } -impl<T, U> Trap<T, U> { +pub impl<T, U> Trap<T, U> { fn in<V>(&self, inner: &self/fn() -> V) -> V { unsafe { let _g = Guard { cond: self.cond }; diff --git a/src/libcore/dlist.rs b/src/libcore/dlist.rs index 3580736488926..f1f4e55866101 100644 --- a/src/libcore/dlist.rs +++ b/src/libcore/dlist.rs @@ -62,7 +62,7 @@ priv impl<T> DListNode<T> { } } -impl<T> DListNode<T> { +pub impl<T> DListNode<T> { /// Get the next node in the list, if there is one. pure fn next_link(@mut self) -> DListLink<T> { self.assert_links(); @@ -208,7 +208,7 @@ priv impl<T> DList<T> { } } -impl<T> DList<T> { +pub impl<T> DList<T> { /// Get the size of the list. O(1). pure fn len(@mut self) -> uint { self.size } /// Returns true if the list is empty. O(1). @@ -457,7 +457,7 @@ impl<T> DList<T> { } } -impl<T:Copy> DList<T> { +pub impl<T:Copy> DList<T> { /// Remove data from the head of the list. O(1). fn pop(@mut self) -> Option<T> { self.pop_n().map(|nobe| nobe.data) diff --git a/src/libcore/dvec.rs b/src/libcore/dvec.rs index 9f2036c5f41a6..1fef4ad42f1de 100644 --- a/src/libcore/dvec.rs +++ b/src/libcore/dvec.rs @@ -92,17 +92,6 @@ priv impl<A> DVec<A> { } } - #[inline(always)] - fn check_out<B>(f: &fn(v: ~[A]) -> B) -> B { - unsafe { - let mut data = cast::reinterpret_cast(&null::<()>()); - data <-> self.data; - let data_ptr: *() = cast::reinterpret_cast(&data); - if data_ptr.is_null() { fail!(~"Recursive use of dvec"); } - return f(data); - } - } - #[inline(always)] fn give_back(data: ~[A]) { unsafe { @@ -117,7 +106,19 @@ priv impl<A> DVec<A> { // In theory, most everything should work with any A, but in practice // almost nothing works without the copy bound due to limitations // around closures. -impl<A> DVec<A> { +pub impl<A> DVec<A> { + // FIXME (#3758): This should not need to be public. + #[inline(always)] + fn check_out<B>(f: &fn(v: ~[A]) -> B) -> B { + unsafe { + let mut data = cast::reinterpret_cast(&null::<()>()); + data <-> self.data; + let data_ptr: *() = cast::reinterpret_cast(&data); + if data_ptr.is_null() { fail!(~"Recursive use of dvec"); } + return f(data); + } + } + /// Reserves space for N elements fn reserve(count: uint) { vec::reserve(&mut self.data, count) @@ -215,7 +216,7 @@ impl<A> DVec<A> { } } -impl<A:Copy> DVec<A> { +pub impl<A:Copy> DVec<A> { /** * Append all elements of a vector to the end of the list * diff --git a/src/libcore/mutable.rs b/src/libcore/mutable.rs index 1fb855520ba49..f888fbdb40cc6 100644 --- a/src/libcore/mutable.rs +++ b/src/libcore/mutable.rs @@ -43,7 +43,7 @@ pub fn unwrap<T>(m: Mut<T>) -> T { value } -impl<T> Data<T> { +pub impl<T> Data<T> { fn borrow_mut<R>(op: &fn(t: &mut T) -> R) -> R { match self.mode { Immutable => fail!(fmt!("%? currently immutable", diff --git a/src/libcore/option.rs b/src/libcore/option.rs index 12ed0df007621..53944c4c2c825 100644 --- a/src/libcore/option.rs +++ b/src/libcore/option.rs @@ -281,7 +281,7 @@ pub pure fn expect<T>(opt: Option<T>, reason: &str) -> T { } } -impl<T> Option<T> { +pub impl<T> Option<T> { /// Returns true if the option equals `none` #[inline(always)] pure fn is_none(&self) -> bool { is_none(self) } @@ -393,7 +393,7 @@ impl<T> Option<T> { pure fn expect(self, reason: &str) -> T { expect(self, reason) } } -impl<T:Copy> Option<T> { +pub impl<T:Copy> Option<T> { /** Gets the value out of an option @@ -421,7 +421,7 @@ impl<T:Copy> Option<T> { } } -impl<T:Copy + Zero> Option<T> { +pub impl<T:Copy + Zero> Option<T> { #[inline(always)] pure fn get_or_zero(self) -> T { get_or_zero(self) } } diff --git a/src/libcore/path.rs b/src/libcore/path.rs index 1753862649f57..4e0e4e93cf5ae 100644 --- a/src/libcore/path.rs +++ b/src/libcore/path.rs @@ -241,7 +241,7 @@ mod stat { } -impl Path { +pub impl Path { fn stat(&self) -> Option<libc::stat> { unsafe { do str::as_c_str(self.to_str()) |buf| { @@ -290,7 +290,7 @@ impl Path { #[cfg(target_os = "freebsd")] #[cfg(target_os = "linux")] #[cfg(target_os = "macos")] -impl Path { +pub impl Path { fn get_atime(&self) -> Option<(i64, int)> { match self.stat() { None => None, @@ -324,7 +324,7 @@ impl Path { #[cfg(target_os = "freebsd")] #[cfg(target_os = "macos")] -impl Path { +pub impl Path { fn get_birthtime(&self) -> Option<(i64, int)> { match self.stat() { None => None, @@ -337,7 +337,7 @@ impl Path { } #[cfg(target_os = "win32")] -impl Path { +pub impl Path { fn get_atime(&self) -> Option<(i64, int)> { match self.stat() { None => None, diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index a0a29c6b51601..6389ec0861595 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -800,7 +800,7 @@ pub fn SendPacketBuffered<T,Tbuffer>(p: *Packet<T>) } } -impl<T,Tbuffer> SendPacketBuffered<T,Tbuffer> { +pub impl<T,Tbuffer> SendPacketBuffered<T,Tbuffer> { fn unwrap() -> *Packet<T> { let mut p = None; p <-> self.p; @@ -857,7 +857,7 @@ impl<T:Owned,Tbuffer:Owned> ::ops::Drop for RecvPacketBuffered<T,Tbuffer> { } } -impl<T:Owned,Tbuffer:Owned> RecvPacketBuffered<T, Tbuffer> { +pub impl<T:Owned,Tbuffer:Owned> RecvPacketBuffered<T, Tbuffer> { fn unwrap() -> *Packet<T> { let mut p = None; p <-> self.p; diff --git a/src/libcore/private.rs b/src/libcore/private.rs index e4fab18966cad..7968fdce46e7a 100644 --- a/src/libcore/private.rs +++ b/src/libcore/private.rs @@ -335,7 +335,7 @@ fn LittleLock() -> LittleLock { } } -impl LittleLock { +pub impl LittleLock { #[inline(always)] unsafe fn lock<T>(f: fn() -> T) -> T { struct Unlock { @@ -381,7 +381,7 @@ impl<T:Owned> Clone for Exclusive<T> { } } -impl<T:Owned> Exclusive<T> { +pub impl<T:Owned> Exclusive<T> { // Exactly like std::arc::mutex_arc,access(), but with the little_lock // instead of a proper mutex. Same reason for being unsafe. // diff --git a/src/libcore/private/extfmt.rs b/src/libcore/private/extfmt.rs index 36ea67ea6954e..616d37a133a9f 100644 --- a/src/libcore/private/extfmt.rs +++ b/src/libcore/private/extfmt.rs @@ -142,7 +142,7 @@ pub mod ct { next: uint } - impl<T> Parsed<T> { + pub impl<T> Parsed<T> { static pure fn new(val: T, next: uint) -> Parsed<T> { Parsed {val: val, next: next} } diff --git a/src/libcore/rand.rs b/src/libcore/rand.rs index 15362f89e3fb6..04a551740a80f 100644 --- a/src/libcore/rand.rs +++ b/src/libcore/rand.rs @@ -141,7 +141,7 @@ pub struct Weighted<T> { } /// Extension methods for random number generators -impl Rng { +pub impl Rng { /// Return a random value for a Rand type fn gen<T:Rand>() -> T { Rand::rand(self) diff --git a/src/libcore/reflect.rs b/src/libcore/reflect.rs index ed7e485678e10..2a688482f6186 100644 --- a/src/libcore/reflect.rs +++ b/src/libcore/reflect.rs @@ -45,7 +45,7 @@ pub fn MovePtrAdaptor<V:TyVisitor + MovePtr>(v: V) -> MovePtrAdaptor<V> { MovePtrAdaptor { inner: v } } -impl<V:TyVisitor + MovePtr> MovePtrAdaptor<V> { +pub impl<V:TyVisitor + MovePtr> MovePtrAdaptor<V> { #[inline(always)] fn bump(sz: uint) { do self.inner.move_ptr() |p| { diff --git a/src/libcore/repr.rs b/src/libcore/repr.rs index 4c3abb09756e9..ab4bdec266cbf 100644 --- a/src/libcore/repr.rs +++ b/src/libcore/repr.rs @@ -167,7 +167,7 @@ impl MovePtr for ReprVisitor { } } -impl ReprVisitor { +pub impl ReprVisitor { // Various helpers for the TyVisitor impl diff --git a/src/libcore/result.rs b/src/libcore/result.rs index b03eaeab3e0cc..ddcd1547841db 100644 --- a/src/libcore/result.rs +++ b/src/libcore/result.rs @@ -228,7 +228,7 @@ pub pure fn map_err<T:Copy,E,F:Copy>(res: &Result<T, E>, op: fn(&E) -> F) } } -impl<T, E> Result<T, E> { +pub impl<T, E> Result<T, E> { #[inline(always)] pure fn get_ref(&self) -> &self/T { get_ref(self) } @@ -261,7 +261,7 @@ impl<T, E> Result<T, E> { } } -impl<T:Copy,E> Result<T, E> { +pub impl<T:Copy,E> Result<T, E> { #[inline(always)] pure fn get(&self) -> T { get(self) } @@ -271,7 +271,7 @@ impl<T:Copy,E> Result<T, E> { } } -impl<T, E: Copy> Result<T, E> { +pub impl<T, E: Copy> Result<T, E> { #[inline(always)] pure fn get_err(&self) -> E { get_err(self) } diff --git a/src/libcore/task/mod.rs b/src/libcore/task/mod.rs index 2a640e4bf8cf7..49507897392de 100644 --- a/src/libcore/task/mod.rs +++ b/src/libcore/task/mod.rs @@ -232,7 +232,7 @@ priv impl TaskBuilder { } } -impl TaskBuilder { +pub impl TaskBuilder { /** * Decouple the child task's failure from the parent's. If either fails, * the other will not be killed. diff --git a/src/librustc/metadata/common.rs b/src/librustc/metadata/common.rs index 877098ed49fe6..90d8dcdc23543 100644 --- a/src/librustc/metadata/common.rs +++ b/src/librustc/metadata/common.rs @@ -155,6 +155,7 @@ pub const tag_lang_items_item_node_id: uint = 0x75; pub const tag_item_unnamed_field: uint = 0x76; pub const tag_items_data_item_struct_ctor: uint = 0x77; +pub const tag_items_data_item_visibility: uint = 0x78; pub struct LinkMeta { name: @str, diff --git a/src/librustc/metadata/csearch.rs b/src/librustc/metadata/csearch.rs index eda7362b9c177..ae4a223c1ae75 100644 --- a/src/librustc/metadata/csearch.rs +++ b/src/librustc/metadata/csearch.rs @@ -234,6 +234,14 @@ pub fn struct_dtor(cstore: @mut cstore::CStore, def: ast::def_id) let cdata = cstore::get_crate_data(cstore, def.crate); decoder::struct_dtor(cdata, def.node) } + +pub fn get_method_visibility(cstore: @mut cstore::CStore, + def_id: ast::def_id) + -> ast::visibility { + let cdata = cstore::get_crate_data(cstore, def_id.crate); + decoder::get_method_visibility(cdata, def_id.node) +} + // Local Variables: // mode: rust // fill-column: 78; diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index ca55c8a407276..5963d87806093 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -151,6 +151,16 @@ fn item_family(item: ebml::Doc) -> Family { } } +fn item_visibility(item: ebml::Doc) -> ast::visibility { + let visibility = reader::get_doc(item, tag_items_data_item_visibility); + match reader::doc_as_u8(visibility) as char { + 'y' => ast::public, + 'n' => ast::private, + 'i' => ast::inherited, + _ => fail!(~"unknown visibility character"), + } +} + fn item_method_sort(item: ebml::Doc) -> char { for reader::tagged_docs(item, tag_item_trait_method_sort) |doc| { return str::from_bytes(reader::doc_data(doc))[0] as char; @@ -860,7 +870,7 @@ pub fn get_item_attrs(cdata: cmd, } } -pure fn family_to_visibility(family: Family) -> ast::visibility { +pure fn struct_field_family_to_visibility(family: Family) -> ast::visibility { match family { PublicField => ast::public, PrivateField => ast::private, @@ -883,7 +893,7 @@ pub fn get_struct_fields(intr: @ident_interner, cdata: cmd, id: ast::node_id) result.push(ty::field_ty { ident: name, id: did, vis: - family_to_visibility(f), + struct_field_family_to_visibility(f), mutability: mt, }); } @@ -900,6 +910,11 @@ pub fn get_struct_fields(intr: @ident_interner, cdata: cmd, id: ast::node_id) result } +pub fn get_method_visibility(cdata: cmd, id: ast::node_id) + -> ast::visibility { + item_visibility(lookup_item(id, cdata.data)) +} + fn family_has_type_params(fam: Family) -> bool { match fam { Const | ForeignType | Mod | ForeignMod | PublicField | PrivateField diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 95973aaaf90ad..a950cd04d6771 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -383,7 +383,8 @@ fn encode_info_for_mod(ecx: @EncodeContext, ebml_w: writer::Encoder, ebml_w.end_tag(); } -fn encode_visibility(ebml_w: writer::Encoder, visibility: visibility) { +fn encode_struct_field_family(ebml_w: writer::Encoder, + visibility: visibility) { encode_family(ebml_w, match visibility { public => 'g', private => 'j', @@ -391,6 +392,17 @@ fn encode_visibility(ebml_w: writer::Encoder, visibility: visibility) { }); } +fn encode_visibility(ebml_w: writer::Encoder, visibility: visibility) { + ebml_w.start_tag(tag_items_data_item_visibility); + let ch = match visibility { + public => 'y', + private => 'n', + inherited => 'i', + }; + ebml_w.wr_str(str::from_char(ch)); + ebml_w.end_tag(); +} + fn encode_self_type(ebml_w: writer::Encoder, self_type: ast::self_ty_) { ebml_w.start_tag(tag_item_trait_method_self_ty); @@ -456,7 +468,7 @@ fn encode_info_for_struct(ecx: @EncodeContext, ebml_w: writer::Encoder, ebml_w.start_tag(tag_items_data_item); debug!("encode_info_for_struct: doing %s %d", *tcx.sess.str_of(nm), id); - encode_visibility(ebml_w, vis); + encode_struct_field_family(ebml_w, vis); encode_name(ecx, ebml_w, nm); encode_path(ecx, ebml_w, path, ast_map::path_name(nm)); encode_type(ecx, ebml_w, node_id_to_type(tcx, id)); @@ -525,6 +537,7 @@ fn encode_info_for_method(ecx: @EncodeContext, should_inline: bool, parent_id: node_id, m: @method, + parent_visibility: ast::visibility, owner_generics: &ast::Generics, method_generics: &ast::Generics) { debug!("encode_info_for_method: %d %s %u %u", m.id, @@ -533,6 +546,7 @@ fn encode_info_for_method(ecx: @EncodeContext, method_generics.ty_params.len()); ebml_w.start_tag(tag_items_data_item); encode_def_id(ebml_w, local_def(m.id)); + match m.self_ty.node { ast::sty_static => { encode_family(ebml_w, purity_static_method_family(m.purity)); @@ -550,6 +564,14 @@ fn encode_info_for_method(ecx: @EncodeContext, encode_name(ecx, ebml_w, m.ident); encode_path(ecx, ebml_w, impl_path, ast_map::path_name(m.ident)); encode_self_type(ebml_w, m.self_ty.node); + + // Combine parent visibility and this visibility. + let visibility = match m.vis { + ast::inherited => parent_visibility, + vis => vis, + }; + encode_visibility(ebml_w, visibility); + if len > 0u || should_inline { (ecx.encode_inlined_item)( ecx, ebml_w, impl_path, @@ -568,6 +590,7 @@ fn purity_fn_family(p: purity) -> char { extern_fn => 'e' } } + fn purity_static_method_family(p: purity) -> char { match p { unsafe_fn => 'U', @@ -757,7 +780,7 @@ fn encode_info_for_item(ecx: @EncodeContext, ebml_w: writer::Encoder, match f.node.kind { named_field(ident, _, vis) => { ebml_w.start_tag(tag_item_field); - encode_visibility(ebml_w, vis); + encode_struct_field_family(ebml_w, vis); encode_name(ecx, ebml_w, ident); encode_def_id(ebml_w, local_def(f.node.id)); ebml_w.end_tag(); @@ -808,12 +831,28 @@ fn encode_info_for_item(ecx: @EncodeContext, ebml_w: writer::Encoder, let mut impl_path = vec::append(~[], path); impl_path += ~[ast_map::path_name(item.ident)]; + // If there is a trait reference, treat the methods as always public. + // This is to work around some incorrect behavior in privacy checking: + // when the method belongs to a trait, it should acquire the privacy + // from the trait, not the impl. Forcing the visibility to be public + // makes things sorta work. + let parent_visibility = if opt_trait.is_some() { + ast::public + } else { + item.vis + }; + for methods.each |m| { index.push(entry {val: m.id, pos: ebml_w.writer.tell()}); - encode_info_for_method(ecx, ebml_w, impl_path, + encode_info_for_method(ecx, + ebml_w, + impl_path, should_inline(m.attrs), - item.id, *m, - generics, &m.generics); + item.id, + *m, + parent_visibility, + generics, + &m.generics); } } item_trait(ref generics, ref traits, ref ms) => { @@ -902,9 +941,15 @@ fn encode_info_for_item(ecx: @EncodeContext, ebml_w: writer::Encoder, // of provided methods. I am not sure why this is. -ndm let owner_generics = ast_util::empty_generics(); - encode_info_for_method(ecx, ebml_w, /*bad*/copy path, - true, item.id, *m, - &owner_generics, &m.generics); + encode_info_for_method(ecx, + ebml_w, + /*bad*/copy path, + true, + item.id, + *m, + item.vis, + &owner_generics, + &m.generics); } } item_mac(*) => fail!(~"item macros unimplemented") diff --git a/src/librustc/middle/astencode.rs b/src/librustc/middle/astencode.rs index 58433cec2725d..d6af387399920 100644 --- a/src/librustc/middle/astencode.rs +++ b/src/librustc/middle/astencode.rs @@ -167,7 +167,7 @@ fn reserve_id_range(sess: Session, ast_util::id_range { min: to_id_min, max: to_id_min } } -impl ExtendedDecodeContext { +pub impl ExtendedDecodeContext { fn tr_id(&self, id: ast::node_id) -> ast::node_id { /*! * diff --git a/src/librustc/middle/borrowck/check_loans.rs b/src/librustc/middle/borrowck/check_loans.rs index afefec00c5040..f1e52d00beed9 100644 --- a/src/librustc/middle/borrowck/check_loans.rs +++ b/src/librustc/middle/borrowck/check_loans.rs @@ -89,7 +89,7 @@ enum assignment_type { at_swap } -impl assignment_type { +pub impl assignment_type { fn checked_by_liveness(&self) -> bool { // the liveness pass guarantees that immutable local variables // are only assigned once; but it doesn't consider &mut @@ -106,7 +106,7 @@ impl assignment_type { } } -impl CheckLoanCtxt { +pub impl CheckLoanCtxt { fn tcx(@mut self) -> ty::ctxt { self.bccx.tcx } fn purity(@mut self, scope_id: ast::node_id) -> Option<purity_cause> { diff --git a/src/librustc/middle/borrowck/gather_loans.rs b/src/librustc/middle/borrowck/gather_loans.rs index 546e9359a32d9..c997b4a6b5f43 100644 --- a/src/librustc/middle/borrowck/gather_loans.rs +++ b/src/librustc/middle/borrowck/gather_loans.rs @@ -289,7 +289,7 @@ fn req_loans_in_expr(ex: @ast::expr, self.root_ub = old_root_ub; } -impl GatherLoanCtxt { +pub impl GatherLoanCtxt { fn tcx(@mut self) -> ty::ctxt { self.bccx.tcx } fn guarantee_adjustments(@mut self, diff --git a/src/librustc/middle/borrowck/loan.rs b/src/librustc/middle/borrowck/loan.rs index c39f2455c2f8f..e095c97093131 100644 --- a/src/librustc/middle/borrowck/loan.rs +++ b/src/librustc/middle/borrowck/loan.rs @@ -87,7 +87,7 @@ struct LoanContext { loans: ~[Loan] } -impl LoanContext { +pub impl LoanContext { fn tcx(&self) -> ty::ctxt { self.bccx.tcx } fn loan(&mut self, diff --git a/src/librustc/middle/borrowck/mod.rs b/src/librustc/middle/borrowck/mod.rs index eb2a93d86f9a4..b432d5a399adb 100644 --- a/src/librustc/middle/borrowck/mod.rs +++ b/src/librustc/middle/borrowck/mod.rs @@ -433,7 +433,7 @@ pub fn save_and_restore_managed<T:Copy,U>(save_and_restore_t: @mut T, u } -impl LoanKind { +pub impl LoanKind { fn is_freeze(&self) -> bool { match *self { TotalFreeze | PartialFreeze => true, diff --git a/src/librustc/middle/borrowck/preserve.rs b/src/librustc/middle/borrowck/preserve.rs index a123793e20b29..aabcd7a2fe5b1 100644 --- a/src/librustc/middle/borrowck/preserve.rs +++ b/src/librustc/middle/borrowck/preserve.rs @@ -35,7 +35,7 @@ pub enum PreserveCondition { PcIfPure(bckerr) } -impl PreserveCondition { +pub impl PreserveCondition { // combines two preservation conditions such that if either of // them requires purity, the result requires purity fn combine(&self, pc: PreserveCondition) -> PreserveCondition { @@ -46,7 +46,7 @@ impl PreserveCondition { } } -impl BorrowckCtxt { +pub impl BorrowckCtxt { fn preserve(&self, cmt: cmt, scope_region: ty::Region, @@ -80,7 +80,7 @@ struct PreserveCtxt { root_managed_data: bool } -impl PreserveCtxt { +pub impl PreserveCtxt { fn tcx(&self) -> ty::ctxt { self.bccx.tcx } fn preserve(&self, cmt: cmt) -> bckres<PreserveCondition> { diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index 84871f7496472..16f1d36e05c7c 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -322,7 +322,7 @@ struct LanguageItemCollector { item_refs: HashMap<@~str, uint>, } -impl LanguageItemCollector { +pub impl LanguageItemCollector { fn match_and_collect_meta_item(&self, item_def_id: def_id, meta_item: meta_item) { match meta_item.node { diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index eb418d0cd5acb..b14245afa9a19 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -331,7 +331,7 @@ struct Context { sess: Session } -impl Context { +pub impl Context { fn get_level(&self, lint: lint) -> level { get_lint_level(self.curr, lint) } diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index 96aa41f780913..3753c93f13ade 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -254,7 +254,7 @@ impl to_str::ToStr for Variable { // variable must not be assigned if there is some successor // assignment. And so forth. -impl LiveNode { +pub impl LiveNode { pure fn is_valid(&self) -> bool { **self != uint::max_value } } @@ -334,7 +334,7 @@ fn IrMaps(tcx: ty::ctxt, } } -impl IrMaps { +pub impl IrMaps { fn add_live_node(&mut self, lnk: LiveNodeKind) -> LiveNode { let ln = LiveNode(self.num_live_nodes); self.lnks.push(lnk); @@ -693,7 +693,7 @@ fn Liveness(ir: @mut IrMaps, specials: Specials) -> Liveness { } } -impl Liveness { +pub impl Liveness { fn live_node(&self, node_id: node_id, span: span) -> LiveNode { match self.ir.live_node_map.find(&node_id) { Some(ln) => ln, @@ -1649,7 +1649,7 @@ enum ReadKind { PartiallyMovedValue } -impl @Liveness { +pub impl @Liveness { fn check_ret(&self, id: node_id, sp: span, _fk: visit::fn_kind, entry_ln: LiveNode) { if self.live_on_entry(entry_ln, self.s.no_ret_var).is_some() { diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 3f8ee61e8412d..227d262a79e16 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -312,7 +312,7 @@ impl ToStr for MutabilityCategory { } } -impl MutabilityCategory { +pub impl MutabilityCategory { static fn from_mutbl(&self, m: ast::mutability) -> MutabilityCategory { match m { m_imm => McImmutable, diff --git a/src/librustc/middle/moves.rs b/src/librustc/middle/moves.rs index b23066c1d9692..d5adfee65af9f 100644 --- a/src/librustc/middle/moves.rs +++ b/src/librustc/middle/moves.rs @@ -301,7 +301,7 @@ fn compute_modes_for_expr(expr: @expr, cx.consume_expr(expr, v); } -impl UseMode { +pub impl UseMode { fn component_mode(&self, expr: @expr) -> UseMode { /*! * @@ -316,7 +316,7 @@ impl UseMode { } } -impl VisitContext { +pub impl VisitContext { fn consume_exprs(&self, exprs: &[@expr], visitor: vt<VisitContext>) diff --git a/src/librustc/middle/privacy.rs b/src/librustc/middle/privacy.rs index 3ec1cf3a7058e..e60069e05da81 100644 --- a/src/librustc/middle/privacy.rs +++ b/src/librustc/middle/privacy.rs @@ -14,10 +14,11 @@ use core::prelude::*; +use metadata::csearch; use middle::ty::{ty_struct, ty_enum}; use middle::ty; -use middle::typeck::{method_map, method_origin, method_param, method_self, - method_super}; +use middle::typeck::{method_map, method_origin, method_param, method_self}; +use middle::typeck::{method_super}; use middle::typeck::{method_static, method_trait}; use core::dvec::DVec; @@ -25,7 +26,7 @@ use core::util::ignore; use syntax::ast::{def_variant, expr_field, expr_method_call, expr_struct}; use syntax::ast::{expr_unary, ident, item_struct, item_enum, item_impl}; use syntax::ast::{item_trait, local_crate, node_id, pat_struct, private}; -use syntax::ast::{provided, required}; +use syntax::ast::{provided, public, required}; use syntax::ast; use syntax::ast_map::{node_item, node_method}; use syntax::ast_map; @@ -100,14 +101,52 @@ pub fn check_crate(tcx: ty::ctxt, }; // Checks that a private method is in scope. - let check_method: @fn(span: span, origin: &method_origin) = - |span, origin| { + let check_method: @fn(span: span, + origin: &method_origin, + ident: ast::ident) = + |span, origin, ident| { match *origin { method_static(method_id) => { if method_id.crate == local_crate { match tcx.items.find(&method_id.node) { Some(node_method(method, impl_id, _)) => { - if method.vis == private && + let mut is_private = false; + if method.vis == private { + is_private = true; + } else if method.vis == public { + is_private = false; + } else { + // Look up the enclosing impl. + if impl_id.crate != local_crate { + tcx.sess.span_bug(span, + ~"local method isn't \ + in local impl?!"); + } + + match tcx.items.find(&impl_id.node) { + Some(node_item(item, _)) => { + match item.node { + item_impl(_, None, _, _) + if item.vis != public => { + is_private = true; + } + _ => {} + } + } + Some(_) => { + tcx.sess.span_bug(span, + ~"impl wasn't an \ + item?!"); + } + None => { + tcx.sess.span_bug(span, + ~"impl wasn't in \ + AST map?!"); + } + } + } + + if is_private && (impl_id.crate != local_crate || !privileged_items .contains(&(impl_id.node))) { @@ -131,7 +170,15 @@ pub fn check_crate(tcx: ty::ctxt, } } } else { - // FIXME #4732: External crates. + let visibility = + csearch::get_method_visibility(tcx.sess.cstore, + method_id); + if visibility != public { + tcx.sess.span_err(span, + fmt!("method `%s` is private", + *tcx.sess.parse_sess.interner + .get(ident))); + } } } method_param(method_param { @@ -230,14 +277,16 @@ pub fn check_crate(tcx: ty::ctxt, Some(ref entry) => { debug!("(privacy checking) checking \ impl method"); - check_method(expr.span, &(*entry).origin); + check_method(expr.span, + &entry.origin, + ident); } } } _ => {} } } - expr_method_call(base, _, _, _, _) => { + expr_method_call(base, ident, _, _, _) => { // Ditto match ty::get(ty::type_autoderef(tcx, ty::expr_ty(tcx, base))).sty { @@ -253,7 +302,9 @@ pub fn check_crate(tcx: ty::ctxt, Some(ref entry) => { debug!("(privacy checking) checking \ impl method"); - check_method(expr.span, &(*entry).origin); + check_method(expr.span, + &entry.origin, + ident); } } } diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index 6226e83d046b3..0dd30af4b7193 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -154,7 +154,7 @@ pub enum Dest { Ignore, } -impl Dest { +pub impl Dest { fn to_str(&self, ccx: @CrateContext) -> ~str { match *self { SaveIn(v) => fmt!("SaveIn(%s)", val_str(ccx.tn, v)), diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 8431426fc1b5a..7105017cd88d2 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -3714,7 +3714,7 @@ pub enum DtorKind { TraitDtor(def_id) } -impl DtorKind { +pub impl DtorKind { pure fn is_not_present(&const self) -> bool { match *self { NoDtor => true, diff --git a/src/librustc/middle/typeck/infer/coercion.rs b/src/librustc/middle/typeck/infer/coercion.rs index 5d291fdde77b3..6ad58bc5d4f43 100644 --- a/src/librustc/middle/typeck/infer/coercion.rs +++ b/src/librustc/middle/typeck/infer/coercion.rs @@ -87,7 +87,7 @@ use syntax::ast; // function. pub enum Coerce = CombineFields; -impl Coerce { +pub impl Coerce { fn tys(&self, a: ty::t, b: ty::t) -> CoerceResult { debug!("Coerce.tys(%s => %s)", a.inf_str(self.infcx), diff --git a/src/librustc/middle/typeck/infer/mod.rs b/src/librustc/middle/typeck/infer/mod.rs index 8bb1f2f47e5e4..aff2d599a0ef1 100644 --- a/src/librustc/middle/typeck/infer/mod.rs +++ b/src/librustc/middle/typeck/infer/mod.rs @@ -551,7 +551,7 @@ struct Snapshot { region_vars_snapshot: uint, } -impl @mut InferCtxt { +pub impl @mut InferCtxt { fn combine_fields(&self, a_is_expected: bool, span: span) -> CombineFields { CombineFields {infcx: *self, @@ -643,7 +643,7 @@ fn next_simple_var<V:Copy,T:Copy>( return id; } -impl @mut InferCtxt { +pub impl @mut InferCtxt { fn next_ty_var_id(&self) -> TyVid { let id = self.ty_var_counter; self.ty_var_counter += 1; diff --git a/src/librustc/middle/typeck/infer/region_inference.rs b/src/librustc/middle/typeck/infer/region_inference.rs index ee59868665252..d016a6f790a60 100644 --- a/src/librustc/middle/typeck/infer/region_inference.rs +++ b/src/librustc/middle/typeck/infer/region_inference.rs @@ -1218,7 +1218,7 @@ fn TwoRegionsMap() -> TwoRegionsMap { return HashMap(); } -impl RegionVarBindings { +pub impl RegionVarBindings { fn infer_variable_values(&mut self) -> ~[GraphNodeValue] { let mut graph = self.construct_graph(); self.expansion(&mut graph); diff --git a/src/librustc/middle/typeck/infer/test.rs b/src/librustc/middle/typeck/infer/test.rs index 27355da4b9aee..9701e370ca8ce 100644 --- a/src/librustc/middle/typeck/infer/test.rs +++ b/src/librustc/middle/typeck/infer/test.rs @@ -79,7 +79,7 @@ fn setup_env(test_name: &str, source_string: &str) -> Env { err_messages: messages}; } -impl Env { +pub impl Env { fn create_region_hierarchy(&self, rh: &RH) { for rh.sub.each |child_rh| { self.create_region_hierarchy(child_rh); diff --git a/src/librustdoc/doc.rs b/src/librustdoc/doc.rs index 40617e13b8d5e..f7de1997d5373 100644 --- a/src/librustdoc/doc.rs +++ b/src/librustdoc/doc.rs @@ -174,7 +174,7 @@ pub struct IndexEntry { link: ~str } -impl Doc { +pub impl Doc { fn CrateDoc(&self) -> CrateDoc { option::get(vec::foldl(None, self.pages, |_m, page| { match copy *page { @@ -190,7 +190,7 @@ impl Doc { } /// Some helper methods on ModDoc, mostly for testing -impl ModDoc { +pub impl ModDoc { fn mods(&self) -> ~[ModDoc] { do vec::filter_mapped(self.items) |itemtag| { match copy *itemtag { diff --git a/src/librustdoc/sort_item_type_pass.rs b/src/librustdoc/sort_item_type_pass.rs index 646dc12d336e9..1a370947d6980 100644 --- a/src/librustdoc/sort_item_type_pass.rs +++ b/src/librustdoc/sort_item_type_pass.rs @@ -51,7 +51,7 @@ fn test() { fn ifn() { } \ enum ienum { ivar } \ trait itrait { fn a(); } \ - impl int { fn a() { } } \ + pub impl int { fn a() { } } \ type itype = int; \ struct istruct { f: () }"; do astsrv::from_str(source) |srv| { diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index f258e649122bd..1e2abbe028746 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -30,7 +30,7 @@ use core::util; /// As sync::condvar, a mechanism for unlock-and-descheduling and signalling. pub struct Condvar { is_mutex: bool, failed: &mut bool, cond: &sync::Condvar } -impl &Condvar { +pub impl &Condvar { /// Atomically exit the associated ARC and block until a signal is sent. #[inline(always)] fn wait() { self.wait_on(0) } @@ -158,7 +158,7 @@ impl<T:Owned> Clone for MutexARC<T> { } } -impl<T:Owned> &MutexARC<T> { +pub impl<T:Owned> &MutexARC<T> { /** * Access the underlying mutable data with mutual exclusion from other @@ -301,7 +301,7 @@ pub fn rw_arc_with_condvars<T:Const + Owned>( RWARC { x: unsafe { shared_mutable_state(data) }, cant_nest: () } } -impl<T:Const + Owned> RWARC<T> { +pub impl<T:Const + Owned> RWARC<T> { /// Duplicate a rwlock-protected ARC, as arc::clone. fn clone(&self) -> RWARC<T> { RWARC { x: unsafe { clone_shared_mutable_state(&self.x) }, @@ -310,7 +310,7 @@ impl<T:Const + Owned> RWARC<T> { } -impl<T:Const + Owned> &RWARC<T> { +pub impl<T:Const + Owned> &RWARC<T> { /** * Access the underlying data mutably. Locks the rwlock in write mode; * other readers and writers will block. @@ -445,7 +445,7 @@ pub enum RWWriteMode<T> = /// The "read permission" token used for RWARC.write_downgrade(). pub enum RWReadMode<T> = (&T, sync::RWlockReadMode); -impl<T:Const + Owned> &RWWriteMode<T> { +pub impl<T:Const + Owned> &RWWriteMode<T> { /// Access the pre-downgrade RWARC in write mode. fn write<U>(blk: fn(x: &mut T) -> U) -> U { match *self { @@ -475,7 +475,7 @@ impl<T:Const + Owned> &RWWriteMode<T> { } } -impl<T:Const + Owned> &RWReadMode<T> { +pub impl<T:Const + Owned> &RWReadMode<T> { /// Access the post-downgrade rwlock in read mode. fn read<U>(blk: fn(x: &T) -> U) -> U { match *self { diff --git a/src/libstd/arena.rs b/src/libstd/arena.rs index 177932aa072a1..a30ee94a42b0f 100644 --- a/src/libstd/arena.rs +++ b/src/libstd/arena.rs @@ -161,7 +161,7 @@ unsafe fn un_bitpack_tydesc_ptr(p: uint) -> (*TypeDesc, bool) { (reinterpret_cast(&(p & !1)), p & 1 == 1) } -impl &Arena { +pub impl &Arena { // Functions for the POD part of the arena fn alloc_pod_grow(n_bytes: uint, align: uint) -> *u8 { // Allocate a new chunk. diff --git a/src/libstd/bitv.rs b/src/libstd/bitv.rs index 30d7b825add4a..cf278b07c9d98 100644 --- a/src/libstd/bitv.rs +++ b/src/libstd/bitv.rs @@ -27,7 +27,7 @@ fn small_mask(nbits: uint) -> uint { (1 << nbits) - 1 } -impl SmallBitv { +pub impl SmallBitv { static fn new(bits: uint) -> SmallBitv { SmallBitv {bits: bits} } @@ -124,7 +124,7 @@ fn big_mask(nbits: uint, elem: uint) -> uint { } } -impl BigBitv { +pub impl BigBitv { static fn new(storage: ~[uint]) -> BigBitv { BigBitv {storage: storage} } @@ -256,7 +256,7 @@ priv impl Bitv { } -impl Bitv { +pub impl Bitv { static fn new(nbits: uint, init: bool) -> Bitv { let rep = if nbits <= uint::bits { Small(~SmallBitv::new(if init {!0} else {0})) @@ -591,7 +591,7 @@ pub struct BitvSet { priv bitv: BigBitv } -impl BitvSet { +pub impl BitvSet { /// Creates a new bit vector set with initially no contents static fn new() -> BitvSet { BitvSet{ size: 0, bitv: BigBitv::new(~[0]) } diff --git a/src/libstd/deque.rs b/src/libstd/deque.rs index 0ac76cefd6b36..4d8c60a6614bc 100644 --- a/src/libstd/deque.rs +++ b/src/libstd/deque.rs @@ -37,7 +37,7 @@ impl<T> Mutable for Deque<T> { } } -impl<T> Deque<T> { +pub impl<T> Deque<T> { static pure fn new() -> Deque<T> { Deque{nelts: 0, lo: 0, hi: 0, elts: vec::from_fn(initial_capacity, |_| None)} diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index 84df1785503dc..7d04f6760793e 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -279,7 +279,7 @@ pub mod reader { } } - impl Decoder { + pub impl Decoder { fn read_opaque<R>(&self, op: fn(Doc) -> R) -> R { do self.push_doc(self.next_doc(EsOpaque)) { op(copy self.parent) @@ -451,7 +451,7 @@ pub mod writer { } // FIXME (#2741): Provide a function to write the standard ebml header. - impl Encoder { + pub impl Encoder { fn start_tag(tag_id: uint) { debug!("Start tag %u", tag_id); @@ -571,7 +571,7 @@ pub mod writer { } } - impl Encoder { + pub impl Encoder { fn emit_opaque(&self, f: fn()) { do self.wr_tag(EsOpaque as uint) { f() diff --git a/src/libstd/future.rs b/src/libstd/future.rs index 7f48466ed0a87..b9c7c9f3a1386 100644 --- a/src/libstd/future.rs +++ b/src/libstd/future.rs @@ -49,14 +49,14 @@ priv enum FutureState<A> { } /// Methods on the `future` type -impl<A:Copy> Future<A> { +pub impl<A:Copy> Future<A> { fn get() -> A { //! Get the value of the future *(self.get_ref()) } } -impl<A> Future<A> { +pub impl<A> Future<A> { pure fn get_ref(&self) -> &self/A { /*! diff --git a/src/libstd/net_tcp.rs b/src/libstd/net_tcp.rs index 8835cdfb105eb..dcbf7e60d8956 100644 --- a/src/libstd/net_tcp.rs +++ b/src/libstd/net_tcp.rs @@ -820,7 +820,7 @@ pub fn socket_buf(sock: TcpSocket) -> TcpSocketBuf { } /// Convenience methods extending `net::tcp::tcp_socket` -impl TcpSocket { +pub impl TcpSocket { pub fn read_start() -> result::Result<@Port< result::Result<~[u8], TcpErrData>>, TcpErrData> { read_start(&self) diff --git a/src/libstd/oldmap.rs b/src/libstd/oldmap.rs index 53692cd3be570..1d21f749b32a6 100644 --- a/src/libstd/oldmap.rs +++ b/src/libstd/oldmap.rs @@ -134,7 +134,9 @@ pub mod chained { } self.chains = new_chains; } + } + pub impl<K:Eq + IterBytes + Hash,V> T<K, V> { pure fn each_entry(blk: fn(@Entry<K,V>) -> bool) { // n.b. we can't use vec::iter() here because self.chains // is stored in a mutable location. @@ -168,7 +170,7 @@ pub mod chained { } } - impl<K:Eq + IterBytes + Hash,V> T<K, V> { + pub impl<K:Eq + IterBytes + Hash,V> T<K, V> { pure fn contains_key(&self, k: &K) -> bool { let hash = k.hash_keyed(0,0) as uint; match self.search_tbl(k, hash) { @@ -252,7 +254,7 @@ pub mod chained { } } - impl<K:Eq + IterBytes + Hash + Copy,V:Copy> T<K, V> { + pub impl<K:Eq + IterBytes + Hash + Copy,V:Copy> T<K, V> { pure fn find(&self, k: &K) -> Option<V> { match self.search_tbl(k, k.hash_keyed(0,0) as uint) { NotFound => None, @@ -325,7 +327,7 @@ pub mod chained { } } - impl<K:Eq + IterBytes + Hash + Copy + ToStr,V:ToStr + Copy> T<K, V> { + pub impl<K:Eq + IterBytes + Hash + Copy + ToStr,V:ToStr + Copy> T<K, V> { fn to_writer(wr: io::Writer) { if self.count == 0u { wr.write_str(~"{}"); diff --git a/src/libstd/priority_queue.rs b/src/libstd/priority_queue.rs index f642bf52f659a..4b92bd7543a7d 100644 --- a/src/libstd/priority_queue.rs +++ b/src/libstd/priority_queue.rs @@ -48,7 +48,7 @@ impl<T:Ord> Mutable for PriorityQueue<T> { fn clear(&mut self) { self.data.truncate(0) } } -impl <T:Ord> PriorityQueue<T> { +pub impl <T:Ord> PriorityQueue<T> { /// Returns the greatest item in the queue - fails if empty pure fn top(&self) -> &self/T { &self.data[0] } diff --git a/src/libstd/sort.rs b/src/libstd/sort.rs index 75f38da5a19a1..43fab9df1631e 100644 --- a/src/libstd/sort.rs +++ b/src/libstd/sort.rs @@ -404,7 +404,7 @@ fn MergeState<T>() -> MergeState<T> { } } -impl<T:Copy + Ord> MergeState<T> { +pub impl<T:Copy + Ord> MergeState<T> { fn push_run(&self, run_base: uint, run_len: uint) { let tmp = RunState{base: run_base, len: run_len}; self.runs.push(tmp); diff --git a/src/libstd/sync.rs b/src/libstd/sync.rs index 1ff51e8bff030..22325e6a83c6d 100644 --- a/src/libstd/sync.rs +++ b/src/libstd/sync.rs @@ -100,7 +100,7 @@ fn new_sem_and_signal(count: int, num_condvars: uint) } #[doc(hidden)] -impl<Q:Owned> &Sem<Q> { +pub impl<Q:Owned> &Sem<Q> { fn acquire() { let mut waiter_nobe = None; unsafe { @@ -136,7 +136,7 @@ impl<Q:Owned> &Sem<Q> { } // FIXME(#3154) move both copies of this into Sem<Q>, and unify the 2 structs #[doc(hidden)] -impl &Sem<()> { +pub impl &Sem<()> { fn access<U>(blk: fn() -> U) -> U { let mut release = None; unsafe { @@ -149,7 +149,7 @@ impl &Sem<()> { } } #[doc(hidden)] -impl &Sem<~[Waitqueue]> { +pub impl &Sem<~[Waitqueue]> { fn access<U>(blk: fn() -> U) -> U { let mut release = None; unsafe { @@ -192,7 +192,7 @@ pub struct Condvar { priv sem: &Sem<~[Waitqueue]> } impl Drop for Condvar { fn finalize(&self) {} } -impl &Condvar { +pub impl &Condvar { /** * Atomically drop the associated lock, and block until a signal is sent. * @@ -344,7 +344,7 @@ fn check_cvar_bounds<U>(out_of_bounds: Option<uint>, id: uint, act: &str, } #[doc(hidden)] -impl &Sem<~[Waitqueue]> { +pub impl &Sem<~[Waitqueue]> { // The only other place that condvars get built is rwlock_write_mode. fn access_cond<U>(blk: fn(c: &Condvar) -> U) -> U { do self.access { blk(&Condvar { sem: self }) } @@ -370,7 +370,7 @@ impl Clone for Semaphore { } } -impl &Semaphore { +pub impl &Semaphore { /** * Acquire a resource represented by the semaphore. Blocks if necessary * until resource(s) become available. @@ -418,7 +418,7 @@ impl Clone for Mutex { fn clone(&self) -> Mutex { Mutex { sem: Sem((*self.sem).clone()) } } } -impl &Mutex { +pub impl &Mutex { /// Run a function with ownership of the mutex. fn lock<U>(blk: fn() -> U) -> U { (&self.sem).access(blk) } @@ -467,7 +467,7 @@ pub fn rwlock_with_condvars(num_condvars: uint) -> RWlock { read_count: 0 }) } } -impl &RWlock { +pub impl &RWlock { /// Create a new handle to the rwlock. fn clone() -> RWlock { RWlock { order_lock: (&(self.order_lock)).clone(), @@ -688,7 +688,7 @@ impl Drop for RWlockWriteMode { fn finalize(&self) {} } pub struct RWlockReadMode { priv lock: &RWlock } impl Drop for RWlockReadMode { fn finalize(&self) {} } -impl &RWlockWriteMode { +pub impl &RWlockWriteMode { /// Access the pre-downgrade rwlock in write mode. fn write<U>(blk: fn() -> U) -> U { blk() } /// Access the pre-downgrade rwlock in write mode with a condvar. @@ -696,7 +696,7 @@ impl &RWlockWriteMode { blk(&Condvar { sem: &self.lock.access_lock }) } } -impl &RWlockReadMode { +pub impl &RWlockReadMode { /// Access the post-downgrade rwlock in read mode. fn read<U>(blk: fn() -> U) -> U { blk() } } diff --git a/src/libstd/time.rs b/src/libstd/time.rs index c8379d3ef4444..15dea83815b2a 100644 --- a/src/libstd/time.rs +++ b/src/libstd/time.rs @@ -47,7 +47,7 @@ pub struct Timespec { sec: i64, nsec: i32 } * -1.2 seconds before the epoch is represented by `Timespec { sec: -2_i64, * nsec: 800_000_000_i32 }`. */ -impl Timespec { +pub impl Timespec { static pure fn new(sec: i64, nsec: i32) -> Timespec { assert nsec >= 0 && nsec < NSEC_PER_SEC; Timespec { sec: sec, nsec: nsec } @@ -208,7 +208,7 @@ pub pure fn strftime(format: &str, tm: &Tm) -> ~str { unsafe { do_strftime(format, tm) } } -impl Tm { +pub impl Tm { /// Convert time to the seconds from January 1, 1970 fn to_timespec() -> Timespec { unsafe { diff --git a/src/libstd/treemap.rs b/src/libstd/treemap.rs index 0e593ba42d129..cf863217deb1a 100644 --- a/src/libstd/treemap.rs +++ b/src/libstd/treemap.rs @@ -177,7 +177,7 @@ impl<K:Ord,V> Map<K, V> for TreeMap<K, V> { } } -impl <K:Ord,V> TreeMap<K, V> { +pub impl <K:Ord,V> TreeMap<K, V> { /// Create an empty TreeMap static pure fn new() -> TreeMap<K, V> { TreeMap{root: None, length: 0} } @@ -208,7 +208,7 @@ pub struct TreeMapIterator<K, V> { /// tuple with a reference to the key and value. If there are no /// more nodes, return `None`. fn map_next<K: Ord, V>(iter: &mut TreeMapIterator/&r<K, V>) - -> Option<(&r/K, &r/V)> { + -> Option<(&r/K, &r/V)> { while !iter.stack.is_empty() || iter.node.is_some() { match *iter.node { Some(ref x) => { @@ -480,7 +480,7 @@ impl<T:Ord> Set<T> for TreeSet<T> { } } -impl <T:Ord> TreeSet<T> { +pub impl <T:Ord> TreeSet<T> { /// Create an empty TreeSet static pure fn new() -> TreeSet<T> { TreeSet{map: TreeMap::new()} } @@ -518,7 +518,7 @@ struct TreeNode<K, V> { level: uint } -impl <K:Ord,V> TreeNode<K, V> { +pub impl <K:Ord,V> TreeNode<K, V> { #[inline(always)] static pure fn new(key: K, value: V) -> TreeNode<K, V> { TreeNode{key: key, value: value, left: None, right: None, level: 1} diff --git a/src/libstd/workcache.rs b/src/libstd/workcache.rs index c85aa78d9834a..592ac40e0824f 100644 --- a/src/libstd/workcache.rs +++ b/src/libstd/workcache.rs @@ -132,7 +132,7 @@ impl cmp::Ord for WorkKey { } } -impl WorkKey { +pub impl WorkKey { static fn new(kind: &str, name: &str) -> WorkKey { WorkKey { kind: kind.to_owned(), name: name.to_owned() } } @@ -168,7 +168,7 @@ struct Database { mut db_dirty: bool } -impl Database { +pub impl Database { fn prepare(&mut self, fn_name: &str, declared_inputs: &WorkMap) -> Option<(WorkMap, WorkMap, ~str)> { @@ -199,7 +199,7 @@ struct Logger { a: () } -impl Logger { +pub impl Logger { fn info(i: &str) { io::println(~"workcache: " + i.to_owned()); } @@ -254,7 +254,7 @@ fn digest_file(path: &Path) -> ~str { sha.result_str() } -impl Context { +pub impl Context { static fn new(db: @Mut<Database>, lg: @Mut<Logger>, @@ -356,7 +356,7 @@ impl TPrep for @Mut<Prep> { } } -impl<T:Owned + Encodable<json::Encoder> + Decodable<json::Decoder>> Work<T> { +pub impl<T:Owned+Encodable<json::Encoder>+Decodable<json::Decoder>> Work<T> { static fn new(p: @Mut<Prep>, e: Either<T,PortOne<(Exec,T)>>) -> Work<T> { Work { prep: p, res: Some(e) } } diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index f97244c477b7e..c6994125b2613 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -162,7 +162,7 @@ pub struct Generics { ty_params: OptVec<TyParam> } -impl Generics { +pub impl Generics { fn is_empty(&self) -> bool { self.lifetimes.len() + self.ty_params.len() == 0 } diff --git a/src/libsyntax/ext/deriving.rs b/src/libsyntax/ext/deriving.rs index 0164f807f4b5f..7820bb5e964fe 100644 --- a/src/libsyntax/ext/deriving.rs +++ b/src/libsyntax/ext/deriving.rs @@ -38,7 +38,7 @@ enum Junction { Disjunction, } -impl Junction { +pub impl Junction { fn to_binop(self) -> binop { match self { Conjunction => and, diff --git a/src/test/auxiliary/cci_class_5.rs b/src/test/auxiliary/cci_class_5.rs index e2564a552790c..c04cdbcab1adb 100644 --- a/src/test/auxiliary/cci_class_5.rs +++ b/src/test/auxiliary/cci_class_5.rs @@ -10,12 +10,12 @@ pub mod kitties { pub struct cat { - priv mut meows : uint, + priv meows : uint, how_hungry : int, } pub impl cat { - priv fn nap() { for uint::range(1, 10000u) |_i|{}} + priv fn nap(&self) { for uint::range(1, 10000u) |_i|{}} } pub fn cat(in_x : uint, in_y : int) -> cat { diff --git a/src/test/auxiliary/impl_privacy_xc_1.rs b/src/test/auxiliary/impl_privacy_xc_1.rs index 05d5cee47f2c8..92452cbe8fdc4 100644 --- a/src/test/auxiliary/impl_privacy_xc_1.rs +++ b/src/test/auxiliary/impl_privacy_xc_1.rs @@ -4,7 +4,7 @@ pub struct Fish { x: int } -impl Fish { +pub impl Fish { fn swim(&self) {} } diff --git a/src/test/auxiliary/issue_2472_b.rs b/src/test/auxiliary/issue_2472_b.rs index e1be3adcd4a02..e7a9295472554 100644 --- a/src/test/auxiliary/issue_2472_b.rs +++ b/src/test/auxiliary/issue_2472_b.rs @@ -11,7 +11,7 @@ enum S = (); -impl S { +pub impl S { fn foo() { } } diff --git a/src/test/bench/core-set.rs b/src/test/bench/core-set.rs index 2845596e78007..5e73b286530db 100644 --- a/src/test/bench/core-set.rs +++ b/src/test/bench/core-set.rs @@ -31,7 +31,7 @@ fn timed(result: &mut float, op: fn()) { *result = (end - start); } -impl Results { +pub impl Results { fn bench_int<T:Set<uint>>(&mut self, rng: @rand::Rng, num_keys: uint, rand_cap: uint, f: fn() -> T) { { diff --git a/src/test/bench/noise.rs b/src/test/bench/noise.rs index 39caba9273293..9825671bc8aea 100644 --- a/src/test/bench/noise.rs +++ b/src/test/bench/noise.rs @@ -40,7 +40,7 @@ fn Noise2DContext() -> ~Noise2DContext { } } -impl Noise2DContext { +pub impl Noise2DContext { #[inline(always)] fn get_gradient(&self, x: int, y: int) -> Vec2 { let idx = self.permutations[x & 255] + self.permutations[y & 255]; diff --git a/src/test/compile-fail/assign-to-method.rs b/src/test/compile-fail/assign-to-method.rs index 7d68d6d0c3864..0a2834a95e62e 100644 --- a/src/test/compile-fail/assign-to-method.rs +++ b/src/test/compile-fail/assign-to-method.rs @@ -14,7 +14,7 @@ struct cat { how_hungry : int, } -impl cat { +pub impl cat { fn speak() { self.meows += 1u; } } diff --git a/src/test/compile-fail/borrowck-autoref-3261.rs b/src/test/compile-fail/borrowck-autoref-3261.rs index b3ef5f4d481c6..068bb7cd7a61d 100644 --- a/src/test/compile-fail/borrowck-autoref-3261.rs +++ b/src/test/compile-fail/borrowck-autoref-3261.rs @@ -10,7 +10,7 @@ use core::either::*; enum X = Either<(uint,uint),extern fn()>; -impl &X { +pub impl &X { fn with(blk: fn(x: &Either<(uint,uint),extern fn()>)) { blk(&**self) } diff --git a/src/test/compile-fail/borrowck-call-method-from-mut-aliasable.rs b/src/test/compile-fail/borrowck-call-method-from-mut-aliasable.rs index 4e0cc76bf7543..2c68429baec92 100644 --- a/src/test/compile-fail/borrowck-call-method-from-mut-aliasable.rs +++ b/src/test/compile-fail/borrowck-call-method-from-mut-aliasable.rs @@ -12,7 +12,7 @@ struct Foo { x: int, } -impl Foo { +pub impl Foo { fn f(&self) {} fn g(&const self) {} fn h(&mut self) {} diff --git a/src/test/compile-fail/borrowck-insert-during-each.rs b/src/test/compile-fail/borrowck-insert-during-each.rs index e0fca586b6b7b..476a790b85ede 100644 --- a/src/test/compile-fail/borrowck-insert-during-each.rs +++ b/src/test/compile-fail/borrowck-insert-during-each.rs @@ -14,7 +14,7 @@ struct Foo { n: LinearSet<int>, } -impl Foo { +pub impl Foo { fn foo(&mut self, fun: fn(&int)) { for self.n.each |f| { fun(f); diff --git a/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs b/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs index e15edd8cf199c..61cf346ffa484 100644 --- a/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs +++ b/src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs @@ -19,7 +19,7 @@ impl ops::Add<int,int> for Point { } } -impl Point { +pub impl Point { fn times(z: int) -> int { self.x * self.y * z } diff --git a/src/test/compile-fail/class-cast-to-trait.rs b/src/test/compile-fail/class-cast-to-trait.rs index 671298040a90b..3169b0299a0bb 100644 --- a/src/test/compile-fail/class-cast-to-trait.rs +++ b/src/test/compile-fail/class-cast-to-trait.rs @@ -19,7 +19,7 @@ struct cat { name : ~str, } -impl cat { +pub impl cat { fn eat() -> bool { if self.how_hungry > 0 { diff --git a/src/test/compile-fail/issue-2356.rs b/src/test/compile-fail/issue-2356.rs index 30a9fadaeb08b..9a574b984ca47 100644 --- a/src/test/compile-fail/issue-2356.rs +++ b/src/test/compile-fail/issue-2356.rs @@ -14,6 +14,6 @@ struct cat { tail: int, } -impl cat { +pub impl cat { fn meow() { tail += 1; } //~ ERROR: Did you mean: `self.tail` } diff --git a/src/test/compile-fail/issue-2766-a.rs b/src/test/compile-fail/issue-2766-a.rs index 77a840e7e366d..8ec63ddc634c5 100644 --- a/src/test/compile-fail/issue-2766-a.rs +++ b/src/test/compile-fail/issue-2766-a.rs @@ -14,7 +14,7 @@ pub mod stream { use core::option; use core::pipes; - impl<T:Owned> Stream<T> { + pub impl<T:Owned> Stream<T> { pub fn recv() -> extern fn(+v: Stream<T>) -> ::stream::Stream<T> { // resolve really should report just one error here. // Change the test case when it changes. diff --git a/src/test/compile-fail/issue-3021-b.rs b/src/test/compile-fail/issue-3021-b.rs index 1d4cd69c54ee0..e6d16042445e8 100644 --- a/src/test/compile-fail/issue-3021-b.rs +++ b/src/test/compile-fail/issue-3021-b.rs @@ -16,7 +16,7 @@ fn siphash(k0 : u64) { v0: u64, } - impl siphash { + pub impl siphash { fn reset(&mut self) { self.v0 = k0 ^ 0x736f6d6570736575; //~ ERROR attempted dynamic environment-capture //~^ ERROR unresolved name: `k0`. diff --git a/src/test/compile-fail/issue-3080.rs b/src/test/compile-fail/issue-3080.rs index d7a214dc76bda..530dadd7e9094 100644 --- a/src/test/compile-fail/issue-3080.rs +++ b/src/test/compile-fail/issue-3080.rs @@ -10,7 +10,7 @@ // xfail-test enum x = (); -impl x { +pub impl x { unsafe fn with() { } // This should fail } diff --git a/src/test/compile-fail/issue-3311.rs b/src/test/compile-fail/issue-3311.rs index a09a87d9a6bf2..1207ddcb9a042 100644 --- a/src/test/compile-fail/issue-3311.rs +++ b/src/test/compile-fail/issue-3311.rs @@ -14,7 +14,7 @@ struct Foo { u: ~() } -impl Foo { +pub impl Foo { fn get_s(&self) -> &self/str { self.s } diff --git a/src/test/compile-fail/issue-3707.rs b/src/test/compile-fail/issue-3707.rs index c166c400b36de..040bd46ab8c8d 100644 --- a/src/test/compile-fail/issue-3707.rs +++ b/src/test/compile-fail/issue-3707.rs @@ -13,7 +13,7 @@ struct Obj { member: uint } -impl Obj { +pub impl Obj { static pure fn boom() -> bool { return 1+1 == 2 } diff --git a/src/test/compile-fail/issue-3763.rs b/src/test/compile-fail/issue-3763.rs index ea4b70c3c2908..09a3f3d89c46c 100644 --- a/src/test/compile-fail/issue-3763.rs +++ b/src/test/compile-fail/issue-3763.rs @@ -15,7 +15,7 @@ mod my_mod { pub fn MyStruct () -> MyStruct { MyStruct {priv_field: 4} } - impl MyStruct { + pub impl MyStruct { priv fn happyfun() {} } } diff --git a/src/test/compile-fail/mutable-class-fields-2.rs b/src/test/compile-fail/mutable-class-fields-2.rs index 04ba25fc07d64..3a63cdee20c83 100644 --- a/src/test/compile-fail/mutable-class-fields-2.rs +++ b/src/test/compile-fail/mutable-class-fields-2.rs @@ -15,7 +15,7 @@ struct cat { how_hungry : int, } -impl cat { +pub impl cat { fn eat() { self.how_hungry -= 5; } diff --git a/src/test/compile-fail/private-method-cross-crate.rs b/src/test/compile-fail/private-method-cross-crate.rs index 7897ccb23e6d5..7414dc5721621 100644 --- a/src/test/compile-fail/private-method-cross-crate.rs +++ b/src/test/compile-fail/private-method-cross-crate.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// error-pattern:attempted access of field `nap` on type -// xfail-test Cross-crate impl method privacy doesn't work // xfail-fast // aux-build:cci_class_5.rs extern mod cci_class_5; @@ -17,5 +15,5 @@ use cci_class_5::kitties::*; fn main() { let nyan : cat = cat(52, 99); - nyan.nap(); + nyan.nap(); //~ ERROR method `nap` is private } diff --git a/src/test/compile-fail/private-method-inherited.rs b/src/test/compile-fail/private-method-inherited.rs new file mode 100644 index 0000000000000..7b64623e16c3e --- /dev/null +++ b/src/test/compile-fail/private-method-inherited.rs @@ -0,0 +1,15 @@ +// Tests that inherited visibility applies to methods. + +mod a { + pub struct Foo; + + impl Foo { + fn f(self) {} + } +} + +fn main() { + let x = a::Foo; + x.f(); //~ ERROR method `f` is private +} + diff --git a/src/test/compile-fail/regions-addr-of-self.rs b/src/test/compile-fail/regions-addr-of-self.rs index c6c89a3ae04a7..96657edb5b1ad 100644 --- a/src/test/compile-fail/regions-addr-of-self.rs +++ b/src/test/compile-fail/regions-addr-of-self.rs @@ -12,7 +12,7 @@ struct dog { cats_chased: uint, } -impl dog { +pub impl dog { fn chase_cat(&mut self) { let p: &static/mut uint = &mut self.cats_chased; //~ ERROR cannot infer an appropriate lifetime due to conflicting requirements *p += 1u; diff --git a/src/test/compile-fail/regions-addr-of-upvar-self.rs b/src/test/compile-fail/regions-addr-of-upvar-self.rs index 8e98d4341a8b3..b9a9e2f38f5aa 100644 --- a/src/test/compile-fail/regions-addr-of-upvar-self.rs +++ b/src/test/compile-fail/regions-addr-of-upvar-self.rs @@ -12,7 +12,7 @@ struct dog { food: uint, } -impl dog { +pub impl dog { fn chase_cat(&mut self) { for uint::range(0u, 10u) |_i| { let p: &'static mut uint = &mut self.food; //~ ERROR cannot infer an appropriate lifetime due to conflicting requirements diff --git a/src/test/compile-fail/trait-or-new-type-instead.rs b/src/test/compile-fail/trait-or-new-type-instead.rs index 0634205140b5d..dc7c7cec65f3f 100644 --- a/src/test/compile-fail/trait-or-new-type-instead.rs +++ b/src/test/compile-fail/trait-or-new-type-instead.rs @@ -9,7 +9,7 @@ // except according to those terms. // error-pattern: implement a trait or new type instead -impl <T> Option<T> { +pub impl <T> Option<T> { fn foo() { } } diff --git a/src/test/compile-fail/use-after-move-self-based-on-type.rs b/src/test/compile-fail/use-after-move-self-based-on-type.rs index a06bc42d29aba..b0a2bc8ec1275 100644 --- a/src/test/compile-fail/use-after-move-self-based-on-type.rs +++ b/src/test/compile-fail/use-after-move-self-based-on-type.rs @@ -6,7 +6,7 @@ impl Drop for S { fn finalize(&self) {} } -impl S { +pub impl S { fn foo(self) -> int { self.bar(); return self.x; //~ ERROR use of moved value diff --git a/src/test/compile-fail/use-after-move-self.rs b/src/test/compile-fail/use-after-move-self.rs index 7ad41b518a131..3eded9fd4f39c 100644 --- a/src/test/compile-fail/use-after-move-self.rs +++ b/src/test/compile-fail/use-after-move-self.rs @@ -2,7 +2,7 @@ struct S { x: ~int } -impl S { +pub impl S { fn foo(self) -> int { self.bar(); return *self.x; //~ ERROR use of moved value diff --git a/src/test/run-pass/anon-trait-static-method.rs b/src/test/run-pass/anon-trait-static-method.rs index 4143c12cf670e..2ec0b59e13fee 100644 --- a/src/test/run-pass/anon-trait-static-method.rs +++ b/src/test/run-pass/anon-trait-static-method.rs @@ -12,7 +12,7 @@ struct Foo { x: int } -impl Foo { +pub impl Foo { static fn new() -> Foo { Foo { x: 3 } } diff --git a/src/test/run-pass/auto-ref-newtype.rs b/src/test/run-pass/auto-ref-newtype.rs index 80f20b13bddaf..1b4c22e80f3e6 100644 --- a/src/test/run-pass/auto-ref-newtype.rs +++ b/src/test/run-pass/auto-ref-newtype.rs @@ -13,7 +13,7 @@ enum Foo = uint; -impl Foo { +pub impl Foo { fn len(&self) -> uint { **self } } diff --git a/src/test/run-pass/autoderef-and-borrow-method-receiver.rs b/src/test/run-pass/autoderef-and-borrow-method-receiver.rs index 6e6d289e90fbd..883cffa792bfb 100644 --- a/src/test/run-pass/autoderef-and-borrow-method-receiver.rs +++ b/src/test/run-pass/autoderef-and-borrow-method-receiver.rs @@ -12,7 +12,7 @@ struct Foo { x: int, } -impl Foo { +pub impl Foo { fn f(&const self) {} } diff --git a/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-3.rs b/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-3.rs index 748672ef050fb..d8612155f6cd7 100644 --- a/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-3.rs +++ b/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-3.rs @@ -2,7 +2,7 @@ struct Wizard { spells: ~[&static/str] } -impl Wizard { +pub impl Wizard { fn cast(&mut self) { for self.spells.each |&spell| { io::println(spell); diff --git a/src/test/run-pass/class-cast-to-trait-multiple-types.rs b/src/test/run-pass/class-cast-to-trait-multiple-types.rs index f35a91c2b914f..7c5d5c4d126fc 100644 --- a/src/test/run-pass/class-cast-to-trait-multiple-types.rs +++ b/src/test/run-pass/class-cast-to-trait-multiple-types.rs @@ -18,7 +18,7 @@ struct dog { volume : @mut int, } -impl dog { +pub impl dog { priv fn bark() -> int { debug!("Woof %u %d", *self.barks, *self.volume); *self.barks += 1u; @@ -55,7 +55,7 @@ impl noisy for cat { fn speak() -> int { self.meow() as int } } -impl cat { +pub impl cat { fn meow_count() -> uint { *self.meows } } diff --git a/src/test/run-pass/class-cast-to-trait.rs b/src/test/run-pass/class-cast-to-trait.rs index 157ea586c2c4e..581361c154c48 100644 --- a/src/test/run-pass/class-cast-to-trait.rs +++ b/src/test/run-pass/class-cast-to-trait.rs @@ -22,7 +22,7 @@ impl noisy for cat { fn speak(&mut self) { self.meow(); } } -impl cat { +pub impl cat { fn eat(&mut self) -> bool { if self.how_hungry > 0 { error!("OM NOM NOM"); diff --git a/src/test/run-pass/class-impl-very-parameterized-trait.rs b/src/test/run-pass/class-impl-very-parameterized-trait.rs index 40f728d40bfe3..f71675c06be0a 100644 --- a/src/test/run-pass/class-impl-very-parameterized-trait.rs +++ b/src/test/run-pass/class-impl-very-parameterized-trait.rs @@ -34,7 +34,7 @@ struct cat<T> { name : T, } -impl<T> cat<T> { +pub impl<T> cat<T> { fn speak(&mut self) { self.meow(); } fn eat(&mut self) -> bool { @@ -103,7 +103,7 @@ impl<T> Map<int, T> for cat<T> { } } -impl<T> cat<T> { +pub impl<T> cat<T> { pure fn get(&self, k: &int) -> &self/T { match self.find(k) { Some(v) => { v } diff --git a/src/test/run-pass/class-implement-trait-cross-crate.rs b/src/test/run-pass/class-implement-trait-cross-crate.rs index aa7bb738bf54f..aa77dbb62c0a7 100644 --- a/src/test/run-pass/class-implement-trait-cross-crate.rs +++ b/src/test/run-pass/class-implement-trait-cross-crate.rs @@ -20,7 +20,7 @@ struct cat { name : ~str, } -impl cat { +pub impl cat { fn eat(&mut self) -> bool { if self.how_hungry > 0 { error!("OM NOM NOM"); diff --git a/src/test/run-pass/class-implement-traits.rs b/src/test/run-pass/class-implement-traits.rs index bdc8f7568a165..896b139110f26 100644 --- a/src/test/run-pass/class-implement-traits.rs +++ b/src/test/run-pass/class-implement-traits.rs @@ -32,7 +32,7 @@ priv impl cat { } } -impl cat { +pub impl cat { fn eat(&mut self) -> bool { if self.how_hungry > 0 { error!("OM NOM NOM"); diff --git a/src/test/run-pass/class-methods.rs b/src/test/run-pass/class-methods.rs index 1e41b60a8223e..f65bcf7be8e69 100644 --- a/src/test/run-pass/class-methods.rs +++ b/src/test/run-pass/class-methods.rs @@ -14,7 +14,7 @@ struct cat { how_hungry : int, } -impl cat { +pub impl cat { fn speak(&mut self) { self.meows += 1u; } fn meow_count(&mut self) -> uint { self.meows } } diff --git a/src/test/run-pass/class-poly-methods.rs b/src/test/run-pass/class-poly-methods.rs index e81d07a783b99..654260d839999 100644 --- a/src/test/run-pass/class-poly-methods.rs +++ b/src/test/run-pass/class-poly-methods.rs @@ -15,7 +15,7 @@ struct cat<U> { how_hungry : int, } -impl<U> cat<U> { +pub impl<U> cat<U> { fn speak<T>(&mut self, stuff: ~[T]) { self.meows += stuff.len(); } diff --git a/src/test/run-pass/class-separate-impl.rs b/src/test/run-pass/class-separate-impl.rs index 9c7d9ce7415a4..728deff8e2db4 100644 --- a/src/test/run-pass/class-separate-impl.rs +++ b/src/test/run-pass/class-separate-impl.rs @@ -18,7 +18,7 @@ struct cat { name : ~str, } -impl cat { +pub impl cat { fn speak(&mut self) { self.meow(); } fn eat(&mut self) -> bool { diff --git a/src/test/run-pass/class-typarams.rs b/src/test/run-pass/class-typarams.rs index cbc69719caa62..29354c54d8ba0 100644 --- a/src/test/run-pass/class-typarams.rs +++ b/src/test/run-pass/class-typarams.rs @@ -14,7 +14,7 @@ struct cat<U> { how_hungry : int, } -impl<U> cat<U> { +pub impl<U> cat<U> { fn speak(&mut self) { self.meows += 1u; } fn meow_count(&mut self) -> uint { self.meows } } diff --git a/src/test/run-pass/classes-simple-method.rs b/src/test/run-pass/classes-simple-method.rs index ac80ca9b9e930..505537af7a1bc 100644 --- a/src/test/run-pass/classes-simple-method.rs +++ b/src/test/run-pass/classes-simple-method.rs @@ -14,7 +14,7 @@ struct cat { how_hungry : int, } -impl cat { +pub impl cat { fn speak(&mut self) {} } diff --git a/src/test/run-pass/classes.rs b/src/test/run-pass/classes.rs index 552715dccb445..0d8d7fc37a915 100644 --- a/src/test/run-pass/classes.rs +++ b/src/test/run-pass/classes.rs @@ -15,7 +15,7 @@ struct cat { name : ~str, } -impl cat { +pub impl cat { fn speak(&mut self) { self.meow(); } fn eat(&mut self) -> bool { diff --git a/src/test/run-pass/coerce-reborrow-imm-ptr-rcvr.rs b/src/test/run-pass/coerce-reborrow-imm-ptr-rcvr.rs index 268e540c10e33..35f963d8fb991 100644 --- a/src/test/run-pass/coerce-reborrow-imm-ptr-rcvr.rs +++ b/src/test/run-pass/coerce-reborrow-imm-ptr-rcvr.rs @@ -2,7 +2,7 @@ struct SpeechMaker { speeches: uint } -impl SpeechMaker { +pub impl SpeechMaker { pure fn how_many(&self) -> uint { self.speeches } } diff --git a/src/test/run-pass/coerce-reborrow-mut-ptr-rcvr.rs b/src/test/run-pass/coerce-reborrow-mut-ptr-rcvr.rs index a2ba4ddb827ba..fd47c262d6a7d 100644 --- a/src/test/run-pass/coerce-reborrow-mut-ptr-rcvr.rs +++ b/src/test/run-pass/coerce-reborrow-mut-ptr-rcvr.rs @@ -2,7 +2,7 @@ struct SpeechMaker { speeches: uint } -impl SpeechMaker { +pub impl SpeechMaker { fn talk(&mut self) { self.speeches += 1; } diff --git a/src/test/run-pass/const-enum-byref-self.rs b/src/test/run-pass/const-enum-byref-self.rs index 19311cb17325a..57cfdd2f9d470 100644 --- a/src/test/run-pass/const-enum-byref-self.rs +++ b/src/test/run-pass/const-enum-byref-self.rs @@ -11,7 +11,7 @@ enum E { V, VV(int) } const C: E = V; -impl E { +pub impl E { fn method(&self) { match *self { V => {} diff --git a/src/test/run-pass/explicit-self-closures.rs b/src/test/run-pass/explicit-self-closures.rs index d40b2f72ae8ba..e019140d1a015 100644 --- a/src/test/run-pass/explicit-self-closures.rs +++ b/src/test/run-pass/explicit-self-closures.rs @@ -14,7 +14,7 @@ struct Box { x: uint } -impl Box { +pub impl Box { fn set_many(&mut self, xs: &[uint]) { for xs.each |x| { self.x = *x; } } diff --git a/src/test/run-pass/explicit-self-generic.rs b/src/test/run-pass/explicit-self-generic.rs index d03893367b4c5..5df155e4ad3fc 100644 --- a/src/test/run-pass/explicit-self-generic.rs +++ b/src/test/run-pass/explicit-self-generic.rs @@ -30,7 +30,7 @@ fn linear_map<K,V>() -> LinearMap<K,V> { size: 0}) } -impl<K,V> LinearMap<K,V> { +pub impl<K,V> LinearMap<K,V> { fn len(&mut self) -> uint { self.size } diff --git a/src/test/run-pass/explicit-self.rs b/src/test/run-pass/explicit-self.rs index 26e2023e89c50..885eb9837a710 100644 --- a/src/test/run-pass/explicit-self.rs +++ b/src/test/run-pass/explicit-self.rs @@ -26,7 +26,7 @@ fn compute_area(shape: &shape) -> float { } } -impl shape { +pub impl shape { // self is in the implicit self region fn select<T>(&self, threshold: float, a: &r/T, b: &r/T) -> &r/T { @@ -54,7 +54,7 @@ fn thing(x: A) -> thing { } } -impl thing { +pub impl thing { fn foo(@self) -> int { *self.x.a } fn bar(~self) -> int { *self.x.a } fn quux(&self) -> int { *self.x.a } diff --git a/src/test/run-pass/impl-implicit-trait.rs b/src/test/run-pass/impl-implicit-trait.rs index 511529bbc8f78..88e220670ba2c 100644 --- a/src/test/run-pass/impl-implicit-trait.rs +++ b/src/test/run-pass/impl-implicit-trait.rs @@ -13,7 +13,7 @@ enum option_<T> { some_(T), } -impl<T> option_<T> { +pub impl<T> option_<T> { fn foo() -> bool { true } } @@ -22,7 +22,7 @@ enum option__ { some__(int) } -impl option__ { +pub impl option__ { fn foo() -> bool { true } } diff --git a/src/test/run-pass/issue-2311-2.rs b/src/test/run-pass/issue-2311-2.rs index b4141b47b4d67..f60db84eb865f 100644 --- a/src/test/run-pass/issue-2311-2.rs +++ b/src/test/run-pass/issue-2311-2.rs @@ -13,7 +13,7 @@ struct foo<A> { x: A, } -impl<A:Copy> foo<A> { +pub impl<A:Copy> foo<A> { fn bar<B,C:clam<A>>(c: C) -> B { fail!(); } diff --git a/src/test/run-pass/issue-2312.rs b/src/test/run-pass/issue-2312.rs index 12e9157ba2473..9e45a6b53c2b6 100644 --- a/src/test/run-pass/issue-2312.rs +++ b/src/test/run-pass/issue-2312.rs @@ -14,7 +14,7 @@ trait clam<A> { } enum foo = int; -impl foo { +pub impl foo { fn bar<B,C:clam<B>>(c: C) -> B { fail!(); } } diff --git a/src/test/run-pass/issue-2445-b.rs b/src/test/run-pass/issue-2445-b.rs index 9869b8d330bf1..73bf97ad7af8d 100644 --- a/src/test/run-pass/issue-2445-b.rs +++ b/src/test/run-pass/issue-2445-b.rs @@ -12,7 +12,7 @@ struct c1<T> { x: T, } -impl<T:Copy> c1<T> { +pub impl<T:Copy> c1<T> { fn f1(x: int) { } } @@ -23,7 +23,7 @@ fn c1<T:Copy>(x: T) -> c1<T> { } } -impl<T:Copy> c1<T> { +pub impl<T:Copy> c1<T> { fn f2(x: int) { } } diff --git a/src/test/run-pass/issue-2445.rs b/src/test/run-pass/issue-2445.rs index 4a085a1eb8a97..973b8d851611c 100644 --- a/src/test/run-pass/issue-2445.rs +++ b/src/test/run-pass/issue-2445.rs @@ -12,7 +12,7 @@ struct c1<T> { x: T, } -impl<T:Copy> c1<T> { +pub impl<T:Copy> c1<T> { fn f1(x: T) {} } @@ -22,7 +22,7 @@ fn c1<T:Copy>(x: T) -> c1<T> { } } -impl<T:Copy> c1<T> { +pub impl<T:Copy> c1<T> { fn f2(x: T) {} } diff --git a/src/test/run-pass/issue-2487-a.rs b/src/test/run-pass/issue-2487-a.rs index 198a8c900d77b..33023db5323fc 100644 --- a/src/test/run-pass/issue-2487-a.rs +++ b/src/test/run-pass/issue-2487-a.rs @@ -17,7 +17,7 @@ impl Drop for socket { fn finalize(&self) {} } -impl socket { +pub impl socket { fn set_identity() { do closure { diff --git a/src/test/run-pass/issue-2502.rs b/src/test/run-pass/issue-2502.rs index 7696ec3721729..57e5aa39864c0 100644 --- a/src/test/run-pass/issue-2502.rs +++ b/src/test/run-pass/issue-2502.rs @@ -12,7 +12,7 @@ struct font { fontbuf: &self/~[u8], } -impl font { +pub impl font { fn buf() -> &self/~[u8] { self.fontbuf } diff --git a/src/test/run-pass/issue-3220.rs b/src/test/run-pass/issue-3220.rs index ef65531e5546f..9ecc46c17ac34 100644 --- a/src/test/run-pass/issue-3220.rs +++ b/src/test/run-pass/issue-3220.rs @@ -19,7 +19,7 @@ fn thing() -> thing { x: 0 } } -impl thing { fn f(self) {} } +pub impl thing { fn f(self) {} } pub fn main() { let z = thing(); diff --git a/src/test/run-pass/issue-3447.rs b/src/test/run-pass/issue-3447.rs index 0d1b0b9d0029e..2f7cb998e1ae6 100644 --- a/src/test/run-pass/issue-3447.rs +++ b/src/test/run-pass/issue-3447.rs @@ -13,7 +13,7 @@ struct list<T> { next: Option<@mut list<T>> } -impl<T> list<T>{ +pub impl<T> list<T>{ fn addEnd(&mut self, element: &self/T) { let newList = list { element: element, diff --git a/src/test/run-pass/issue-3860.rs b/src/test/run-pass/issue-3860.rs index fdc50220014f3..b113e902963b5 100644 --- a/src/test/run-pass/issue-3860.rs +++ b/src/test/run-pass/issue-3860.rs @@ -10,7 +10,7 @@ struct Foo { x: int } -impl Foo { +pub impl Foo { fn stuff(&mut self) -> &self/mut Foo { return self; } diff --git a/src/test/run-pass/issue-3904.rs b/src/test/run-pass/issue-3904.rs index 8f2b13b6eb028..1a09a8b860f84 100644 --- a/src/test/run-pass/issue-3904.rs +++ b/src/test/run-pass/issue-3904.rs @@ -23,7 +23,7 @@ struct X { err: ErrPrinter } -impl X { +pub impl X { fn boom() { exit(self.err, "prog", "arg"); } diff --git a/src/test/run-pass/max-min-classes.rs b/src/test/run-pass/max-min-classes.rs index 762b89f5101cd..56c16d928741d 100644 --- a/src/test/run-pass/max-min-classes.rs +++ b/src/test/run-pass/max-min-classes.rs @@ -17,7 +17,7 @@ struct Foo { y: int, } -impl Foo { +pub impl Foo { fn sum() -> int { self.x + self.y } diff --git a/src/test/run-pass/move-self.rs b/src/test/run-pass/move-self.rs index 37ce1bce9e659..d84646957283a 100644 --- a/src/test/run-pass/move-self.rs +++ b/src/test/run-pass/move-self.rs @@ -2,7 +2,7 @@ struct S { x: ~str } -impl S { +pub impl S { fn foo(self) { self.bar(); } diff --git a/src/test/run-pass/nested-class.rs b/src/test/run-pass/nested-class.rs index 149e346bb477b..2f2930dbab7c7 100644 --- a/src/test/run-pass/nested-class.rs +++ b/src/test/run-pass/nested-class.rs @@ -14,7 +14,7 @@ pub fn main() { i: int, } - impl b { + pub impl b { fn do_stuff() -> int { return 37; } } diff --git a/src/test/run-pass/operator-overloading-explicit-self.rs b/src/test/run-pass/operator-overloading-explicit-self.rs index 5a3ed4c608274..b56f7fa961e2d 100644 --- a/src/test/run-pass/operator-overloading-explicit-self.rs +++ b/src/test/run-pass/operator-overloading-explicit-self.rs @@ -12,7 +12,7 @@ struct S { x: int } -impl S { +pub impl S { pure fn add(&self, other: &S) -> S { S { x: self.x + other.x } } diff --git a/src/test/run-pass/private-class-field.rs b/src/test/run-pass/private-class-field.rs index 9cb86ffe83707..0abb758bd7e8e 100644 --- a/src/test/run-pass/private-class-field.rs +++ b/src/test/run-pass/private-class-field.rs @@ -14,7 +14,7 @@ struct cat { how_hungry : int, } -impl cat { +pub impl cat { fn meow_count(&mut self) -> uint { self.meows } } diff --git a/src/test/run-pass/private-method.rs b/src/test/run-pass/private-method.rs index 432c189ae423c..1fab77cb5c867 100644 --- a/src/test/run-pass/private-method.rs +++ b/src/test/run-pass/private-method.rs @@ -14,7 +14,7 @@ struct cat { how_hungry : int, } -impl cat { +pub impl cat { fn play(&mut self) { self.meows += 1u; self.nap(); diff --git a/src/test/run-pass/reflect-visit-data.rs b/src/test/run-pass/reflect-visit-data.rs index 27afde631b2ab..98e42bd7b4df8 100644 --- a/src/test/run-pass/reflect-visit-data.rs +++ b/src/test/run-pass/reflect-visit-data.rs @@ -30,7 +30,7 @@ fn align(size: uint, align: uint) -> uint { enum ptr_visit_adaptor<V> = Inner<V>; -impl<V:TyVisitor + movable_ptr> ptr_visit_adaptor<V> { +pub impl<V:TyVisitor + movable_ptr> ptr_visit_adaptor<V> { #[inline(always)] fn bump(sz: uint) { @@ -478,7 +478,7 @@ struct Stuff { vals: ~[~str] } -impl my_visitor { +pub impl my_visitor { fn get<T>(f: fn(T)) { unsafe { f(*(self.ptr1 as *T)); diff --git a/src/test/run-pass/resource-destruct.rs b/src/test/run-pass/resource-destruct.rs index 3dc4ca7bd61dc..2b00aea2b4cef 100644 --- a/src/test/run-pass/resource-destruct.rs +++ b/src/test/run-pass/resource-destruct.rs @@ -18,7 +18,7 @@ impl Drop for shrinky_pointer { } } -impl shrinky_pointer { +pub impl shrinky_pointer { fn look_at() -> int { return **(self.i); } }