Skip to content

Commit dd2a1e3

Browse files
committed
Change extensions traits to blanket impls
1 parent c48a1ab commit dd2a1e3

File tree

5 files changed

+27
-25
lines changed

5 files changed

+27
-25
lines changed

src/librustc/middle/typeck/check/method.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -619,14 +619,15 @@ impl<'a, 'tcx> LookupContext<'a, 'tcx> {
619619

620620
let tcx = self.tcx();
621621

622-
// It is illegal to invoke a method on a trait instance that
623-
// refers to the `Self` type. An error will be reported by
624-
// `enforce_object_limitations()` if the method refers to the
625-
// `Self` type anywhere other than the receiver. Here, we use
626-
// a substitution that replaces `Self` with the object type
627-
// itself. Hence, a `&self` method will wind up with an
628-
// argument type like `&Trait`.
629-
let rcvr_substs = substs.with_self_ty(self_ty);
622+
// It is illegal to create a trait object with methods which includes
623+
// the Self type. An error will be reported when we coerce to a trait
624+
// object if the method refers to the `Self` type. Substituting ty_err
625+
// here allows compiler to soldier on.
626+
//
627+
// `confirm_candidate()` also relies upon this substitution
628+
// for Self. (fix)
629+
let rcvr_substs = substs.with_self_ty(ty::mk_err());
630+
630631
let trait_ref = Rc::new(TraitRef {
631632
def_id: did,
632633
substs: rcvr_substs.clone()

src/libstd/io/buffered.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
1515
use cmp;
1616
use collections::Collection;
17-
use io::{Reader, Writer, Stream, Buffer, DEFAULT_BUF_SIZE, IoResult, AsRefReader};
17+
use io::{Reader, Writer, Stream, Buffer, DEFAULT_BUF_SIZE, IoResult};
1818
use iter::ExactSize;
1919
use ops::Drop;
2020
use option::{Some, None, Option};
@@ -118,8 +118,6 @@ impl<R: Reader> Reader for BufferedReader<R> {
118118
}
119119
}
120120

121-
impl<R: Reader> AsRefReader for BufferedReader<R> {}
122-
123121
/// Wraps a Writer and buffers output to it
124122
///
125123
/// It can be excessively inefficient to work directly with a `Writer`. For

src/libstd/io/extensions.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,6 @@ mod test {
189189
}
190190
}
191191
}
192-
impl BytesReader for InitialZeroByteReader {}
193192

194193
struct EofReader;
195194

@@ -198,7 +197,6 @@ mod test {
198197
Err(io::standard_error(io::EndOfFile))
199198
}
200199
}
201-
impl BytesReader for EofReader {}
202200

203201
struct ErroringReader;
204202

@@ -207,7 +205,6 @@ mod test {
207205
Err(io::standard_error(io::InvalidInput))
208206
}
209207
}
210-
impl BytesReader for ErroringReader {}
211208

212209
struct PartialReader {
213210
count: int,

src/libstd/io/mem.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use collections::Collection;
1717
use option::None;
1818
use result::{Err, Ok};
1919
use io;
20-
use io::{Reader, Writer, Seek, Buffer, IoError, SeekStyle, IoResult, AsRefReader, AsRefWriter};
20+
use io::{Reader, Writer, Seek, Buffer, IoError, SeekStyle, IoResult};
2121
use slice;
2222
use slice::AsSlice;
2323
use vec::Vec;
@@ -97,8 +97,6 @@ impl Writer for MemWriter {
9797
}
9898
}
9999

100-
impl AsRefWriter for MemWriter {}
101-
102100
/// Reads from an owned byte vector
103101
///
104102
/// # Example
@@ -165,8 +163,6 @@ impl Reader for MemReader {
165163
}
166164
}
167165

168-
impl AsRefReader for MemReader {}
169-
170166
impl Seek for MemReader {
171167
#[inline]
172168
fn tell(&self) -> IoResult<u64> { Ok(self.pos as u64) }
@@ -313,8 +309,6 @@ impl<'a> Reader for BufReader<'a> {
313309
}
314310
}
315311

316-
impl<'a> AsRefReader for BufReader<'a> {}
317-
318312
impl<'a> Seek for BufReader<'a> {
319313
#[inline]
320314
fn tell(&self) -> IoResult<u64> { Ok(self.pos as u64) }

src/libstd/io/mod.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -929,21 +929,29 @@ pub trait AsRefReader {
929929
///
930930
/// This is useful to allow applying adaptors while still
931931
/// retaining ownership of the original value.
932-
fn by_ref<'a>(&'a mut self) -> RefReader<'a, Self> {
932+
fn by_ref<'a>(&'a mut self) -> RefReader<'a, Self>;
933+
}
934+
935+
impl<T: Reader> AsRefReader for T {
936+
fn by_ref<'a>(&'a mut self) -> RefReader<'a, T> {
933937
RefReader { inner: self }
934938
}
935939
}
936940

937941
/// A reader which can be converted to bytes.
938-
pub trait BytesReader: Reader {
942+
pub trait BytesReader {
939943
/// Create an iterator that reads a single byte on
940944
/// each iteration, until EOF.
941945
///
942946
/// # Error
943947
///
944948
/// Any error other than `EndOfFile` that is produced by the underlying Reader
945949
/// is returned by the iterator and should be handled by the caller.
946-
fn bytes<'r>(&'r mut self) -> extensions::Bytes<'r, Self> {
950+
fn bytes<'r>(&'r mut self) -> extensions::Bytes<'r, Self>;
951+
}
952+
953+
impl<T: Reader> BytesReader for T {
954+
fn bytes<'r>(&'r mut self) -> extensions::Bytes<'r, T> {
947955
extensions::Bytes::new(self)
948956
}
949957
}
@@ -1284,7 +1292,11 @@ pub trait AsRefWriter {
12841292
/// This is useful to allow applying wrappers while still
12851293
/// retaining ownership of the original value.
12861294
#[inline]
1287-
fn by_ref<'a>(&'a mut self) -> RefWriter<'a, Self> {
1295+
fn by_ref<'a>(&'a mut self) -> RefWriter<'a, Self>;
1296+
}
1297+
1298+
impl<T: Writer> AsRefWriter for T {
1299+
fn by_ref<'a>(&'a mut self) -> RefWriter<'a, T> {
12881300
RefWriter { inner: self }
12891301
}
12901302
}

0 commit comments

Comments
 (0)