auto merge of #10897 : boredomist/rust/remove-self-lifetime, r=brson

Also remove all instances of 'self within the codebase.

This fixes #10889.

To make reviewing easier the following files were modified with more than a dumb text replacement:

- `src/test/compile-fail/lifetime-no-keyword.rs`
- `src/test/compile-fail/lifetime-obsoleted-self.rs`
- `src/test/compile-fail/regions-free-region-ordering-incorrect.rs`
- `src/libsyntax/parse/lexer.rs`
This commit is contained in:
bors 2013-12-11 12:56:22 -08:00
commit 1b12dca7f9
187 changed files with 1290 additions and 1277 deletions

View File

@ -1239,9 +1239,9 @@ static BIT2: uint = 1 << 1;
static BITS: [uint, ..2] = [BIT1, BIT2];
static STRING: &'static str = "bitstring";
struct BitsNStrings<'self> {
struct BitsNStrings<'a> {
mybits: [uint, ..2],
mystring: &'self str
mystring: &'a str
}
static bits_n_strings: BitsNStrings<'static> = BitsNStrings {
@ -2281,7 +2281,7 @@ The following are examples of structure expressions:
~~~~
# struct Point { x: f64, y: f64 }
# struct TuplePoint(f64, f64);
# mod game { pub struct User<'self> { name: &'self str, age: uint, score: uint } }
# mod game { pub struct User<'a> { name: &'a str, age: uint, score: uint } }
# struct Cookie; fn some_fn<T>(t: T) {}
Point {x: 10.0, y: 20.0};
TuplePoint(10.0, 20.0);
@ -3055,7 +3055,7 @@ order specified by the tuple type.
An example of a tuple type and its use:
~~~~
type Pair<'self> = (int,&'self str);
type Pair<'a> = (int,&'a str);
let p: Pair<'static> = (10,"hello");
let (a, b) = p;
assert!(b != "world");
@ -3220,7 +3220,7 @@ fn add(x: int, y: int) -> int {
let mut x = add(5,7);
type Binop<'self> = 'self |int,int| -> int;
type Binop<'a> = 'a |int,int| -> int;
let bo: Binop = add;
x = bo(5,7);
~~~~

View File

@ -49,13 +49,13 @@ use std::task;
use std::borrow;
/// As sync::condvar, a mechanism for unlock-and-descheduling and signaling.
pub struct Condvar<'self> {
pub struct Condvar<'a> {
priv is_mutex: bool,
priv failed: &'self mut bool,
priv cond: &'self sync::Condvar<'self>
priv failed: &'a mut bool,
priv cond: &'a sync::Condvar<'a>
}
impl<'self> Condvar<'self> {
impl<'a> Condvar<'a> {
/// Atomically exit the associated Arc and block until a signal is sent.
#[inline]
pub fn wait(&self) { self.wait_on(0) }
@ -523,19 +523,19 @@ fn borrow_rwlock<T:Freeze + Send>(state: *mut RWArcInner<T>) -> *RWLock {
}
/// The "write permission" token used for RWArc.write_downgrade().
pub struct RWWriteMode<'self, T> {
priv data: &'self mut T,
priv token: sync::RWLockWriteMode<'self>,
pub struct RWWriteMode<'a, T> {
priv data: &'a mut T,
priv token: sync::RWLockWriteMode<'a>,
priv poison: PoisonOnFail,
}
/// The "read permission" token used for RWArc.write_downgrade().
pub struct RWReadMode<'self, T> {
priv data: &'self T,
priv token: sync::RWLockReadMode<'self>,
pub struct RWReadMode<'a, T> {
priv data: &'a T,
priv token: sync::RWLockReadMode<'a>,
}
impl<'self, T:Freeze + Send> RWWriteMode<'self, T> {
impl<'a, T:Freeze + Send> RWWriteMode<'a, T> {
/// Access the pre-downgrade RWArc in write mode.
pub fn write<U>(&mut self, blk: |x: &mut T| -> U) -> U {
match *self {
@ -574,7 +574,7 @@ impl<'self, T:Freeze + Send> RWWriteMode<'self, T> {
}
}
impl<'self, T:Freeze + Send> RWReadMode<'self, T> {
impl<'a, T:Freeze + Send> RWReadMode<'a, T> {
/// Access the post-downgrade rwlock in read mode.
pub fn read<U>(&self, blk: |x: &T| -> U) -> U {
match *self {

View File

@ -56,7 +56,7 @@ pub trait ToBase64 {
fn to_base64(&self, config: Config) -> ~str;
}
impl<'self> ToBase64 for &'self [u8] {
impl<'a> ToBase64 for &'a [u8] {
/**
* Turn a vector of `u8` bytes into a base64 string.
*
@ -157,7 +157,7 @@ pub trait FromBase64 {
fn from_base64(&self) -> Result<~[u8], ~str>;
}
impl<'self> FromBase64 for &'self str {
impl<'a> FromBase64 for &'a str {
/**
* Convert any base64 encoded string (literal, `@`, `&`, or `~`)
* to the byte values it encodes.

View File

@ -578,13 +578,13 @@ fn iterate_bits(base: uint, bits: uint, f: |uint| -> bool) -> bool {
}
/// An iterator for `Bitv`.
pub struct BitvIterator<'self> {
priv bitv: &'self Bitv,
pub struct BitvIterator<'a> {
priv bitv: &'a Bitv,
priv next_idx: uint,
priv end_idx: uint,
}
impl<'self> Iterator<bool> for BitvIterator<'self> {
impl<'a> Iterator<bool> for BitvIterator<'a> {
#[inline]
fn next(&mut self) -> Option<bool> {
if self.next_idx != self.end_idx {
@ -602,7 +602,7 @@ impl<'self> Iterator<bool> for BitvIterator<'self> {
}
}
impl<'self> DoubleEndedIterator<bool> for BitvIterator<'self> {
impl<'a> DoubleEndedIterator<bool> for BitvIterator<'a> {
#[inline]
fn next_back(&mut self) -> Option<bool> {
if self.next_idx != self.end_idx {
@ -614,9 +614,9 @@ impl<'self> DoubleEndedIterator<bool> for BitvIterator<'self> {
}
}
impl<'self> ExactSize<bool> for BitvIterator<'self> {}
impl<'a> ExactSize<bool> for BitvIterator<'a> {}
impl<'self> RandomAccessIterator<bool> for BitvIterator<'self> {
impl<'a> RandomAccessIterator<bool> for BitvIterator<'a> {
#[inline]
fn indexable(&self) -> uint {
self.end_idx - self.next_idx
@ -903,12 +903,12 @@ impl BitvSet {
}
}
pub struct BitvSetIterator<'self> {
priv set: &'self BitvSet,
pub struct BitvSetIterator<'a> {
priv set: &'a BitvSet,
priv next_idx: uint
}
impl<'self> Iterator<uint> for BitvSetIterator<'self> {
impl<'a> Iterator<uint> for BitvSetIterator<'a> {
#[inline]
fn next(&mut self) -> Option<uint> {
while self.next_idx < self.set.capacity() {

View File

@ -48,15 +48,15 @@ struct Node<T> {
/// Double-ended DList iterator
#[deriving(Clone)]
pub struct DListIterator<'self, T> {
priv head: &'self Link<T>,
pub struct DListIterator<'a, T> {
priv head: &'a Link<T>,
priv tail: Rawlink<Node<T>>,
priv nelem: uint,
}
/// Double-ended mutable DList iterator
pub struct MutDListIterator<'self, T> {
priv list: &'self mut DList<T>,
pub struct MutDListIterator<'a, T> {
priv list: &'a mut DList<T>,
priv head: Rawlink<Node<T>>,
priv tail: Rawlink<Node<T>>,
priv nelem: uint,
@ -439,9 +439,9 @@ impl<T> Drop for DList<T> {
}
impl<'self, A> Iterator<&'self A> for DListIterator<'self, A> {
impl<'a, A> Iterator<&'a A> for DListIterator<'a, A> {
#[inline]
fn next(&mut self) -> Option<&'self A> {
fn next(&mut self) -> Option<&'a A> {
if self.nelem == 0 {
return None;
}
@ -458,9 +458,9 @@ impl<'self, A> Iterator<&'self A> for DListIterator<'self, A> {
}
}
impl<'self, A> DoubleEndedIterator<&'self A> for DListIterator<'self, A> {
impl<'a, A> DoubleEndedIterator<&'a A> for DListIterator<'a, A> {
#[inline]
fn next_back(&mut self) -> Option<&'self A> {
fn next_back(&mut self) -> Option<&'a A> {
if self.nelem == 0 {
return None;
}
@ -473,11 +473,11 @@ impl<'self, A> DoubleEndedIterator<&'self A> for DListIterator<'self, A> {
}
}
impl<'self, A> ExactSize<&'self A> for DListIterator<'self, A> {}
impl<'a, A> ExactSize<&'a A> for DListIterator<'a, A> {}
impl<'self, A> Iterator<&'self mut A> for MutDListIterator<'self, A> {
impl<'a, A> Iterator<&'a mut A> for MutDListIterator<'a, A> {
#[inline]
fn next(&mut self) -> Option<&'self mut A> {
fn next(&mut self) -> Option<&'a mut A> {
if self.nelem == 0 {
return None;
}
@ -497,9 +497,9 @@ impl<'self, A> Iterator<&'self mut A> for MutDListIterator<'self, A> {
}
}
impl<'self, A> DoubleEndedIterator<&'self mut A> for MutDListIterator<'self, A> {
impl<'a, A> DoubleEndedIterator<&'a mut A> for MutDListIterator<'a, A> {
#[inline]
fn next_back(&mut self) -> Option<&'self mut A> {
fn next_back(&mut self) -> Option<&'a mut A> {
if self.nelem == 0 {
return None;
}
@ -511,7 +511,7 @@ impl<'self, A> DoubleEndedIterator<&'self mut A> for MutDListIterator<'self, A>
}
}
impl<'self, A> ExactSize<&'self mut A> for MutDListIterator<'self, A> {}
impl<'a, A> ExactSize<&'a mut A> for MutDListIterator<'a, A> {}
/// Allow mutating the DList while iterating
pub trait ListInsertion<A> {
@ -525,7 +525,7 @@ pub trait ListInsertion<A> {
}
// private methods for MutDListIterator
impl<'self, A> MutDListIterator<'self, A> {
impl<'a, A> MutDListIterator<'a, A> {
fn insert_next_node(&mut self, mut ins_node: ~Node<A>) {
// Insert before `self.head` so that it is between the
// previously yielded element and self.head.
@ -547,7 +547,7 @@ impl<'self, A> MutDListIterator<'self, A> {
}
}
impl<'self, A> ListInsertion<A> for MutDListIterator<'self, A> {
impl<'a, A> ListInsertion<A> for MutDListIterator<'a, A> {
#[inline]
fn insert_next(&mut self, elt: A) {
self.insert_next_node(~Node::new(elt))

View File

@ -21,7 +21,7 @@ pub trait ToHex {
static CHARS: &'static[u8] = bytes!("0123456789abcdef");
impl<'self> ToHex for &'self [u8] {
impl<'a> ToHex for &'a [u8] {
/**
* Turn a vector of `u8` bytes into a hexadecimal string.
*
@ -57,7 +57,7 @@ pub trait FromHex {
fn from_hex(&self) -> Result<~[u8], ~str>;
}
impl<'self> FromHex for &'self str {
impl<'a> FromHex for &'a str {
/**
* Convert any hexadecimal encoded string (literal, `@`, `&`, or `~`)
* to the byte values it encodes.

View File

@ -84,11 +84,11 @@ fn spaces(n: uint) -> ~str {
}
/// A structure for implementing serialization to JSON.
pub struct Encoder<'self> {
priv wr: &'self mut io::Writer,
pub struct Encoder<'a> {
priv wr: &'a mut io::Writer,
}
impl<'self> Encoder<'self> {
impl<'a> Encoder<'a> {
/// Creates a new JSON encoder whose output will be written to the writer
/// specified.
pub fn new<'a>(wr: &'a mut io::Writer) -> Encoder<'a> {
@ -96,7 +96,7 @@ impl<'self> Encoder<'self> {
}
}
impl<'self> serialize::Encoder for Encoder<'self> {
impl<'a> serialize::Encoder for Encoder<'a> {
fn emit_nil(&mut self) { write!(self.wr, "null") }
fn emit_uint(&mut self, v: uint) { self.emit_f64(v as f64); }
@ -129,13 +129,13 @@ impl<'self> serialize::Encoder for Encoder<'self> {
write!(self.wr, "{}", escape_str(v))
}
fn emit_enum(&mut self, _name: &str, f: |&mut Encoder<'self>|) { f(self) }
fn emit_enum(&mut self, _name: &str, f: |&mut Encoder<'a>|) { f(self) }
fn emit_enum_variant(&mut self,
name: &str,
_id: uint,
cnt: uint,
f: |&mut Encoder<'self>|) {
f: |&mut Encoder<'a>|) {
// enums are encoded as strings or objects
// Bunny => "Bunny"
// Kangaroo(34,"William") => {"variant": "Kangaroo", "fields": [34,"William"]}
@ -150,7 +150,7 @@ impl<'self> serialize::Encoder for Encoder<'self> {
}
}
fn emit_enum_variant_arg(&mut self, idx: uint, f: |&mut Encoder<'self>|) {
fn emit_enum_variant_arg(&mut self, idx: uint, f: |&mut Encoder<'a>|) {
if idx != 0 {
write!(self.wr, ",");
}
@ -161,18 +161,18 @@ impl<'self> serialize::Encoder for Encoder<'self> {
name: &str,
id: uint,
cnt: uint,
f: |&mut Encoder<'self>|) {
f: |&mut Encoder<'a>|) {
self.emit_enum_variant(name, id, cnt, f)
}
fn emit_enum_struct_variant_field(&mut self,
_: &str,
idx: uint,
f: |&mut Encoder<'self>|) {
f: |&mut Encoder<'a>|) {
self.emit_enum_variant_arg(idx, f)
}
fn emit_struct(&mut self, _: &str, _: uint, f: |&mut Encoder<'self>|) {
fn emit_struct(&mut self, _: &str, _: uint, f: |&mut Encoder<'a>|) {
write!(self.wr, r"\{");
f(self);
write!(self.wr, r"\}");
@ -181,58 +181,58 @@ impl<'self> serialize::Encoder for Encoder<'self> {
fn emit_struct_field(&mut self,
name: &str,
idx: uint,
f: |&mut Encoder<'self>|) {
f: |&mut Encoder<'a>|) {
if idx != 0 { write!(self.wr, ",") }
write!(self.wr, "{}:", escape_str(name));
f(self);
}
fn emit_tuple(&mut self, len: uint, f: |&mut Encoder<'self>|) {
fn emit_tuple(&mut self, len: uint, f: |&mut Encoder<'a>|) {
self.emit_seq(len, f)
}
fn emit_tuple_arg(&mut self, idx: uint, f: |&mut Encoder<'self>|) {
fn emit_tuple_arg(&mut self, idx: uint, f: |&mut Encoder<'a>|) {
self.emit_seq_elt(idx, f)
}
fn emit_tuple_struct(&mut self,
_name: &str,
len: uint,
f: |&mut Encoder<'self>|) {
f: |&mut Encoder<'a>|) {
self.emit_seq(len, f)
}
fn emit_tuple_struct_arg(&mut self, idx: uint, f: |&mut Encoder<'self>|) {
fn emit_tuple_struct_arg(&mut self, idx: uint, f: |&mut Encoder<'a>|) {
self.emit_seq_elt(idx, f)
}
fn emit_option(&mut self, f: |&mut Encoder<'self>|) { f(self); }
fn emit_option(&mut self, f: |&mut Encoder<'a>|) { f(self); }
fn emit_option_none(&mut self) { self.emit_nil(); }
fn emit_option_some(&mut self, f: |&mut Encoder<'self>|) { f(self); }
fn emit_option_some(&mut self, f: |&mut Encoder<'a>|) { f(self); }
fn emit_seq(&mut self, _len: uint, f: |&mut Encoder<'self>|) {
fn emit_seq(&mut self, _len: uint, f: |&mut Encoder<'a>|) {
write!(self.wr, "[");
f(self);
write!(self.wr, "]");
}
fn emit_seq_elt(&mut self, idx: uint, f: |&mut Encoder<'self>|) {
fn emit_seq_elt(&mut self, idx: uint, f: |&mut Encoder<'a>|) {
if idx != 0 {
write!(self.wr, ",");
}
f(self)
}
fn emit_map(&mut self, _len: uint, f: |&mut Encoder<'self>|) {
fn emit_map(&mut self, _len: uint, f: |&mut Encoder<'a>|) {
write!(self.wr, r"\{");
f(self);
write!(self.wr, r"\}");
}
fn emit_map_elt_key(&mut self, idx: uint, f: |&mut Encoder<'self>|) {
fn emit_map_elt_key(&mut self, idx: uint, f: |&mut Encoder<'a>|) {
if idx != 0 { write!(self.wr, ",") }
f(self)
}
fn emit_map_elt_val(&mut self, _idx: uint, f: |&mut Encoder<'self>|) {
fn emit_map_elt_val(&mut self, _idx: uint, f: |&mut Encoder<'a>|) {
write!(self.wr, ":");
f(self)
}
@ -240,12 +240,12 @@ impl<'self> serialize::Encoder for Encoder<'self> {
/// Another encoder for JSON, but prints out human-readable JSON instead of
/// compact data
pub struct PrettyEncoder<'self> {
priv wr: &'self mut io::Writer,
pub struct PrettyEncoder<'a> {
priv wr: &'a mut io::Writer,
priv indent: uint,
}
impl<'self> PrettyEncoder<'self> {
impl<'a> PrettyEncoder<'a> {
/// Creates a new encoder whose output will be written to the specified writer
pub fn new<'a>(wr: &'a mut io::Writer) -> PrettyEncoder<'a> {
PrettyEncoder {
@ -255,7 +255,7 @@ impl<'self> PrettyEncoder<'self> {
}
}
impl<'self> serialize::Encoder for PrettyEncoder<'self> {
impl<'a> serialize::Encoder for PrettyEncoder<'a> {
fn emit_nil(&mut self) { write!(self.wr, "null") }
fn emit_uint(&mut self, v: uint) { self.emit_f64(v as f64); }
@ -286,7 +286,7 @@ impl<'self> serialize::Encoder for PrettyEncoder<'self> {
fn emit_char(&mut self, v: char) { self.emit_str(str::from_char(v)) }
fn emit_str(&mut self, v: &str) { write!(self.wr, "{}", escape_str(v)); }
fn emit_enum(&mut self, _name: &str, f: |&mut PrettyEncoder<'self>|) {
fn emit_enum(&mut self, _name: &str, f: |&mut PrettyEncoder<'a>|) {
f(self)
}
@ -294,7 +294,7 @@ impl<'self> serialize::Encoder for PrettyEncoder<'self> {
name: &str,
_: uint,
cnt: uint,
f: |&mut PrettyEncoder<'self>|) {
f: |&mut PrettyEncoder<'a>|) {
if cnt == 0 {
write!(self.wr, "{}", escape_str(name));
} else {
@ -308,7 +308,7 @@ impl<'self> serialize::Encoder for PrettyEncoder<'self> {
fn emit_enum_variant_arg(&mut self,
idx: uint,
f: |&mut PrettyEncoder<'self>|) {
f: |&mut PrettyEncoder<'a>|) {
if idx != 0 {
write!(self.wr, ",\n");
}
@ -320,14 +320,14 @@ impl<'self> serialize::Encoder for PrettyEncoder<'self> {
name: &str,
id: uint,
cnt: uint,
f: |&mut PrettyEncoder<'self>|) {
f: |&mut PrettyEncoder<'a>|) {
self.emit_enum_variant(name, id, cnt, f)
}
fn emit_enum_struct_variant_field(&mut self,
_: &str,
idx: uint,
f: |&mut PrettyEncoder<'self>|) {
f: |&mut PrettyEncoder<'a>|) {
self.emit_enum_variant_arg(idx, f)
}
@ -335,7 +335,7 @@ impl<'self> serialize::Encoder for PrettyEncoder<'self> {
fn emit_struct(&mut self,
_: &str,
len: uint,
f: |&mut PrettyEncoder<'self>|) {
f: |&mut PrettyEncoder<'a>|) {
if len == 0 {
write!(self.wr, "\\{\\}");
} else {
@ -350,7 +350,7 @@ impl<'self> serialize::Encoder for PrettyEncoder<'self> {
fn emit_struct_field(&mut self,
name: &str,
idx: uint,
f: |&mut PrettyEncoder<'self>|) {
f: |&mut PrettyEncoder<'a>|) {
if idx == 0 {
write!(self.wr, "\n");
} else {
@ -360,30 +360,30 @@ impl<'self> serialize::Encoder for PrettyEncoder<'self> {
f(self);
}
fn emit_tuple(&mut self, len: uint, f: |&mut PrettyEncoder<'self>|) {
fn emit_tuple(&mut self, len: uint, f: |&mut PrettyEncoder<'a>|) {
self.emit_seq(len, f)
}
fn emit_tuple_arg(&mut self, idx: uint, f: |&mut PrettyEncoder<'self>|) {
fn emit_tuple_arg(&mut self, idx: uint, f: |&mut PrettyEncoder<'a>|) {
self.emit_seq_elt(idx, f)
}
fn emit_tuple_struct(&mut self,
_: &str,
len: uint,
f: |&mut PrettyEncoder<'self>|) {
f: |&mut PrettyEncoder<'a>|) {
self.emit_seq(len, f)
}
fn emit_tuple_struct_arg(&mut self,
idx: uint,
f: |&mut PrettyEncoder<'self>|) {
f: |&mut PrettyEncoder<'a>|) {
self.emit_seq_elt(idx, f)
}
fn emit_option(&mut self, f: |&mut PrettyEncoder<'self>|) { f(self); }
fn emit_option(&mut self, f: |&mut PrettyEncoder<'a>|) { f(self); }
fn emit_option_none(&mut self) { self.emit_nil(); }
fn emit_option_some(&mut self, f: |&mut PrettyEncoder<'self>|) { f(self); }
fn emit_option_some(&mut self, f: |&mut PrettyEncoder<'a>|) { f(self); }
fn emit_seq(&mut self, len: uint, f: |&mut PrettyEncoder<'self>|) {
fn emit_seq(&mut self, len: uint, f: |&mut PrettyEncoder<'a>|) {
if len == 0 {
write!(self.wr, "[]");
} else {
@ -395,7 +395,7 @@ impl<'self> serialize::Encoder for PrettyEncoder<'self> {
}
}
fn emit_seq_elt(&mut self, idx: uint, f: |&mut PrettyEncoder<'self>|) {
fn emit_seq_elt(&mut self, idx: uint, f: |&mut PrettyEncoder<'a>|) {
if idx == 0 {
write!(self.wr, "\n");
} else {
@ -405,7 +405,7 @@ impl<'self> serialize::Encoder for PrettyEncoder<'self> {
f(self)
}
fn emit_map(&mut self, len: uint, f: |&mut PrettyEncoder<'self>|) {
fn emit_map(&mut self, len: uint, f: |&mut PrettyEncoder<'a>|) {
if len == 0 {
write!(self.wr, "\\{\\}");
} else {
@ -417,7 +417,7 @@ impl<'self> serialize::Encoder for PrettyEncoder<'self> {
}
}
fn emit_map_elt_key(&mut self, idx: uint, f: |&mut PrettyEncoder<'self>|) {
fn emit_map_elt_key(&mut self, idx: uint, f: |&mut PrettyEncoder<'a>|) {
if idx == 0 {
write!(self.wr, "\n");
} else {
@ -427,7 +427,7 @@ impl<'self> serialize::Encoder for PrettyEncoder<'self> {
f(self);
}
fn emit_map_elt_val(&mut self, _idx: uint, f: |&mut PrettyEncoder<'self>|) {
fn emit_map_elt_val(&mut self, _idx: uint, f: |&mut PrettyEncoder<'a>|) {
write!(self.wr, ": ");
f(self);
}

View File

@ -177,13 +177,13 @@ impl<T:Ord> PriorityQueue<T> {
}
/// PriorityQueue iterator
pub struct PriorityQueueIterator <'self, T> {
priv iter: vec::VecIterator<'self, T>,
pub struct PriorityQueueIterator <'a, T> {
priv iter: vec::VecIterator<'a, T>,
}
impl<'self, T> Iterator<&'self T> for PriorityQueueIterator<'self, T> {
impl<'a, T> Iterator<&'a T> for PriorityQueueIterator<'a, T> {
#[inline]
fn next(&mut self) -> Option<(&'self T)> { self.iter.next() }
fn next(&mut self) -> Option<(&'a T)> { self.iter.next() }
#[inline]
fn size_hint(&self) -> (uint, Option<uint>) { self.iter.size_hint() }

View File

@ -229,16 +229,16 @@ impl<T> RingBuf<T> {
}
/// RingBuf iterator
pub struct RingBufIterator<'self, T> {
pub struct RingBufIterator<'a, T> {
priv lo: uint,
priv index: uint,
priv rindex: uint,
priv elts: &'self [Option<T>],
priv elts: &'a [Option<T>],
}
impl<'self, T> Iterator<&'self T> for RingBufIterator<'self, T> {
impl<'a, T> Iterator<&'a T> for RingBufIterator<'a, T> {
#[inline]
fn next(&mut self) -> Option<&'self T> {
fn next(&mut self) -> Option<&'a T> {
if self.index == self.rindex {
return None;
}
@ -254,9 +254,9 @@ impl<'self, T> Iterator<&'self T> for RingBufIterator<'self, T> {
}
}
impl<'self, T> DoubleEndedIterator<&'self T> for RingBufIterator<'self, T> {
impl<'a, T> DoubleEndedIterator<&'a T> for RingBufIterator<'a, T> {
#[inline]
fn next_back(&mut self) -> Option<&'self T> {
fn next_back(&mut self) -> Option<&'a T> {
if self.index == self.rindex {
return None;
}
@ -266,14 +266,14 @@ impl<'self, T> DoubleEndedIterator<&'self T> for RingBufIterator<'self, T> {
}
}
impl<'self, T> ExactSize<&'self T> for RingBufIterator<'self, T> {}
impl<'a, T> ExactSize<&'a T> for RingBufIterator<'a, T> {}
impl<'self, T> RandomAccessIterator<&'self T> for RingBufIterator<'self, T> {
impl<'a, T> RandomAccessIterator<&'a T> for RingBufIterator<'a, T> {
#[inline]
fn indexable(&self) -> uint { self.rindex - self.index }
#[inline]
fn idx(&self, j: uint) -> Option<&'self T> {
fn idx(&self, j: uint) -> Option<&'a T> {
if j >= self.indexable() {
None
} else {
@ -284,15 +284,15 @@ impl<'self, T> RandomAccessIterator<&'self T> for RingBufIterator<'self, T> {
}
/// RingBuf mutable iterator
pub struct RingBufMutIterator<'self, T> {
priv remaining1: &'self mut [Option<T>],
priv remaining2: &'self mut [Option<T>],
pub struct RingBufMutIterator<'a, T> {
priv remaining1: &'a mut [Option<T>],
priv remaining2: &'a mut [Option<T>],
priv nelts: uint,
}
impl<'self, T> Iterator<&'self mut T> for RingBufMutIterator<'self, T> {
impl<'a, T> Iterator<&'a mut T> for RingBufMutIterator<'a, T> {
#[inline]
fn next(&mut self) -> Option<&'self mut T> {
fn next(&mut self) -> Option<&'a mut T> {
if self.nelts == 0 {
return None;
}
@ -312,9 +312,9 @@ impl<'self, T> Iterator<&'self mut T> for RingBufMutIterator<'self, T> {
}
}
impl<'self, T> DoubleEndedIterator<&'self mut T> for RingBufMutIterator<'self, T> {
impl<'a, T> DoubleEndedIterator<&'a mut T> for RingBufMutIterator<'a, T> {
#[inline]
fn next_back(&mut self) -> Option<&'self mut T> {
fn next_back(&mut self) -> Option<&'a mut T> {
if self.nelts == 0 {
return None;
}
@ -329,7 +329,7 @@ impl<'self, T> DoubleEndedIterator<&'self mut T> for RingBufMutIterator<'self, T
}
}
impl<'self, T> ExactSize<&'self mut T> for RingBufMutIterator<'self, T> {}
impl<'a, T> ExactSize<&'a mut T> for RingBufMutIterator<'a, T> {}
/// Grow is only called on full elts, so nelts is also len(elts), unlike
/// elsewhere.

View File

@ -292,7 +292,7 @@ impl<D:Decoder> Decodable<D> for i64 {
}
}
impl<'self, S:Encoder> Encodable<S> for &'self str {
impl<'a, S:Encoder> Encodable<S> for &'a str {
fn encode(&self, s: &mut S) {
s.emit_str(*self)
}
@ -382,7 +382,7 @@ impl<D:Decoder> Decodable<D> for () {
}
}
impl<'self, S:Encoder,T:Encodable<S>> Encodable<S> for &'self T {
impl<'a, S:Encoder,T:Encodable<S>> Encodable<S> for &'a T {
fn encode(&self, s: &mut S) {
(**self).encode(s)
}
@ -438,7 +438,7 @@ impl<D:Decoder,T:Decodable<D> + 'static> Decodable<D> for @mut T {
}
}
impl<'self, S:Encoder,T:Encodable<S>> Encodable<S> for &'self [T] {
impl<'a, S:Encoder,T:Encodable<S>> Encodable<S> for &'a [T] {
fn encode(&self, s: &mut S) {
s.emit_seq(self.len(), |s| {
for (i, e) in self.iter().enumerate() {

View File

@ -184,7 +184,7 @@ impl<V:Clone> SmallIntMap<V> {
macro_rules! iterator {
(impl $name:ident -> $elem:ty, $getter:ident) => {
impl<'self, T> Iterator<$elem> for $name<'self, T> {
impl<'a, T> Iterator<$elem> for $name<'a, T> {
#[inline]
fn next(&mut self) -> Option<$elem> {
while self.front < self.back {
@ -213,7 +213,7 @@ macro_rules! iterator {
macro_rules! double_ended_iterator {
(impl $name:ident -> $elem:ty, $getter:ident) => {
impl<'self, T> DoubleEndedIterator<$elem> for $name<'self, T> {
impl<'a, T> DoubleEndedIterator<$elem> for $name<'a, T> {
#[inline]
fn next_back(&mut self) -> Option<$elem> {
while self.front < self.back {
@ -234,25 +234,25 @@ macro_rules! double_ended_iterator {
}
}
pub struct SmallIntMapIterator<'self, T> {
pub struct SmallIntMapIterator<'a, T> {
priv front: uint,
priv back: uint,
priv iter: VecIterator<'self, Option<T>>
priv iter: VecIterator<'a, Option<T>>
}
iterator!(impl SmallIntMapIterator -> (uint, &'self T), get_ref)
double_ended_iterator!(impl SmallIntMapIterator -> (uint, &'self T), get_ref)
pub type SmallIntMapRevIterator<'self, T> = Invert<SmallIntMapIterator<'self, T>>;
iterator!(impl SmallIntMapIterator -> (uint, &'a T), get_ref)
double_ended_iterator!(impl SmallIntMapIterator -> (uint, &'a T), get_ref)
pub type SmallIntMapRevIterator<'a, T> = Invert<SmallIntMapIterator<'a, T>>;
pub struct SmallIntMapMutIterator<'self, T> {
pub struct SmallIntMapMutIterator<'a, T> {
priv front: uint,
priv back: uint,
priv iter: VecMutIterator<'self, Option<T>>
priv iter: VecMutIterator<'a, Option<T>>
}
iterator!(impl SmallIntMapMutIterator -> (uint, &'self mut T), get_mut_ref)
double_ended_iterator!(impl SmallIntMapMutIterator -> (uint, &'self mut T), get_mut_ref)
pub type SmallIntMapMutRevIterator<'self, T> = Invert<SmallIntMapMutIterator<'self, T>>;
iterator!(impl SmallIntMapMutIterator -> (uint, &'a mut T), get_mut_ref)
double_ended_iterator!(impl SmallIntMapMutIterator -> (uint, &'a mut T), get_mut_ref)
pub type SmallIntMapMutRevIterator<'a, T> = Invert<SmallIntMapMutIterator<'a, T>>;
#[cfg(test)]
mod test_map {

View File

@ -15,7 +15,7 @@ use std::cmp::{Eq, Ord};
use std::util::swap;
use std::vec;
type Le<'self, T> = 'self |v1: &T, v2: &T| -> bool;
type Le<'a, T> = 'a |v1: &T, v2: &T| -> bool;
/**
* Merge sort. Returns a new vector containing the sorted list.
@ -173,7 +173,7 @@ pub trait Sort {
fn qsort(self);
}
impl<'self, T:Clone + Ord + Eq> Sort for &'self mut [T] {
impl<'a, T:Clone + Ord + Eq> Sort for &'a mut [T] {
fn qsort(self) { quick_sort3(self); }
}

View File

@ -145,7 +145,7 @@ impl Summary {
}
}
impl<'self> Stats for &'self [f64] {
impl<'a> Stats for &'a [f64] {
fn sum(self) -> f64 {
self.iter().fold(0.0, |p,q| p + *q)

View File

@ -155,28 +155,28 @@ impl Sem<~[WaitQueue]> {
// FIXME(#3598): Want to use an Option down below, but we need a custom enum
// that's not polymorphic to get around the fact that lifetimes are invariant
// inside of type parameters.
enum ReacquireOrderLock<'self> {
enum ReacquireOrderLock<'a> {
Nothing, // c.c
Just(&'self Semaphore),
Just(&'a Semaphore),
}
/// A mechanism for atomic-unlock-and-deschedule blocking and signalling.
pub struct Condvar<'self> {
pub struct Condvar<'a> {
// The 'Sem' object associated with this condvar. This is the one that's
// atomically-unlocked-and-descheduled upon and reacquired during wakeup.
priv sem: &'self Sem<~[WaitQueue]>,
priv sem: &'a Sem<~[WaitQueue]>,
// This is (can be) an extra semaphore which is held around the reacquire
// operation on the first one. This is only used in cvars associated with
// rwlocks, and is needed to ensure that, when a downgrader is trying to
// hand off the access lock (which would be the first field, here), a 2nd
// writer waking up from a cvar wait can't race with a reader to steal it,
// See the comment in write_cond for more detail.
priv order: ReacquireOrderLock<'self>,
priv order: ReacquireOrderLock<'a>,
// Make sure condvars are non-copyable.
priv token: util::NonCopyable,
}
impl<'self> Condvar<'self> {
impl<'a> Condvar<'a> {
/**
* Atomically drop the associated lock, and block until a signal is sent.
*
@ -644,12 +644,12 @@ impl RWLock {
/// The "write permission" token used for rwlock.write_downgrade().
pub struct RWLockWriteMode<'self> { priv lock: &'self RWLock, priv token: NonCopyable }
pub struct RWLockWriteMode<'a> { priv lock: &'a RWLock, priv token: NonCopyable }
/// The "read permission" token used for rwlock.write_downgrade().
pub struct RWLockReadMode<'self> { priv lock: &'self RWLock,
pub struct RWLockReadMode<'a> { priv lock: &'a RWLock,
priv token: NonCopyable }
impl<'self> RWLockWriteMode<'self> {
impl<'a> RWLockWriteMode<'a> {
/// Access the pre-downgrade rwlock in write mode.
pub fn write<U>(&self, blk: || -> U) -> U { blk() }
/// Access the pre-downgrade rwlock in write mode with a condvar.
@ -662,7 +662,7 @@ impl<'self> RWLockWriteMode<'self> {
}
}
impl<'self> RWLockReadMode<'self> {
impl<'a> RWLockReadMode<'a> {
/// Access the post-downgrade rwlock in read mode.
pub fn read<U>(&self, blk: || -> U) -> U { blk() }
}

View File

@ -228,9 +228,9 @@ impl<K: TotalOrd, V> TreeMap<K, V> {
}
/// Lazy forward iterator over a map
pub struct TreeMapIterator<'self, K, V> {
priv stack: ~[&'self TreeNode<K, V>],
priv node: Option<&'self TreeNode<K, V>>,
pub struct TreeMapIterator<'a, K, V> {
priv stack: ~[&'a TreeNode<K, V>],
priv node: Option<&'a TreeNode<K, V>>,
priv remaining_min: uint,
priv remaining_max: uint
}
@ -245,9 +245,9 @@ fn deref<'a, K, V>(node: &'a Option<~TreeNode<K, V>>) -> Option<&'a TreeNode<K,
}
}
impl<'self, K, V> TreeMapIterator<'self, K, V> {
impl<'a, K, V> TreeMapIterator<'a, K, V> {
#[inline(always)]
fn next_(&mut self, forward: bool) -> Option<(&'self K, &'self V)> {
fn next_(&mut self, forward: bool) -> Option<(&'a K, &'a V)> {
while !self.stack.is_empty() || self.node.is_some() {
match self.node {
Some(x) => {
@ -269,11 +269,11 @@ impl<'self, K, V> TreeMapIterator<'self, K, V> {
}
}
impl<'self, K, V> Iterator<(&'self K, &'self V)> for TreeMapIterator<'self, K, V> {
impl<'a, K, V> Iterator<(&'a K, &'a V)> for TreeMapIterator<'a, K, V> {
/// Advance the iterator to the next node (in order) and return a
/// tuple with a reference to the key and value. If there are no
/// more nodes, return `None`.
fn next(&mut self) -> Option<(&'self K, &'self V)> {
fn next(&mut self) -> Option<(&'a K, &'a V)> {
self.next_(true)
}
@ -284,15 +284,15 @@ impl<'self, K, V> Iterator<(&'self K, &'self V)> for TreeMapIterator<'self, K, V
}
/// Lazy backward iterator over a map
pub struct TreeMapRevIterator<'self, K, V> {
priv iter: TreeMapIterator<'self, K, V>,
pub struct TreeMapRevIterator<'a, K, V> {
priv iter: TreeMapIterator<'a, K, V>,
}
impl<'self, K, V> Iterator<(&'self K, &'self V)> for TreeMapRevIterator<'self, K, V> {
impl<'a, K, V> Iterator<(&'a K, &'a V)> for TreeMapRevIterator<'a, K, V> {
/// Advance the iterator to the next node (in order) and return a
/// tuple with a reference to the key and value. If there are no
/// more nodes, return `None`.
fn next(&mut self) -> Option<(&'self K, &'self V)> {
fn next(&mut self) -> Option<(&'a K, &'a V)> {
self.iter.next_(false)
}
@ -390,18 +390,18 @@ impl<K, V> Iterator<(K, V)> for TreeMapMoveIterator<K,V> {
}
impl<'self, T> Iterator<&'self T> for TreeSetIterator<'self, T> {
impl<'a, T> Iterator<&'a T> for TreeSetIterator<'a, T> {
/// Advance the iterator to the next node (in order). If there are no more nodes, return `None`.
#[inline]
fn next(&mut self) -> Option<&'self T> {
fn next(&mut self) -> Option<&'a T> {
self.iter.next().map(|(value, _)| value)
}
}
impl<'self, T> Iterator<&'self T> for TreeSetRevIterator<'self, T> {
impl<'a, T> Iterator<&'a T> for TreeSetRevIterator<'a, T> {
/// Advance the iterator to the next node (in order). If there are no more nodes, return `None`.
#[inline]
fn next(&mut self) -> Option<&'self T> {
fn next(&mut self) -> Option<&'a T> {
self.iter.next().map(|(value, _)| value)
}
}
@ -561,37 +561,37 @@ impl<T: TotalOrd> TreeSet<T> {
}
/// Lazy forward iterator over a set
pub struct TreeSetIterator<'self, T> {
priv iter: TreeMapIterator<'self, T, ()>
pub struct TreeSetIterator<'a, T> {
priv iter: TreeMapIterator<'a, T, ()>
}
/// Lazy backward iterator over a set
pub struct TreeSetRevIterator<'self, T> {
priv iter: TreeMapRevIterator<'self, T, ()>
pub struct TreeSetRevIterator<'a, T> {
priv iter: TreeMapRevIterator<'a, T, ()>
}
/// Lazy iterator producing elements in the set difference (in-order)
pub struct Difference<'self, T> {
priv a: Peekable<&'self T, TreeSetIterator<'self, T>>,
priv b: Peekable<&'self T, TreeSetIterator<'self, T>>,
pub struct Difference<'a, T> {
priv a: Peekable<&'a T, TreeSetIterator<'a, T>>,
priv b: Peekable<&'a T, TreeSetIterator<'a, T>>,
}
/// Lazy iterator producing elements in the set symmetric difference (in-order)
pub struct SymDifference<'self, T> {
priv a: Peekable<&'self T, TreeSetIterator<'self, T>>,
priv b: Peekable<&'self T, TreeSetIterator<'self, T>>,
pub struct SymDifference<'a, T> {
priv a: Peekable<&'a T, TreeSetIterator<'a, T>>,
priv b: Peekable<&'a T, TreeSetIterator<'a, T>>,
}
/// Lazy iterator producing elements in the set intersection (in-order)
pub struct Intersection<'self, T> {
priv a: Peekable<&'self T, TreeSetIterator<'self, T>>,
priv b: Peekable<&'self T, TreeSetIterator<'self, T>>,
pub struct Intersection<'a, T> {
priv a: Peekable<&'a T, TreeSetIterator<'a, T>>,
priv b: Peekable<&'a T, TreeSetIterator<'a, T>>,
}
/// Lazy iterator producing elements in the set intersection (in-order)
pub struct Union<'self, T> {
priv a: Peekable<&'self T, TreeSetIterator<'self, T>>,
priv b: Peekable<&'self T, TreeSetIterator<'self, T>>,
pub struct Union<'a, T> {
priv a: Peekable<&'a T, TreeSetIterator<'a, T>>,
priv b: Peekable<&'a T, TreeSetIterator<'a, T>>,
}
/// Compare `x` and `y`, but return `short` if x is None and `long` if y is None
@ -604,8 +604,8 @@ fn cmp_opt<T: TotalOrd>(x: Option<&T>, y: Option<&T>,
}
}
impl<'self, T: TotalOrd> Iterator<&'self T> for Difference<'self, T> {
fn next(&mut self) -> Option<&'self T> {
impl<'a, T: TotalOrd> Iterator<&'a T> for Difference<'a, T> {
fn next(&mut self) -> Option<&'a T> {
loop {
match cmp_opt(self.a.peek(), self.b.peek(), Less, Less) {
Less => return self.a.next(),
@ -616,8 +616,8 @@ impl<'self, T: TotalOrd> Iterator<&'self T> for Difference<'self, T> {
}
}
impl<'self, T: TotalOrd> Iterator<&'self T> for SymDifference<'self, T> {
fn next(&mut self) -> Option<&'self T> {
impl<'a, T: TotalOrd> Iterator<&'a T> for SymDifference<'a, T> {
fn next(&mut self) -> Option<&'a T> {
loop {
match cmp_opt(self.a.peek(), self.b.peek(), Greater, Less) {
Less => return self.a.next(),
@ -628,8 +628,8 @@ impl<'self, T: TotalOrd> Iterator<&'self T> for SymDifference<'self, T> {
}
}
impl<'self, T: TotalOrd> Iterator<&'self T> for Intersection<'self, T> {
fn next(&mut self) -> Option<&'self T> {
impl<'a, T: TotalOrd> Iterator<&'a T> for Intersection<'a, T> {
fn next(&mut self) -> Option<&'a T> {
loop {
let o_cmp = match (self.a.peek(), self.b.peek()) {
(None , _ ) => None,
@ -646,8 +646,8 @@ impl<'self, T: TotalOrd> Iterator<&'self T> for Intersection<'self, T> {
}
}
impl<'self, T: TotalOrd> Iterator<&'self T> for Union<'self, T> {
fn next(&mut self) -> Option<&'self T> {
impl<'a, T: TotalOrd> Iterator<&'a T> for Union<'a, T> {
fn next(&mut self) -> Option<&'a T> {
loop {
match cmp_opt(self.a.peek(), self.b.peek(), Greater, Less) {
Less => return self.a.next(),

View File

@ -239,9 +239,9 @@ pub struct Context {
priv freshness: Arc<FreshnessMap>
}
pub struct Prep<'self> {
priv ctxt: &'self Context,
priv fn_name: &'self str,
pub struct Prep<'a> {
priv ctxt: &'a Context,
priv fn_name: &'a str,
priv declared_inputs: WorkMap,
}
@ -250,12 +250,12 @@ pub struct Exec {
priv discovered_outputs: WorkMap
}
enum Work<'self, T> {
enum Work<'a, T> {
WorkValue(T),
WorkFromTask(&'self Prep<'self>, PortOne<(Exec, T)>),
WorkFromTask(&'a Prep<'a>, PortOne<(Exec, T)>),
}
fn json_encode<'self, T:Encodable<json::Encoder<'self>>>(t: &T) -> ~str {
fn json_encode<'a, T:Encodable<json::Encoder<'a>>>(t: &T) -> ~str {
let mut writer = MemWriter::new();
let mut encoder = json::Encoder::new(&mut writer as &mut io::Writer);
t.encode(&mut encoder);
@ -336,8 +336,8 @@ impl Exec {
}
}
impl<'self> Prep<'self> {
fn new(ctxt: &'self Context, fn_name: &'self str) -> Prep<'self> {
impl<'a> Prep<'a> {
fn new(ctxt: &'a Context, fn_name: &'a str) -> Prep<'a> {
Prep {
ctxt: ctxt,
fn_name: fn_name,
@ -356,7 +356,7 @@ impl<'self> Prep<'self> {
}
}
impl<'self> Prep<'self> {
impl<'a> Prep<'a> {
pub fn declare_input(&mut self, kind: &str, name: &str, val: &str) {
debug!("Declaring input {} {} {}", kind, name, val);
self.declared_inputs.insert_work_key(WorkKey::new(kind, name),
@ -395,17 +395,17 @@ impl<'self> Prep<'self> {
return true;
}
pub fn exec<'self, T:Send +
Encodable<json::Encoder<'self>> +
pub fn exec<'a, T:Send +
Encodable<json::Encoder<'a>> +
Decodable<json::Decoder>>(
&'self self, blk: proc(&mut Exec) -> T) -> T {
&'a self, blk: proc(&mut Exec) -> T) -> T {
self.exec_work(blk).unwrap()
}
fn exec_work<'self, T:Send +
Encodable<json::Encoder<'self>> +
fn exec_work<'a, T:Send +
Encodable<json::Encoder<'a>> +
Decodable<json::Decoder>>( // FIXME(#5121)
&'self self, blk: proc(&mut Exec) -> T) -> Work<'self, T> {
&'a self, blk: proc(&mut Exec) -> T) -> Work<'a, T> {
let mut bo = Some(blk);
debug!("exec_work: looking up {} and {:?}", self.fn_name,
@ -445,16 +445,16 @@ impl<'self> Prep<'self> {
}
}
impl<'self, T:Send +
Encodable<json::Encoder<'self>> +
impl<'a, T:Send +
Encodable<json::Encoder<'a>> +
Decodable<json::Decoder>>
Work<'self, T> { // FIXME(#5121)
Work<'a, T> { // FIXME(#5121)
pub fn from_value(elt: T) -> Work<'self, T> {
pub fn from_value(elt: T) -> Work<'a, T> {
WorkValue(elt)
}
pub fn from_task(prep: &'self Prep<'self>, port: PortOne<(Exec, T)>)
-> Work<'self, T> {
pub fn from_task(prep: &'a Prep<'a>, port: PortOne<(Exec, T)>)
-> Work<'a, T> {
WorkFromTask(prep, port)
}

View File

@ -12,8 +12,8 @@
use syntax::fold::ast_fold;
use syntax::{ast, fold, attr};
struct Context<'self> {
in_cfg: 'self |attrs: &[ast::Attribute]| -> bool,
struct Context<'a> {
in_cfg: 'a |attrs: &[ast::Attribute]| -> bool,
}
// Support conditional compilation by transforming the AST, stripping out
@ -23,7 +23,7 @@ pub fn strip_unconfigured_items(crate: ast::Crate) -> ast::Crate {
strip_items(crate, |attrs| in_cfg(config, attrs))
}
impl<'self> fold::ast_fold for Context<'self> {
impl<'a> fold::ast_fold for Context<'a> {
fn fold_mod(&self, module: &ast::_mod) -> ast::_mod {
fold_mod(self, module)
}

View File

@ -73,7 +73,7 @@ fn lookup_hash(d: ebml::Doc, eq_fn: |&[u8]| -> bool, hash: u64) ->
ret
}
pub type GetCrateDataCb<'self> = 'self |ast::CrateNum| -> Cmd;
pub type GetCrateDataCb<'a> = 'a |ast::CrateNum| -> Cmd;
pub fn maybe_find_item(item_id: ast::NodeId, items: ebml::Doc) -> Option<ebml::Doc> {
fn eq_item(bytes: &[u8], item_id: ast::NodeId) -> bool {
@ -694,7 +694,7 @@ pub fn get_item_path(cdata: Cmd, id: ast::NodeId) -> ast_map::path {
item_path(lookup_item(id, cdata.data))
}
pub type decode_inlined_item<'self> = 'self |cdata: @cstore::crate_metadata,
pub type decode_inlined_item<'a> = 'a |cdata: @cstore::crate_metadata,
tcx: ty::ctxt,
path: ast_map::path,
par_doc: ebml::Doc|

View File

@ -51,21 +51,21 @@ use writer = extra::ebml::writer;
// used by astencode:
type abbrev_map = @mut HashMap<ty::t, tyencode::ty_abbrev>;
pub type encode_inlined_item<'self> = 'self |ecx: &EncodeContext,
pub type encode_inlined_item<'a> = 'a |ecx: &EncodeContext,
ebml_w: &mut writer::Encoder,
path: &[ast_map::path_elt],
ii: ast::inlined_item|;
pub struct EncodeParams<'self> {
pub struct EncodeParams<'a> {
diag: @mut span_handler,
tcx: ty::ctxt,
reexports2: middle::resolve::ExportMap2,
item_symbols: &'self HashMap<ast::NodeId, ~str>,
discrim_symbols: &'self HashMap<ast::NodeId, @str>,
non_inlineable_statics: &'self HashSet<ast::NodeId>,
link_meta: &'self LinkMeta,
item_symbols: &'a HashMap<ast::NodeId, ~str>,
discrim_symbols: &'a HashMap<ast::NodeId, @str>,
non_inlineable_statics: &'a HashSet<ast::NodeId>,
link_meta: &'a LinkMeta,
cstore: @mut cstore::CStore,
encode_inlined_item: encode_inlined_item<'self>,
encode_inlined_item: encode_inlined_item<'a>,
reachable: @mut HashSet<ast::NodeId>,
}
@ -85,17 +85,17 @@ struct Stats {
n_inlines: uint
}
pub struct EncodeContext<'self> {
pub struct EncodeContext<'a> {
diag: @mut span_handler,
tcx: ty::ctxt,
stats: @mut Stats,
reexports2: middle::resolve::ExportMap2,
item_symbols: &'self HashMap<ast::NodeId, ~str>,
discrim_symbols: &'self HashMap<ast::NodeId, @str>,
non_inlineable_statics: &'self HashSet<ast::NodeId>,
link_meta: &'self LinkMeta,
cstore: &'self cstore::CStore,
encode_inlined_item: encode_inlined_item<'self>,
item_symbols: &'a HashMap<ast::NodeId, ~str>,
discrim_symbols: &'a HashMap<ast::NodeId, @str>,
non_inlineable_statics: &'a HashSet<ast::NodeId>,
link_meta: &'a LinkMeta,
cstore: &'a cstore::CStore,
encode_inlined_item: encode_inlined_item<'a>,
type_abbrevs: abbrev_map,
reachable: @mut HashSet<ast::NodeId>,
}
@ -1605,12 +1605,12 @@ fn encode_native_libraries(ecx: &EncodeContext, ebml_w: &mut writer::Encoder) {
ebml_w.end_tag();
}
struct ImplVisitor<'self> {
ecx: &'self EncodeContext<'self>,
ebml_w: &'self mut writer::Encoder,
struct ImplVisitor<'a> {
ecx: &'a EncodeContext<'a>,
ebml_w: &'a mut writer::Encoder,
}
impl<'self> Visitor<()> for ImplVisitor<'self> {
impl<'a> Visitor<()> for ImplVisitor<'a> {
fn visit_item(&mut self, item: @item, _: ()) {
match item.node {
item_impl(_, Some(ref trait_ref), _, _) => {

View File

@ -23,7 +23,7 @@ pub enum FileMatch { FileMatches, FileDoesntMatch }
/// Functions with type `pick` take a parent directory as well as
/// a file found in that directory.
pub type pick<'self> = 'self |path: &Path| -> FileMatch;
pub type pick<'a> = 'a |path: &Path| -> FileMatch;
pub fn pick_file(file: Path, path: &Path) -> Option<Path> {
if path.filename() == Some(file.as_vec()) {

View File

@ -52,11 +52,11 @@ pub enum DefIdSource {
// Identifies a region parameter (`fn foo<'X>() { ... }`).
RegionParameter,
}
type conv_did<'self> =
'self |source: DefIdSource, ast::DefId| -> ast::DefId;
type conv_did<'a> =
'a |source: DefIdSource, ast::DefId| -> ast::DefId;
pub struct PState<'self> {
data: &'self [u8],
pub struct PState<'a> {
data: &'a [u8],
crate: ast::CrateNum,
pos: uint,
tcx: ty::ctxt

View File

@ -765,7 +765,7 @@ trait get_ty_str_ctxt {
fn ty_str_ctxt(&self) -> @tyencode::ctxt;
}
impl<'self> get_ty_str_ctxt for e::EncodeContext<'self> {
impl<'a> get_ty_str_ctxt for e::EncodeContext<'a> {
fn ty_str_ctxt(&self) -> @tyencode::ctxt {
@tyencode::ctxt {
diag: self.tcx.sess.diagnostic(),

View File

@ -32,15 +32,15 @@ use syntax::visit;
use util::ppaux::Repr;
#[deriving(Clone)]
struct CheckLoanCtxt<'self> {
bccx: &'self BorrowckCtxt,
dfcx_loans: &'self LoanDataFlow,
struct CheckLoanCtxt<'a> {
bccx: &'a BorrowckCtxt,
dfcx_loans: &'a LoanDataFlow,
move_data: @move_data::FlowedMoveData,
all_loans: &'self [Loan],
all_loans: &'a [Loan],
reported: @mut HashSet<ast::NodeId>,
}
impl<'self> Visitor<()> for CheckLoanCtxt<'self> {
impl<'a> Visitor<()> for CheckLoanCtxt<'a> {
fn visit_expr(&mut self, ex:@ast::Expr, _:()) {
check_loans_in_expr(self, ex);
@ -86,7 +86,7 @@ enum MoveError {
MoveWhileBorrowed(/*loan*/@LoanPath, /*loan*/Span)
}
impl<'self> CheckLoanCtxt<'self> {
impl<'a> CheckLoanCtxt<'a> {
pub fn tcx(&self) -> ty::ctxt { self.bccx.tcx }
pub fn each_issued_loan(&self, scope_id: ast::NodeId, op: |&Loan| -> bool)

View File

@ -45,8 +45,8 @@ pub fn guarantee_lifetime(bccx: &BorrowckCtxt,
///////////////////////////////////////////////////////////////////////////
// Private
struct GuaranteeLifetimeContext<'self> {
bccx: &'self BorrowckCtxt,
struct GuaranteeLifetimeContext<'a> {
bccx: &'a BorrowckCtxt,
// the node id of the function body for the enclosing item
item_scope_id: ast::NodeId,
@ -61,7 +61,7 @@ struct GuaranteeLifetimeContext<'self> {
cmt_original: mc::cmt
}
impl<'self> GuaranteeLifetimeContext<'self> {
impl<'a> GuaranteeLifetimeContext<'a> {
fn tcx(&self) -> ty::ctxt {
self.bccx.tcx
}

View File

@ -64,8 +64,8 @@ mod gather_moves;
/// No good. Instead what will happen is that `root_ub` will be set to the
/// body of the while loop and we will refuse to root the pointer `&*x`
/// because it would have to be rooted for a region greater than `root_ub`.
struct GatherLoanCtxt<'self> {
bccx: &'self BorrowckCtxt,
struct GatherLoanCtxt<'a> {
bccx: &'a BorrowckCtxt,
id_range: id_range,
move_data: @mut move_data::MoveData,
all_loans: @mut ~[Loan],
@ -73,7 +73,7 @@ struct GatherLoanCtxt<'self> {
repeating_ids: ~[ast::NodeId]
}
impl<'self> visit::Visitor<()> for GatherLoanCtxt<'self> {
impl<'a> visit::Visitor<()> for GatherLoanCtxt<'a> {
fn visit_expr(&mut self, ex:@Expr, _:()) {
gather_loans_in_expr(self, ex);
}
@ -333,7 +333,7 @@ fn gather_loans_in_expr(this: &mut GatherLoanCtxt,
}
}
impl<'self> GatherLoanCtxt<'self> {
impl<'a> GatherLoanCtxt<'a> {
pub fn tcx(&self) -> ty::ctxt { self.bccx.tcx }
pub fn push_repeating_id(&mut self, id: ast::NodeId) {

View File

@ -42,14 +42,14 @@ pub fn compute_restrictions(bccx: &BorrowckCtxt,
///////////////////////////////////////////////////////////////////////////
// Private
struct RestrictionsContext<'self> {
bccx: &'self BorrowckCtxt,
struct RestrictionsContext<'a> {
bccx: &'a BorrowckCtxt,
span: Span,
cmt_original: mc::cmt,
loan_region: ty::Region,
}
impl<'self> RestrictionsContext<'self> {
impl<'a> RestrictionsContext<'a> {
fn restrict(&self,
cmt: mc::cmt,
restrictions: RestrictionSet) -> RestrictionResult {

View File

@ -77,12 +77,12 @@ pub trait DataFlowOperator {
fn walk_closures(&self) -> bool;
}
struct PropagationContext<'self, O> {
dfcx: &'self mut DataFlowContext<O>,
struct PropagationContext<'a, O> {
dfcx: &'a mut DataFlowContext<O>,
changed: bool
}
struct LoopScope<'self> {
struct LoopScope<'a> {
loop_id: ast::NodeId,
break_bits: ~[uint]
}
@ -363,7 +363,7 @@ impl<O:DataFlowOperator+Clone+'static> DataFlowContext<O> {
}
}
impl<'self, O:DataFlowOperator> PropagationContext<'self, O> {
impl<'a, O:DataFlowOperator> PropagationContext<'a, O> {
fn tcx(&self) -> ty::ctxt {
self.dfcx.tcx
}

View File

@ -103,11 +103,11 @@ struct LanguageItemCollector {
item_refs: HashMap<&'static str, uint>,
}
struct LanguageItemVisitor<'self> {
this: &'self mut LanguageItemCollector,
struct LanguageItemVisitor<'a> {
this: &'a mut LanguageItemCollector,
}
impl<'self> Visitor<()> for LanguageItemVisitor<'self> {
impl<'a> Visitor<()> for LanguageItemVisitor<'a> {
fn visit_item(&mut self, item: @ast::item, _: ()) {
match extract(item.attrs) {
Some(value) => {

View File

@ -352,7 +352,7 @@ pub fn get_lint_dict() -> LintDict {
return map;
}
struct Context<'self> {
struct Context<'a> {
// All known lint modes (string versions)
dict: @LintDict,
// Current levels of each lint warning
@ -360,7 +360,7 @@ struct Context<'self> {
// context we're checking in (used to access fields like sess)
tcx: ty::ctxt,
// Items exported by the crate; used by the missing_doc lint.
exported_items: &'self privacy::ExportedItems,
exported_items: &'a privacy::ExportedItems,
// The id of the current `ast::struct_def` being walked.
cur_struct_def_id: ast::NodeId,
// Whether some ancestor of the current node was marked
@ -376,7 +376,7 @@ struct Context<'self> {
negated_expr_id: ast::NodeId
}
impl<'self> Context<'self> {
impl<'a> Context<'a> {
fn get_level(&self, lint: lint) -> level {
match self.cur.find(&(lint as uint)) {
Some(&(lvl, _)) => lvl,
@ -1234,7 +1234,7 @@ fn check_stability(cx: &Context, e: &ast::Expr) {
cx.span_lint(lint, e.span, msg);
}
impl<'self> Visitor<()> for Context<'self> {
impl<'a> Visitor<()> for Context<'a> {
fn visit_item(&mut self, it: @ast::item, _: ()) {
self.with_lint_attrs(it.attrs, |cx| {
check_item_ctypes(cx, it);
@ -1369,7 +1369,7 @@ impl<'self> Visitor<()> for Context<'self> {
fn visit_ty(&mut self, _t: &ast::Ty, _: ()) {}
}
impl<'self> IdVisitingOperation for Context<'self> {
impl<'a> IdVisitingOperation for Context<'a> {
fn visit_id(&self, id: ast::NodeId) {
match self.tcx.sess.lints.pop(&id) {
None => {}

View File

@ -30,7 +30,7 @@ use syntax::opt_vec;
use syntax::visit;
use syntax::visit::Visitor;
type Context<'self> = (&'self method_map, &'self resolve::ExportMap2);
type Context<'a> = (&'a method_map, &'a resolve::ExportMap2);
/// A set of AST nodes exported by the crate.
pub type ExportedItems = HashSet<ast::NodeId>;
@ -143,9 +143,9 @@ impl Visitor<()> for ParentVisitor {
/// The embargo visitor, used to determine the exports of the ast
////////////////////////////////////////////////////////////////////////////////
struct EmbargoVisitor<'self> {
struct EmbargoVisitor<'a> {
tcx: ty::ctxt,
exp_map2: &'self resolve::ExportMap2,
exp_map2: &'a resolve::ExportMap2,
// This flag is an indicator of whether the previous item in the
// hierarchical chain was exported or not. This is the indicator of whether
@ -167,7 +167,7 @@ struct EmbargoVisitor<'self> {
reexports: HashSet<ast::NodeId>,
}
impl<'self> Visitor<()> for EmbargoVisitor<'self> {
impl<'a> Visitor<()> for EmbargoVisitor<'a> {
fn visit_item(&mut self, item: @ast::item, _: ()) {
let orig_all_pub = self.prev_exported;
match item.node {
@ -308,12 +308,12 @@ impl<'self> Visitor<()> for EmbargoVisitor<'self> {
/// The privacy visitor, where privacy checks take place (violations reported)
////////////////////////////////////////////////////////////////////////////////
struct PrivacyVisitor<'self> {
struct PrivacyVisitor<'a> {
tcx: ty::ctxt,
curitem: ast::NodeId,
in_fn: bool,
in_foreign: bool,
method_map: &'self method_map,
method_map: &'a method_map,
parents: HashMap<ast::NodeId, ast::NodeId>,
external_exports: resolve::ExternalExports,
last_private_map: resolve::LastPrivateMap,
@ -325,7 +325,7 @@ enum PrivacyResult {
DisallowedBy(ast::NodeId),
}
impl<'self> PrivacyVisitor<'self> {
impl<'a> PrivacyVisitor<'a> {
// used when debugging
fn nodestr(&self, id: ast::NodeId) -> ~str {
ast_map::node_id_to_str(self.tcx.items, id, token::get_ident_interner())
@ -601,7 +601,7 @@ impl<'self> PrivacyVisitor<'self> {
}
}
impl<'self> Visitor<()> for PrivacyVisitor<'self> {
impl<'a> Visitor<()> for PrivacyVisitor<'a> {
fn visit_item(&mut self, item: @ast::item, _: ()) {
// Do not check privacy inside items with the resolve_unexported
// attribute. This is used for the test runner.

View File

@ -185,9 +185,9 @@ impl<T> ResolveResult<T> {
}
}
enum TypeParameters<'self> {
enum TypeParameters<'a> {
NoTypeParameters, //< No type parameters.
HasTypeParameters(&'self Generics, //< Type parameters.
HasTypeParameters(&'a Generics, //< Type parameters.
NodeId, //< ID of the enclosing item
// The index to start numbering the type parameters at.
@ -881,11 +881,11 @@ struct Resolver {
used_imports: HashSet<NodeId>,
}
struct BuildReducedGraphVisitor<'self> {
resolver: &'self mut Resolver,
struct BuildReducedGraphVisitor<'a> {
resolver: &'a mut Resolver,
}
impl<'self> Visitor<ReducedGraphParent> for BuildReducedGraphVisitor<'self> {
impl<'a> Visitor<ReducedGraphParent> for BuildReducedGraphVisitor<'a> {
fn visit_item(&mut self, item:@item, context:ReducedGraphParent) {
let p = self.resolver.build_reduced_graph_for_item(item, context);
@ -913,9 +913,9 @@ impl<'self> Visitor<ReducedGraphParent> for BuildReducedGraphVisitor<'self> {
}
struct UnusedImportCheckVisitor<'self> { resolver: &'self Resolver }
struct UnusedImportCheckVisitor<'a> { resolver: &'a Resolver }
impl<'self> Visitor<()> for UnusedImportCheckVisitor<'self> {
impl<'a> Visitor<()> for UnusedImportCheckVisitor<'a> {
fn visit_view_item(&mut self, vi:&view_item, _:()) {
self.resolver.check_for_item_unused_imports(vi);
visit::walk_view_item(self, vi, ());

View File

@ -36,10 +36,10 @@ struct LifetimeContext {
named_region_map: @mut NamedRegionMap,
}
enum ScopeChain<'self> {
ItemScope(&'self OptVec<ast::Lifetime>),
FnScope(ast::NodeId, &'self OptVec<ast::Lifetime>, &'self ScopeChain<'self>),
BlockScope(ast::NodeId, &'self ScopeChain<'self>),
enum ScopeChain<'a> {
ItemScope(&'a OptVec<ast::Lifetime>),
FnScope(ast::NodeId, &'a OptVec<ast::Lifetime>, &'a ScopeChain<'a>),
BlockScope(ast::NodeId, &'a ScopeChain<'a>),
RootScope
}
@ -55,10 +55,10 @@ pub fn crate(sess: session::Session,
ctxt.named_region_map
}
impl<'self> Visitor<&'self ScopeChain<'self>> for LifetimeContext {
impl<'a> Visitor<&'a ScopeChain<'a>> for LifetimeContext {
fn visit_item(&mut self,
item: @ast::item,
_: &'self ScopeChain<'self>) {
_: &'a ScopeChain<'a>) {
let scope = match item.node {
ast::item_fn(..) | // fn lifetimes get added in visit_fn below
ast::item_mod(..) |
@ -87,7 +87,7 @@ impl<'self> Visitor<&'self ScopeChain<'self>> for LifetimeContext {
b: ast::P<ast::Block>,
s: Span,
n: ast::NodeId,
scope: &'self ScopeChain<'self>) {
scope: &'a ScopeChain<'a>) {
match *fk {
visit::fk_item_fn(_, generics, _, _) |
visit::fk_method(_, generics, _) => {
@ -105,7 +105,7 @@ impl<'self> Visitor<&'self ScopeChain<'self>> for LifetimeContext {
fn visit_ty(&mut self,
ty: &ast::Ty,
scope: &'self ScopeChain<'self>) {
scope: &'a ScopeChain<'a>) {
match ty.node {
ast::ty_closure(@ast::TyClosure { lifetimes: ref lifetimes, .. }) |
ast::ty_bare_fn(@ast::TyBareFn { lifetimes: ref lifetimes, .. }) => {
@ -123,7 +123,7 @@ impl<'self> Visitor<&'self ScopeChain<'self>> for LifetimeContext {
fn visit_ty_method(&mut self,
m: &ast::TypeMethod,
scope: &'self ScopeChain<'self>) {
scope: &'a ScopeChain<'a>) {
let scope1 = FnScope(m.id, &m.generics.lifetimes, scope);
self.check_lifetime_names(&m.generics.lifetimes);
debug!("pushing fn scope id={} due to ty_method", m.id);
@ -133,7 +133,7 @@ impl<'self> Visitor<&'self ScopeChain<'self>> for LifetimeContext {
fn visit_block(&mut self,
b: ast::P<ast::Block>,
scope: &'self ScopeChain<'self>) {
scope: &'a ScopeChain<'a>) {
let scope1 = BlockScope(b.id, scope);
debug!("pushing block scope {}", b.id);
visit::walk_block(self, b, &scope1);
@ -142,7 +142,7 @@ impl<'self> Visitor<&'self ScopeChain<'self>> for LifetimeContext {
fn visit_lifetime_ref(&mut self,
lifetime_ref: &ast::Lifetime,
scope: &'self ScopeChain<'self>) {
scope: &'a ScopeChain<'a>) {
if lifetime_ref.ident == special_idents::statik {
self.insert_lifetime(lifetime_ref, ast::DefStaticRegion);
return;

View File

@ -45,12 +45,12 @@ impl Subst for ty::t {
}
}
struct SubstFolder<'self> {
struct SubstFolder<'a> {
tcx: ty::ctxt,
substs: &'self ty::substs
substs: &'a ty::substs
}
impl<'self> TypeFolder for SubstFolder<'self> {
impl<'a> TypeFolder for SubstFolder<'a> {
fn tcx(&self) -> ty::ctxt { self.tcx }
fn fold_region(&mut self, r: ty::Region) -> ty::Region {

View File

@ -394,9 +394,9 @@ struct BindingInfo {
type BindingsMap = HashMap<Ident, BindingInfo>;
#[deriving(Clone)]
struct ArmData<'self> {
struct ArmData<'a> {
bodycx: @mut Block,
arm: &'self ast::Arm,
arm: &'a ast::Arm,
bindings_map: @BindingsMap
}
@ -407,13 +407,13 @@ struct ArmData<'self> {
* these pointers are stored in llmatch variables just before executing `data` arm.
*/
#[deriving(Clone)]
struct Match<'self> {
struct Match<'a> {
pats: ~[@ast::Pat],
data: ArmData<'self>,
data: ArmData<'a>,
bound_ptrs: ~[(Ident, ValueRef)]
}
impl<'self> Repr for Match<'self> {
impl<'a> Repr for Match<'a> {
fn repr(&self, tcx: ty::ctxt) -> ~str {
if tcx.sess.verbose() {
// for many programs, this just take too long to serialize
@ -477,7 +477,7 @@ fn assert_is_binding_or_wild(bcx: @mut Block, p: @ast::Pat) {
}
}
type enter_pat<'self> = 'self |@ast::Pat| -> Option<~[@ast::Pat]>;
type enter_pat<'a> = 'a |@ast::Pat| -> Option<~[@ast::Pat]>;
fn enter_match<'r>(bcx: @mut Block,
dm: DefMap,

View File

@ -130,16 +130,16 @@ pub fn push_ctxt(s: &'static str) -> _InsnCtxt {
_InsnCtxt { _x: () }
}
struct StatRecorder<'self> {
struct StatRecorder<'a> {
ccx: @mut CrateContext,
name: &'self str,
name: &'a str,
start: u64,
istart: uint,
}
impl<'self> StatRecorder<'self> {
impl<'a> StatRecorder<'a> {
pub fn new(ccx: @mut CrateContext,
name: &'self str) -> StatRecorder<'self> {
name: &'a str) -> StatRecorder<'a> {
let start = if ccx.sess.trans_stats() {
time::precise_time_ns()
} else {
@ -156,7 +156,7 @@ impl<'self> StatRecorder<'self> {
}
#[unsafe_destructor]
impl<'self> Drop for StatRecorder<'self> {
impl<'a> Drop for StatRecorder<'a> {
fn drop(&mut self) {
if self.ccx.sess.trans_stats() {
let end = time::precise_time_ns();
@ -668,7 +668,7 @@ pub fn compare_scalar_values(cx: @mut Block,
}
}
pub type val_and_ty_fn<'self> = 'self |@mut Block, ValueRef, ty::t|
pub type val_and_ty_fn<'a> = 'a |@mut Block, ValueRef, ty::t|
-> @mut Block;
pub fn load_inbounds(cx: @mut Block, p: ValueRef, idxs: &[uint]) -> ValueRef {

View File

@ -14,7 +14,7 @@ use std::iter::{Filter, Map};
pub struct BasicBlock(BasicBlockRef);
pub type PredIterator<'self> = Map<'self, Value, BasicBlock, Filter<'self, Value, UserIterator>>;
pub type PredIterator<'a> = Map<'a, Value, BasicBlock, Filter<'a, Value, UserIterator>>;
/**
* Wrapper for LLVM BasicBlockRef

View File

@ -67,7 +67,7 @@ trait ClassList {
fn is_ret_bysret(&self) -> bool;
}
impl<'self> ClassList for &'self [RegClass] {
impl<'a> ClassList for &'a [RegClass] {
fn is_pass_byval(&self) -> bool {
if self.len() == 0 { return false; }

View File

@ -750,9 +750,9 @@ pub fn trans_call_inner(in_cx: @mut Block,
})
}
pub enum CallArgs<'self> {
ArgExprs(&'self [@ast::Expr]),
ArgVals(&'self [ValueRef])
pub enum CallArgs<'a> {
ArgExprs(&'a [@ast::Expr]),
ArgVals(&'a [ValueRef])
}
pub fn trans_args(cx: @mut Block,

View File

@ -214,12 +214,12 @@ struct FunctionDebugContextData {
source_locations_enabled: bool,
}
enum VariableAccess<'self> {
enum VariableAccess<'a> {
// The llptr given is an alloca containing the variable's value
DirectVariable { alloca: ValueRef },
// The llptr given is an alloca containing the start of some pointer chain leading to the
// variable's content.
IndirectVariable { alloca: ValueRef, address_operations: &'self [ValueRef] }
IndirectVariable { alloca: ValueRef, address_operations: &'a [ValueRef] }
}
enum VariableKind {

View File

@ -641,7 +641,7 @@ pub fn declare_tydesc(ccx: &mut CrateContext, t: ty::t) -> @mut tydesc_info {
return inf;
}
pub type glue_helper<'self> = 'self |@mut Block, ValueRef, ty::t|
pub type glue_helper<'a> = 'a |@mut Block, ValueRef, ty::t|
-> @mut Block;
pub fn declare_generic_glue(ccx: &mut CrateContext, t: ty::t, llfnty: Type,

View File

@ -16,7 +16,7 @@ pub trait LlvmRepr {
fn llrepr(&self, ccx: &CrateContext) -> ~str;
}
impl<'self, T:LlvmRepr> LlvmRepr for &'self [T] {
impl<'a, T:LlvmRepr> LlvmRepr for &'a [T] {
fn llrepr(&self, ccx: &CrateContext) -> ~str {
let reprs = self.map(|t| t.llrepr(ccx));
format!("[{}]", reprs.connect(","))

View File

@ -539,7 +539,7 @@ pub fn get_base_and_len(bcx: @mut Block, llval: ValueRef, vec_ty: ty::t) -> (Val
}
}
pub type iter_vec_block<'self> = 'self |@mut Block, ValueRef, ty::t|
pub type iter_vec_block<'a> = 'a |@mut Block, ValueRef, ty::t|
-> @mut Block;
pub fn iter_vec_loop(bcx: @mut Block,

View File

@ -1408,13 +1408,13 @@ pub fn subst_tps(tcx: ctxt, tps: &[t], self_ty_opt: Option<t>, typ: t) -> t {
let mut subst = TpsSubst { tcx: tcx, self_ty_opt: self_ty_opt, tps: tps };
return subst.fold_ty(typ);
struct TpsSubst<'self> {
struct TpsSubst<'a> {
tcx: ctxt,
self_ty_opt: Option<t>,
tps: &'self [t],
tps: &'a [t],
}
impl<'self> TypeFolder for TpsSubst<'self> {
impl<'a> TypeFolder for TpsSubst<'a> {
fn tcx(&self) -> ty::ctxt { self.tcx }
fn fold_ty(&mut self, t: ty::t) -> ty::t {

View File

@ -222,12 +222,12 @@ pub fn super_fold_trait_store<T:TypeFolder>(this: &mut T,
///////////////////////////////////////////////////////////////////////////
// Some sample folders
pub struct BottomUpFolder<'self> {
pub struct BottomUpFolder<'a> {
tcx: ty::ctxt,
fldop: 'self |ty::t| -> ty::t,
fldop: 'a |ty::t| -> ty::t,
}
impl<'self> TypeFolder for BottomUpFolder<'self> {
impl<'a> TypeFolder for BottomUpFolder<'a> {
fn tcx(&self) -> ty::ctxt { self.tcx }
fn fold_ty(&mut self, ty: ty::t) -> ty::t {
@ -239,17 +239,17 @@ impl<'self> TypeFolder for BottomUpFolder<'self> {
///////////////////////////////////////////////////////////////////////////
// Region folder
pub struct RegionFolder<'self> {
pub struct RegionFolder<'a> {
tcx: ty::ctxt,
fld_t: 'self |ty::t| -> ty::t,
fld_r: 'self |ty::Region| -> ty::Region,
fld_t: 'a |ty::t| -> ty::t,
fld_r: 'a |ty::Region| -> ty::Region,
}
impl<'self> RegionFolder<'self> {
impl<'a> RegionFolder<'a> {
pub fn general(tcx: ty::ctxt,
fld_r: 'self |ty::Region| -> ty::Region,
fld_t: 'self |ty::t| -> ty::t)
-> RegionFolder<'self> {
fld_r: 'a |ty::Region| -> ty::Region,
fld_t: 'a |ty::t| -> ty::t)
-> RegionFolder<'a> {
RegionFolder {
tcx: tcx,
fld_t: fld_t,
@ -257,8 +257,8 @@ impl<'self> RegionFolder<'self> {
}
}
pub fn regions(tcx: ty::ctxt, fld_r: 'self |ty::Region| -> ty::Region)
-> RegionFolder<'self> {
pub fn regions(tcx: ty::ctxt, fld_r: 'a |ty::Region| -> ty::Region)
-> RegionFolder<'a> {
fn noop(t: ty::t) -> ty::t { t }
RegionFolder {
@ -269,7 +269,7 @@ impl<'self> RegionFolder<'self> {
}
}
impl<'self> TypeFolder for RegionFolder<'self> {
impl<'a> TypeFolder for RegionFolder<'a> {
fn tcx(&self) -> ty::ctxt { self.tcx }
fn fold_ty(&mut self, ty: ty::t) -> ty::t {

View File

@ -40,7 +40,7 @@
* as it does not already appear in scope.
*
* Case (b) says that if you have a type:
* type foo<'self> = ...;
* type foo<'a> = ...;
* type bar = fn(&foo, &a.foo)
* The fully expanded version of type bar is:
* type bar = fn(&'foo &, &a.foo<'a>)

View File

@ -167,13 +167,13 @@ pub fn lookup(
return lcx.search(self_ty);
}
pub struct LookupContext<'self> {
pub struct LookupContext<'a> {
fcx: @mut FnCtxt,
expr: @ast::Expr,
self_expr: @ast::Expr,
callee_id: NodeId,
m_name: ast::Name,
supplied_tps: &'self [ty::t],
supplied_tps: &'a [ty::t],
impl_dups: @mut HashSet<DefId>,
inherent_candidates: @mut ~[Candidate],
extension_candidates: @mut ~[Candidate],
@ -208,7 +208,7 @@ enum RcvrMatchCondition {
RcvrMatchesIfSubtype(ty::t)
}
impl<'self> LookupContext<'self> {
impl<'a> LookupContext<'a> {
fn search(&self, self_ty: ty::t) -> Option<method_map_entry> {
let mut self_ty = self_ty;
let mut autoderefs = 0;

View File

@ -918,7 +918,7 @@ pub fn compare_impl_method(tcx: ty::ctxt,
// Create a substitution that maps the type parameters on the impl
// to themselves and which replace any references to bound regions
// in the self type with free regions. So, for example, if the
// impl type is "&'self str", then this would replace the self
// impl type is "&'a str", then this would replace the self
// type with a free region `self`.
let dummy_impl_tps: ~[ty::t] =
impl_generics.type_param_defs.iter().enumerate().

View File

@ -85,17 +85,17 @@ pub fn relate_nested_regions(tcx: ty::ctxt,
}
rr.fold_ty(ty);
struct RegionRelator<'self> {
struct RegionRelator<'a> {
tcx: ty::ctxt,
stack: ~[ty::Region],
relate_op: 'self |ty::Region, ty::Region|,
relate_op: 'a |ty::Region, ty::Region|,
}
// FIXME(#10151) -- Define more precisely when a region is
// considered "nested". Consider taking variance into account as
// well.
impl<'self> TypeFolder for RegionRelator<'self> {
impl<'a> TypeFolder for RegionRelator<'a> {
fn tcx(&self) -> ty::ctxt {
self.tcx
}
@ -124,7 +124,7 @@ pub fn relate_nested_regions(tcx: ty::ctxt,
}
}
impl<'self> RegionRelator<'self> {
impl<'a> RegionRelator<'a> {
fn relate(&mut self, r_sub: ty::Region) {
for &r in self.stack.iter() {
if !r.is_bound() && !r_sub.is_bound() {

View File

@ -69,12 +69,12 @@ pub struct LocationInfo {
/// A vtable context includes an inference context, a crate context, and a
/// callback function to call in case of type error.
pub struct VtableContext<'self> {
pub struct VtableContext<'a> {
infcx: @mut infer::InferCtxt,
param_env: &'self ty::ParameterEnvironment,
param_env: &'a ty::ParameterEnvironment,
}
impl<'self> VtableContext<'self> {
impl<'a> VtableContext<'a> {
pub fn tcx(&self) -> ty::ctxt { self.infcx.tcx }
}

View File

@ -51,8 +51,8 @@ pub trait LatticeValue {
fn glb(cf: &CombineFields, a: &Self, b: &Self) -> cres<Self>;
}
pub type LatticeOp<'self, T> =
'self |cf: &CombineFields, a: &T, b: &T| -> cres<T>;
pub type LatticeOp<'a, T> =
'a |cf: &CombineFields, a: &T, b: &T| -> cres<T>;
impl LatticeValue for ty::t {
fn sub(cf: &CombineFields, a: &ty::t, b: &ty::t) -> ures {
@ -405,7 +405,7 @@ pub fn super_lattice_tys<L:LatticeDir+TyLatticeDir+Combine>(this: &L,
}
}
pub type LatticeDirOp<'self, T> = 'self |a: &T, b: &T| -> cres<T>;
pub type LatticeDirOp<'a, T> = 'a |a: &T, b: &T| -> cres<T>;
#[deriving(Clone)]
pub enum LatticeVarResult<V,T> {

View File

@ -406,7 +406,7 @@ Now let's consider two more function types. Here, we assume that the
`self` lifetime is defined somewhere outside and hence is not a
lifetime parameter bound by the function type (it "appears free"):
fn<a>(&'a int) <: |&'self int|? (Yes, a => self)
fn<a>(&'a int) <: |&'a int|? (Yes, a => self)
This subtyping relation does in fact hold. To see why, you have to
consider what subtyping means. One way to look at `T1 <: T2` is to
@ -423,7 +423,7 @@ to the same thing: a function that accepts pointers with any lifetime
So, what if we reverse the order of the two function types, like this:
fn(&'self int) <: <a>|&'a int|? (No)
fn(&'a int) <: <a>|&'a int|? (No)
Does the subtyping relationship still hold? The answer of course is
no. In this case, the function accepts *only the lifetime `&self`*,
@ -491,12 +491,12 @@ So far we have encountered no error, so the subtype check succeeds.
Now let's look first at the third example, which was:
3. fn(&'self T) <: <b>|&'b T|? No!
3. fn(&'a T) <: <b>|&'b T|? No!
After steps 1 and 2 of the algorithm we will have replaced the types
like so:
3. fn(&'self T) <: |&'x T|?
3. fn(&'a T) <: |&'x T|?
This looks pretty much the same as before, except that on the LHS
`&self` was not bound, and hence was left as-is and not replaced with

View File

@ -218,7 +218,7 @@ pub fn infer_variance(tcx: ty::ctxt,
*
* Terms are structured as a straightforward tree. Rather than rely on
* GC, we allocate terms out of a bounded arena (the lifetime of this
* arena is the lifetime 'self that is threaded around).
* arena is the lifetime 'a that is threaded around).
*
* We assign a unique index to each type/region parameter whose variance
* is to be inferred. We refer to such variables as "inferreds". An
@ -226,17 +226,17 @@ pub fn infer_variance(tcx: ty::ctxt,
* a variable.
*/
type VarianceTermPtr<'self> = &'self VarianceTerm<'self>;
type VarianceTermPtr<'a> = &'a VarianceTerm<'a>;
struct InferredIndex(uint);
enum VarianceTerm<'self> {
enum VarianceTerm<'a> {
ConstantTerm(ty::Variance),
TransformTerm(VarianceTermPtr<'self>, VarianceTermPtr<'self>),
TransformTerm(VarianceTermPtr<'a>, VarianceTermPtr<'a>),
InferredTerm(InferredIndex),
}
impl<'self> ToStr for VarianceTerm<'self> {
impl<'a> ToStr for VarianceTerm<'a> {
fn to_str(&self) -> ~str {
match *self {
ConstantTerm(c1) => format!("{}", c1.to_str()),
@ -251,9 +251,9 @@ impl<'self> ToStr for VarianceTerm<'self> {
* The first pass over the crate simply builds up the set of inferreds.
*/
struct TermsContext<'self> {
struct TermsContext<'a> {
tcx: ty::ctxt,
arena: &'self Arena,
arena: &'a Arena,
empty_variances: @ty::ItemVariances,
@ -262,17 +262,17 @@ struct TermsContext<'self> {
inferred_map: HashMap<ast::NodeId, InferredIndex>,
// Maps from an InferredIndex to the info for that variable.
inferred_infos: ~[InferredInfo<'self>],
inferred_infos: ~[InferredInfo<'a>],
}
enum ParamKind { TypeParam, RegionParam, SelfParam }
struct InferredInfo<'self> {
struct InferredInfo<'a> {
item_id: ast::NodeId,
kind: ParamKind,
index: uint,
param_id: ast::NodeId,
term: VarianceTermPtr<'self>,
term: VarianceTermPtr<'a>,
}
fn determine_parameters_to_be_inferred<'a>(tcx: ty::ctxt,
@ -297,7 +297,7 @@ fn determine_parameters_to_be_inferred<'a>(tcx: ty::ctxt,
terms_cx
}
impl<'self> TermsContext<'self> {
impl<'a> TermsContext<'a> {
fn add_inferred(&mut self,
item_id: ast::NodeId,
kind: ParamKind,
@ -326,7 +326,7 @@ impl<'self> TermsContext<'self> {
}
}
impl<'self> Visitor<()> for TermsContext<'self> {
impl<'a> Visitor<()> for TermsContext<'a> {
fn visit_item(&mut self,
item: @ast::item,
(): ()) {
@ -392,23 +392,23 @@ impl<'self> Visitor<()> for TermsContext<'self> {
* We walk the set of items and, for each member, generate new constraints.
*/
struct ConstraintContext<'self> {
terms_cx: TermsContext<'self>,
struct ConstraintContext<'a> {
terms_cx: TermsContext<'a>,
// These are pointers to common `ConstantTerm` instances
covariant: VarianceTermPtr<'self>,
contravariant: VarianceTermPtr<'self>,
invariant: VarianceTermPtr<'self>,
bivariant: VarianceTermPtr<'self>,
covariant: VarianceTermPtr<'a>,
contravariant: VarianceTermPtr<'a>,
invariant: VarianceTermPtr<'a>,
bivariant: VarianceTermPtr<'a>,
constraints: ~[Constraint<'self>],
constraints: ~[Constraint<'a>],
}
/// Declares that the variable `decl_id` appears in a location with
/// variance `variance`.
struct Constraint<'self> {
struct Constraint<'a> {
inferred: InferredIndex,
variance: &'self VarianceTerm<'self>,
variance: &'a VarianceTerm<'a>,
}
fn add_constraints_from_crate<'a>(terms_cx: TermsContext<'a>,
@ -430,7 +430,7 @@ fn add_constraints_from_crate<'a>(terms_cx: TermsContext<'a>,
constraint_cx
}
impl<'self> Visitor<()> for ConstraintContext<'self> {
impl<'a> Visitor<()> for ConstraintContext<'a> {
fn visit_item(&mut self,
item: @ast::item,
(): ()) {
@ -506,7 +506,7 @@ impl<'self> Visitor<()> for ConstraintContext<'self> {
}
}
impl<'self> ConstraintContext<'self> {
impl<'a> ConstraintContext<'a> {
fn tcx(&self) -> ty::ctxt {
self.terms_cx.tcx
}
@ -529,7 +529,7 @@ impl<'self> ConstraintContext<'self> {
item_def_id: ast::DefId,
kind: ParamKind,
index: uint)
-> VarianceTermPtr<'self> {
-> VarianceTermPtr<'a> {
/*!
* Returns a variance term representing the declared variance of
* the type/region parameter with the given id.
@ -557,7 +557,7 @@ impl<'self> ConstraintContext<'self> {
fn add_constraint(&mut self,
index: InferredIndex,
variance: VarianceTermPtr<'self>) {
variance: VarianceTermPtr<'a>) {
debug!("add_constraint(index={}, variance={})",
*index, variance.to_str());
self.constraints.push(Constraint { inferred: index,
@ -565,18 +565,18 @@ impl<'self> ConstraintContext<'self> {
}
fn contravariant(&mut self,
variance: VarianceTermPtr<'self>)
-> VarianceTermPtr<'self> {
variance: VarianceTermPtr<'a>)
-> VarianceTermPtr<'a> {
self.xform(variance, self.contravariant)
}
fn invariant(&mut self,
variance: VarianceTermPtr<'self>)
-> VarianceTermPtr<'self> {
variance: VarianceTermPtr<'a>)
-> VarianceTermPtr<'a> {
self.xform(variance, self.invariant)
}
fn constant_term(&self, v: ty::Variance) -> VarianceTermPtr<'self> {
fn constant_term(&self, v: ty::Variance) -> VarianceTermPtr<'a> {
match v {
ty::Covariant => self.covariant,
ty::Invariant => self.invariant,
@ -586,9 +586,9 @@ impl<'self> ConstraintContext<'self> {
}
fn xform(&mut self,
v1: VarianceTermPtr<'self>,
v2: VarianceTermPtr<'self>)
-> VarianceTermPtr<'self> {
v1: VarianceTermPtr<'a>,
v2: VarianceTermPtr<'a>)
-> VarianceTermPtr<'a> {
match (*v1, *v2) {
(_, ConstantTerm(ty::Covariant)) => {
// Applying a "covariant" transform is always a no-op
@ -609,7 +609,7 @@ impl<'self> ConstraintContext<'self> {
/// in a context with ambient variance `variance`
fn add_constraints_from_ty(&mut self,
ty: ty::t,
variance: VarianceTermPtr<'self>) {
variance: VarianceTermPtr<'a>) {
debug!("add_constraints_from_ty(ty={})", ty.repr(self.tcx()));
match ty::get(ty).sty {
@ -704,7 +704,7 @@ impl<'self> ConstraintContext<'self> {
/// appearing in a context with ambient variance `variance`
fn add_constraints_from_vstore(&mut self,
vstore: ty::vstore,
variance: VarianceTermPtr<'self>) {
variance: VarianceTermPtr<'a>) {
match vstore {
ty::vstore_slice(r) => {
let contra = self.contravariant(variance);
@ -722,7 +722,7 @@ impl<'self> ConstraintContext<'self> {
def_id: ast::DefId,
generics: &ty::Generics,
substs: &ty::substs,
variance: VarianceTermPtr<'self>) {
variance: VarianceTermPtr<'a>) {
debug!("add_constraints_from_substs(def_id={:?})", def_id);
for (i, p) in generics.type_param_defs.iter().enumerate() {
@ -749,7 +749,7 @@ impl<'self> ConstraintContext<'self> {
/// `sig` appearing in a context with ambient variance `variance`
fn add_constraints_from_sig(&mut self,
sig: &ty::FnSig,
variance: VarianceTermPtr<'self>) {
variance: VarianceTermPtr<'a>) {
let contra = self.contravariant(variance);
for &input in sig.inputs.iter() {
self.add_constraints_from_ty(input, contra);
@ -761,7 +761,7 @@ impl<'self> ConstraintContext<'self> {
/// context with ambient variance `variance`
fn add_constraints_from_region(&mut self,
region: ty::Region,
variance: VarianceTermPtr<'self>) {
variance: VarianceTermPtr<'a>) {
match region {
ty::ReEarlyBound(param_id, _, _) => {
let index = self.inferred_index(param_id);
@ -790,7 +790,7 @@ impl<'self> ConstraintContext<'self> {
/// appearing in a context with ambient variance `variance`
fn add_constraints_from_mt(&mut self,
mt: &ty::mt,
variance: VarianceTermPtr<'self>) {
variance: VarianceTermPtr<'a>) {
match mt.mutbl {
ast::MutMutable => {
let invar = self.invariant(variance);
@ -813,9 +813,9 @@ impl<'self> ConstraintContext<'self> {
* inferred is then written into the `variance_map` in the tcx.
*/
struct SolveContext<'self> {
terms_cx: TermsContext<'self>,
constraints: ~[Constraint<'self>],
struct SolveContext<'a> {
terms_cx: TermsContext<'a>,
constraints: ~[Constraint<'a>],
// Maps from an InferredIndex to the inferred value for that variable.
solutions: ~[ty::Variance]
@ -833,7 +833,7 @@ fn solve_constraints(constraints_cx: ConstraintContext) {
solutions_cx.write();
}
impl<'self> SolveContext<'self> {
impl<'a> SolveContext<'a> {
fn solve(&mut self) {
// Propagate constraints until a fixed point is reached. Note
// that the maximum number of iterations is 2C where C is the
@ -925,7 +925,7 @@ impl<'self> SolveContext<'self> {
}
}
fn evaluate(&self, term: VarianceTermPtr<'self>) -> ty::Variance {
fn evaluate(&self, term: VarianceTermPtr<'a>) -> ty::Variance {
match *term {
ConstantTerm(v) => {
v

View File

@ -69,12 +69,12 @@ pub fn field_exprs(fields: ~[ast::Field]) -> ~[@ast::Expr] {
fields.map(|f| f.expr)
}
struct LoopQueryVisitor<'self> {
p: 'self |&ast::Expr_| -> bool,
struct LoopQueryVisitor<'a> {
p: 'a |&ast::Expr_| -> bool,
flag: bool,
}
impl<'self> Visitor<()> for LoopQueryVisitor<'self> {
impl<'a> Visitor<()> for LoopQueryVisitor<'a> {
fn visit_expr(&mut self, e: @ast::Expr, _: ()) {
self.flag |= (self.p)(&e.node);
match e.node {
@ -97,12 +97,12 @@ pub fn loop_query(b: ast::P<ast::Block>, p: |&ast::Expr_| -> bool) -> bool {
return v.flag;
}
struct BlockQueryVisitor<'self> {
p: 'self |@ast::Expr| -> bool,
struct BlockQueryVisitor<'a> {
p: 'a |@ast::Expr| -> bool,
flag: bool,
}
impl<'self> Visitor<()> for BlockQueryVisitor<'self> {
impl<'a> Visitor<()> for BlockQueryVisitor<'a> {
fn visit_expr(&mut self, e: @ast::Expr, _:()) {
self.flag |= (self.p)(e);
visit::walk_expr(self, e, ())

View File

@ -567,7 +567,7 @@ fn repr_vec<T:Repr>(tcx: ctxt, v: &[T]) -> ~str {
vec_map_to_str(v, |t| t.repr(tcx))
}
impl<'self, T:Repr> Repr for &'self [T] {
impl<'a, T:Repr> Repr for &'a [T] {
fn repr(&self, tcx: ctxt) -> ~str {
repr_vec(tcx, *self)
}

View File

@ -239,7 +239,7 @@ impl Clean<Attribute> for ast::Attribute {
}
// This is a rough approximation that gets us what we want.
impl<'self> attr::AttrMetaMethods for &'self Attribute {
impl<'a> attr::AttrMetaMethods for &'a Attribute {
fn name(&self) -> @str {
match **self {
Word(ref n) | List(ref n, _) | NameValue(ref n, _) =>

View File

@ -17,10 +17,10 @@ use std::fmt;
/// Wrapper struct which will emit the HTML-escaped version of the contained
/// string when passed to a format string.
pub struct Escape<'self>(&'self str);
pub struct Escape<'a>(&'a str);
impl<'self> fmt::Default for Escape<'self> {
fn fmt(s: &Escape<'self>, fmt: &mut fmt::Formatter) {
impl<'a> fmt::Default for Escape<'a> {
fn fmt(s: &Escape<'a>, fmt: &mut fmt::Formatter) {
// Because the internet is always right, turns out there's not that many
// characters to escape: http://stackoverflow.com/questions/7381974
let pile_o_bits = s.as_slice();

View File

@ -33,7 +33,7 @@ pub struct VisSpace(Option<ast::visibility>);
/// space after it.
pub struct PuritySpace(ast::purity);
/// Wrapper struct for properly emitting a method declaration.
pub struct Method<'self>(&'self clean::SelfTy, &'self clean::FnDecl);
pub struct Method<'a>(&'a clean::SelfTy, &'a clean::FnDecl);
impl fmt::Default for clean::Generics {
fn fmt(g: &clean::Generics, f: &mut fmt::Formatter) {
@ -393,8 +393,8 @@ impl fmt::Default for ~[clean::Argument] {
}
}
impl<'self> fmt::Default for Method<'self> {
fn fmt(m: &Method<'self>, f: &mut fmt::Formatter) {
impl<'a> fmt::Default for Method<'a> {
fn fmt(m: &Method<'a>, f: &mut fmt::Formatter) {
let Method(selfty, d) = *m;
let mut args = ~"";
match *selfty {

View File

@ -18,10 +18,10 @@ pub struct Layout {
crate: ~str,
}
pub struct Page<'self> {
title: &'self str,
ty: &'self str,
root_path: &'self str,
pub struct Page<'a> {
title: &'a str,
ty: &'a str,
root_path: &'a str,
}
pub fn render<T: fmt::Default, S: fmt::Default>(

View File

@ -30,7 +30,7 @@ use std::vec;
/// A unit struct which has the `fmt::Default` trait implemented. When
/// formatted, this struct will emit the HTML corresponding to the rendered
/// version of the contained markdown string.
pub struct Markdown<'self>(&'self str);
pub struct Markdown<'a>(&'a str);
static OUTPUT_UNIT: libc::size_t = 64;
static MKDEXT_NO_INTRA_EMPHASIS: libc::c_uint = 1 << 0;
@ -119,8 +119,8 @@ fn render(w: &mut io::Writer, s: &str) {
}
}
impl<'self> fmt::Default for Markdown<'self> {
fn fmt(md: &Markdown<'self>, fmt: &mut fmt::Formatter) {
impl<'a> fmt::Default for Markdown<'a> {
fn fmt(md: &Markdown<'a>, fmt: &mut fmt::Formatter) {
// This is actually common enough to special-case
if md.len() == 0 { return; }
render(fmt.buf, md.as_slice());

View File

@ -166,8 +166,8 @@ pub struct Cache {
}
/// Helper struct to render all source code to HTML pages
struct SourceCollector<'self> {
cx: &'self mut Context,
struct SourceCollector<'a> {
cx: &'a mut Context,
/// Processed source-file paths
seen: HashSet<~str>,
@ -177,13 +177,13 @@ struct SourceCollector<'self> {
/// Wrapper struct to render the source code of a file. This will do things like
/// adding line numbers to the left-hand side.
struct Source<'self>(&'self str);
struct Source<'a>(&'a str);
// Helper structs for rendering items/sidebars and carrying along contextual
// information
struct Item<'self> { cx: &'self Context, item: &'self clean::Item, }
struct Sidebar<'self> { cx: &'self Context, item: &'self clean::Item, }
struct Item<'a> { cx: &'a Context, item: &'a clean::Item, }
struct Sidebar<'a> { cx: &'a Context, item: &'a clean::Item, }
/// Struct representing one entry in the JS search index. These are all emitted
/// by hand to a large JS file at the end of cache-creation.
@ -380,7 +380,7 @@ fn extern_location(e: &clean::ExternalCrate, dst: &Path) -> ExternalLocation {
return Unknown;
}
impl<'self> DocFolder for SourceCollector<'self> {
impl<'a> DocFolder for SourceCollector<'a> {
fn fold_item(&mut self, item: clean::Item) -> Option<clean::Item> {
// If we're including source files, and we haven't seen this file yet,
// then we need to render it out to the filesystem
@ -406,7 +406,7 @@ impl<'self> DocFolder for SourceCollector<'self> {
}
}
impl<'self> SourceCollector<'self> {
impl<'a> SourceCollector<'a> {
/// Renders the given filename into its corresponding HTML source file.
fn emit_source(&mut self, filename: &str) -> bool {
let p = Path::new(filename);
@ -632,7 +632,7 @@ impl DocFolder for Cache {
}
}
impl<'self> Cache {
impl<'a> Cache {
fn generics(&mut self, generics: &clean::Generics) {
for typ in generics.type_params.iter() {
self.typarams.insert(typ.id, typ.name.clone());
@ -862,7 +862,7 @@ fn shortty(item: &clean::Item) -> &'static str {
}
}
impl<'self> Item<'self> {
impl<'a> Item<'a> {
fn ismodule(&self) -> bool {
match self.item.inner {
clean::ModuleItem(..) => true, _ => false
@ -870,8 +870,8 @@ impl<'self> Item<'self> {
}
}
impl<'self> fmt::Default for Item<'self> {
fn fmt(it: &Item<'self>, fmt: &mut fmt::Formatter) {
impl<'a> fmt::Default for Item<'a> {
fn fmt(it: &Item<'a>, fmt: &mut fmt::Formatter) {
match attr::find_stability(it.item.attrs.iter()) {
Some(stability) => {
write!(fmt.buf,
@ -1057,9 +1057,9 @@ fn item_module(w: &mut Writer, cx: &Context,
match myitem.inner {
clean::StaticItem(ref s) | clean::ForeignStaticItem(ref s) => {
struct Initializer<'self>(&'self str);
impl<'self> fmt::Default for Initializer<'self> {
fn fmt(s: &Initializer<'self>, f: &mut fmt::Formatter) {
struct Initializer<'a>(&'a str);
impl<'a> fmt::Default for Initializer<'a> {
fn fmt(s: &Initializer<'a>, f: &mut fmt::Formatter) {
if s.len() == 0 { return; }
write!(f.buf, "<code> = </code>");
let tag = if s.contains("\n") { "pre" } else { "code" };
@ -1563,8 +1563,8 @@ fn item_typedef(w: &mut Writer, it: &clean::Item, t: &clean::Typedef) {
document(w, it);
}
impl<'self> fmt::Default for Sidebar<'self> {
fn fmt(s: &Sidebar<'self>, fmt: &mut fmt::Formatter) {
impl<'a> fmt::Default for Sidebar<'a> {
fn fmt(s: &Sidebar<'a>, fmt: &mut fmt::Formatter) {
let cx = s.cx;
let it = s.item;
write!(fmt.buf, "<p class='location'>");
@ -1628,8 +1628,8 @@ fn build_sidebar(m: &clean::Module) -> HashMap<~str, ~[~str]> {
return map;
}
impl<'self> fmt::Default for Source<'self> {
fn fmt(s: &Source<'self>, fmt: &mut fmt::Formatter) {
impl<'a> fmt::Default for Source<'a> {
fn fmt(s: &Source<'a>, fmt: &mut fmt::Formatter) {
let lines = s.lines().len();
let mut cols = 0;
let mut tmp = lines;

View File

@ -76,12 +76,12 @@ pub fn strip_private(crate: clean::Crate) -> plugins::PluginResult {
(crate, None)
}
struct Stripper<'self> {
retained: &'self mut HashSet<ast::NodeId>,
exported_items: &'self HashSet<ast::NodeId>,
struct Stripper<'a> {
retained: &'a mut HashSet<ast::NodeId>,
exported_items: &'a HashSet<ast::NodeId>,
}
impl<'self> fold::DocFolder for Stripper<'self> {
impl<'a> fold::DocFolder for Stripper<'a> {
fn fold_item(&mut self, i: Item) -> Option<Item> {
match i.inner {
// These items can all get re-exported
@ -150,8 +150,8 @@ impl<'self> fold::DocFolder for Stripper<'self> {
}
// This stripper discards all private impls of traits
struct ImplStripper<'self>(&'self HashSet<ast::NodeId>);
impl<'self> fold::DocFolder for ImplStripper<'self> {
struct ImplStripper<'a>(&'a HashSet<ast::NodeId>);
impl<'a> fold::DocFolder for ImplStripper<'a> {
fn fold_item(&mut self, i: Item) -> Option<Item> {
match i.inner {
clean::ImplItem(ref imp) => {

View File

@ -83,9 +83,9 @@ pub mod usage;
/// A PkgScript represents user-supplied custom logic for
/// special build hooks. This only exists for packages with
/// an explicit package script.
struct PkgScript<'self> {
struct PkgScript<'a> {
/// Uniquely identifies this package
id: &'self PkgId,
id: &'a PkgId,
/// File path for the package script
input: Path,
/// The session to use *only* for compiling the custom
@ -99,7 +99,7 @@ struct PkgScript<'self> {
build_dir: Path
}
impl<'self> PkgScript<'self> {
impl<'a> PkgScript<'a> {
/// Given the path name for a package script
/// and a package ID, parse the package script into
/// a PkgScript that we can then execute

View File

@ -427,18 +427,18 @@ pub fn compile_crate(ctxt: &BuildContext,
compile_input(ctxt, exec, pkg_id, crate, workspace, deps, flags, cfgs, opt, what)
}
struct ViewItemVisitor<'self> {
context: &'self BuildContext,
parent: &'self PkgId,
parent_crate: &'self Path,
struct ViewItemVisitor<'a> {
context: &'a BuildContext,
parent: &'a PkgId,
parent_crate: &'a Path,
sess: session::Session,
exec: &'self mut workcache::Exec,
c: &'self ast::Crate,
save: 'self |Path|,
deps: &'self mut DepMap
exec: &'a mut workcache::Exec,
c: &'a ast::Crate,
save: 'a |Path|,
deps: &'a mut DepMap
}
impl<'self> Visitor<()> for ViewItemVisitor<'self> {
impl<'a> Visitor<()> for ViewItemVisitor<'a> {
fn visit_view_item(&mut self, vi: &ast::view_item, env: ()) {
use conditions::nonexistent_package::cond;

View File

@ -65,16 +65,16 @@ impl<T: 'static> Any for T {
///////////////////////////////////////////////////////////////////////////////
/// Extension methods for a referenced `Any` trait object
pub trait AnyRefExt<'self> {
pub trait AnyRefExt<'a> {
/// Returns true if the boxed type is the same as `T`
fn is<T: 'static>(self) -> bool;
/// Returns some reference to the boxed value if it is of type `T`, or
/// `None` if it isn't.
fn as_ref<T: 'static>(self) -> Option<&'self T>;
fn as_ref<T: 'static>(self) -> Option<&'a T>;
}
impl<'self> AnyRefExt<'self> for &'self Any {
impl<'a> AnyRefExt<'a> for &'a Any {
#[inline]
fn is<T: 'static>(self) -> bool {
// Get TypeId of the type this function is instantiated with
@ -88,7 +88,7 @@ impl<'self> AnyRefExt<'self> for &'self Any {
}
#[inline]
fn as_ref<T: 'static>(self) -> Option<&'self T> {
fn as_ref<T: 'static>(self) -> Option<&'a T> {
if self.is::<T>() {
Some(unsafe { transmute(self.as_void_ptr()) })
} else {
@ -98,15 +98,15 @@ impl<'self> AnyRefExt<'self> for &'self Any {
}
/// Extension methods for a mutable referenced `Any` trait object
pub trait AnyMutRefExt<'self> {
pub trait AnyMutRefExt<'a> {
/// Returns some mutable reference to the boxed value if it is of type `T`, or
/// `None` if it isn't.
fn as_mut<T: 'static>(self) -> Option<&'self mut T>;
fn as_mut<T: 'static>(self) -> Option<&'a mut T>;
}
impl<'self> AnyMutRefExt<'self> for &'self mut Any {
impl<'a> AnyMutRefExt<'a> for &'a mut Any {
#[inline]
fn as_mut<T: 'static>(self) -> Option<&'self mut T> {
fn as_mut<T: 'static>(self) -> Option<&'a mut T> {
if self.is::<T>() {
Some(unsafe { transmute(self.as_mut_void_ptr()) })
} else {
@ -149,7 +149,7 @@ impl ToStr for ~Any {
fn to_str(&self) -> ~str { ~"~Any" }
}
impl<'self> ToStr for &'self Any {
impl<'a> ToStr for &'a Any {
fn to_str(&self) -> ~str { ~"&Any" }
}

View File

@ -145,15 +145,15 @@ pub trait AsciiCast<T> {
fn is_ascii(&self) -> bool;
}
impl<'self> AsciiCast<&'self[Ascii]> for &'self [u8] {
impl<'a> AsciiCast<&'a[Ascii]> for &'a [u8] {
#[inline]
fn to_ascii(&self) -> &'self[Ascii] {
fn to_ascii(&self) -> &'a[Ascii] {
assert!(self.is_ascii());
unsafe {self.to_ascii_nocheck()}
}
#[inline]
unsafe fn to_ascii_nocheck(&self) -> &'self[Ascii] {
unsafe fn to_ascii_nocheck(&self) -> &'a[Ascii] {
cast::transmute(*self)
}
@ -166,15 +166,15 @@ impl<'self> AsciiCast<&'self[Ascii]> for &'self [u8] {
}
}
impl<'self> AsciiCast<&'self [Ascii]> for &'self str {
impl<'a> AsciiCast<&'a [Ascii]> for &'a str {
#[inline]
fn to_ascii(&self) -> &'self [Ascii] {
fn to_ascii(&self) -> &'a [Ascii] {
assert!(self.is_ascii());
unsafe { self.to_ascii_nocheck() }
}
#[inline]
unsafe fn to_ascii_nocheck(&self) -> &'self [Ascii] {
unsafe fn to_ascii_nocheck(&self) -> &'a [Ascii] {
cast::transmute(*self)
}
@ -272,7 +272,7 @@ pub trait AsciiStr {
fn eq_ignore_case(self, other: &[Ascii]) -> bool;
}
impl<'self> AsciiStr for &'self [Ascii] {
impl<'a> AsciiStr for &'a [Ascii] {
#[inline]
fn as_str_ascii<'a>(&'a self) -> &'a str {
unsafe { cast::transmute(*self) }
@ -351,7 +351,7 @@ pub trait StrAsciiExt {
fn eq_ignore_ascii_case(&self, other: &str) -> bool;
}
impl<'self> StrAsciiExt for &'self str {
impl<'a> StrAsciiExt for &'a str {
#[inline]
fn to_ascii_upper(&self) -> ~str {
unsafe { str_copy_map_bytes(*self, ASCII_UPPER_MAP) }

View File

@ -153,7 +153,7 @@ pub mod traits {
use ops::Add;
use vec::Vector;
impl<'self,T:Clone, V: Vector<T>> Add<V,@[T]> for @[T] {
impl<'a,T:Clone, V: Vector<T>> Add<V,@[T]> for @[T] {
#[inline]
fn add(&self, rhs: &V) -> @[T] {
append(*self, rhs.as_slice())

View File

@ -27,48 +27,48 @@ pub fn ref_eq<'a, 'b, T>(thing: &'a T, other: &'b T) -> bool {
// Equality for region pointers
#[cfg(not(test))]
impl<'self, T: Eq> Eq for &'self T {
impl<'a, T: Eq> Eq for &'a T {
#[inline]
fn eq(&self, other: & &'self T) -> bool {
fn eq(&self, other: & &'a T) -> bool {
*(*self) == *(*other)
}
#[inline]
fn ne(&self, other: & &'self T) -> bool {
fn ne(&self, other: & &'a T) -> bool {
*(*self) != *(*other)
}
}
// Comparison for region pointers
#[cfg(not(test))]
impl<'self, T: Ord> Ord for &'self T {
impl<'a, T: Ord> Ord for &'a T {
#[inline]
fn lt(&self, other: & &'self T) -> bool {
fn lt(&self, other: & &'a T) -> bool {
*(*self) < *(*other)
}
#[inline]
fn le(&self, other: & &'self T) -> bool {
fn le(&self, other: & &'a T) -> bool {
*(*self) <= *(*other)
}
#[inline]
fn ge(&self, other: & &'self T) -> bool {
fn ge(&self, other: & &'a T) -> bool {
*(*self) >= *(*other)
}
#[inline]
fn gt(&self, other: & &'self T) -> bool {
fn gt(&self, other: & &'a T) -> bool {
*(*self) > *(*other)
}
}
#[cfg(not(test))]
impl<'self, T: TotalOrd> TotalOrd for &'self T {
impl<'a, T: TotalOrd> TotalOrd for &'a T {
#[inline]
fn cmp(&self, other: & &'self T) -> Ordering { (**self).cmp(*other) }
fn cmp(&self, other: & &'a T) -> Ordering { (**self).cmp(*other) }
}
#[cfg(not(test))]
impl<'self, T: TotalEq> TotalEq for &'self T {
impl<'a, T: TotalEq> TotalEq for &'a T {
#[inline]
fn equals(&self, other: & &'self T) -> bool { (**self).equals(*other) }
fn equals(&self, other: & &'a T) -> bool { (**self).equals(*other) }
}
#[cfg(test)]

View File

@ -234,7 +234,7 @@ pub trait ToCStr {
}
}
impl<'self> ToCStr for &'self str {
impl<'a> ToCStr for &'a str {
#[inline]
fn to_c_str(&self) -> CString {
self.as_bytes().to_c_str()
@ -259,7 +259,7 @@ impl<'self> ToCStr for &'self str {
// The length of the stack allocated buffer for `vec.with_c_str()`
static BUF_LEN: uint = 128;
impl<'self> ToCStr for &'self [u8] {
impl<'a> ToCStr for &'a [u8] {
fn to_c_str(&self) -> CString {
let mut cs = unsafe { self.to_c_str_unchecked() };
cs.with_mut_ref(|buf| check_for_null(*self, buf));
@ -328,12 +328,12 @@ fn check_for_null(v: &[u8], buf: *mut libc::c_char) {
/// External iterator for a CString's bytes.
///
/// Use with the `std::iter` module.
pub struct CStringIterator<'self> {
pub struct CStringIterator<'a> {
priv ptr: *libc::c_char,
priv lifetime: &'self libc::c_char, // FIXME: #5922
priv lifetime: &'a libc::c_char, // FIXME: #5922
}
impl<'self> Iterator<libc::c_char> for CStringIterator<'self> {
impl<'a> Iterator<libc::c_char> for CStringIterator<'a> {
fn next(&mut self) -> Option<libc::c_char> {
let ch = unsafe { *self.ptr };
if ch == 0 {

View File

@ -15,7 +15,7 @@ use ptr;
use unstable::intrinsics::TyDesc;
use unstable::raw;
type DropGlue<'self> = 'self |**TyDesc, *c_void|;
type DropGlue<'a> = 'a |**TyDesc, *c_void|;
/*
* Box annihilation

View File

@ -64,22 +64,22 @@ impl<T> Clone for @mut T {
fn clone(&self) -> @mut T { *self }
}
impl<'self, T> Clone for &'self T {
impl<'a, T> Clone for &'a T {
/// Return a shallow copy of the borrowed pointer.
#[inline]
fn clone(&self) -> &'self T { *self }
fn clone(&self) -> &'a T { *self }
}
impl<'self, T> Clone for &'self [T] {
impl<'a, T> Clone for &'a [T] {
/// Return a shallow copy of the slice.
#[inline]
fn clone(&self) -> &'self [T] { *self }
fn clone(&self) -> &'a [T] { *self }
}
impl<'self> Clone for &'self str {
impl<'a> Clone for &'a str {
/// Return a shallow copy of the slice.
#[inline]
fn clone(&self) -> &'self str { *self }
fn clone(&self) -> &'a str { *self }
}
macro_rules! clone_impl(

View File

@ -162,12 +162,12 @@ impl<T, U> Condition<T, U> {
///
/// Normally this object is not dealt with directly, but rather it's directly
/// used after being returned from `trap`
pub struct Trap<'self, T, U> {
priv cond: &'self Condition<T, U>,
pub struct Trap<'a, T, U> {
priv cond: &'a Condition<T, U>,
priv handler: @Handler<T, U>
}
impl<'self, T, U> Trap<'self, T, U> {
impl<'a, T, U> Trap<'a, T, U> {
/// Execute a block of code with this trap handler's exception handler
/// registered.
///
@ -181,7 +181,7 @@ impl<'self, T, U> Trap<'self, T, U> {
/// });
/// assert_eq!(result, 7);
/// ```
pub fn inside<V>(&self, inner: 'self || -> V) -> V {
pub fn inside<V>(&self, inner: 'a || -> V) -> V {
let _g = Guard { cond: self.cond };
debug!("Trap: pushing handler to TLS");
local_data::set(self.cond.key, self.handler);
@ -191,7 +191,7 @@ impl<'self, T, U> Trap<'self, T, U> {
/// Returns a guard that will automatically reset the condition upon
/// exit of the scope. This is useful if you want to use conditions with
/// an RAII pattern.
pub fn guard(&self) -> Guard<'self,T,U> {
pub fn guard(&self) -> Guard<'a,T,U> {
let guard = Guard {
cond: self.cond
};
@ -204,12 +204,12 @@ impl<'self, T, U> Trap<'self, T, U> {
/// A guard that will automatically reset the condition handler upon exit of
/// the scope. This is useful if you want to use conditions with an RAII
/// pattern.
pub struct Guard<'self, T, U> {
priv cond: &'self Condition<T, U>
pub struct Guard<'a, T, U> {
priv cond: &'a Condition<T, U>
}
#[unsafe_destructor]
impl<'self, T, U> Drop for Guard<'self, T, U> {
impl<'a, T, U> Drop for Guard<'a, T, U> {
fn drop(&mut self) {
debug!("Guard: popping handler from TLS");
let curr = local_data::pop(self.cond.key);

View File

@ -476,7 +476,7 @@ pub mod rt;
/// A struct to represent both where to emit formatting strings to and how they
/// should be formatted. A mutable version of this is passed to all formatting
/// traits.
pub struct Formatter<'self> {
pub struct Formatter<'a> {
/// Flags for formatting (packed version of rt::Flag)
flags: uint,
/// Character used as 'fill' whenever there is alignment
@ -489,21 +489,21 @@ pub struct Formatter<'self> {
precision: Option<uint>,
/// Output buffer.
buf: &'self mut io::Writer,
priv curarg: vec::VecIterator<'self, Argument<'self>>,
priv args: &'self [Argument<'self>],
buf: &'a mut io::Writer,
priv curarg: vec::VecIterator<'a, Argument<'a>>,
priv args: &'a [Argument<'a>],
}
/// This struct represents the generic "argument" which is taken by the Xprintf
/// family of functions. It contains a function to format the given value. At
/// compile time it is ensured that the function and the value have the correct
/// types, and then this struct is used to canonicalize arguments to one type.
pub struct Argument<'self> {
pub struct Argument<'a> {
priv formatter: extern "Rust" fn(&util::Void, &mut Formatter),
priv value: &'self util::Void,
priv value: &'a util::Void,
}
impl<'self> Arguments<'self> {
impl<'a> Arguments<'a> {
/// When using the format_args!() macro, this function is used to generate the
/// Arguments structure. The compiler inserts an `unsafe` block to call this,
/// which is valid because the compiler performs all necessary validation to
@ -524,9 +524,9 @@ impl<'self> Arguments<'self> {
/// and pass it to a user-supplied function. The macro validates the format
/// string at compile-time so usage of the `write` and `format` functions can
/// be safely performed.
pub struct Arguments<'self> {
priv fmt: &'self [rt::Piece<'self>],
priv args: &'self [Argument<'self>],
pub struct Arguments<'a> {
priv fmt: &'a [rt::Piece<'a>],
priv args: &'a [Argument<'a>],
}
/// When a format is not otherwise specified, types are formatted by ascribing
@ -684,7 +684,7 @@ pub unsafe fn format_unsafe(fmt: &[rt::Piece], args: &[Argument]) -> ~str {
return str::from_utf8_owned(output.inner());
}
impl<'self> Formatter<'self> {
impl<'a> Formatter<'a> {
// First up is the collection of functions used to execute a format string
// at runtime. This consumes all of the compile-time statics generated by
@ -988,7 +988,7 @@ impl Bool for bool {
}
}
impl<'self, T: str::Str> String for T {
impl<'a, T: str::Str> String for T {
fn fmt(s: &T, f: &mut Formatter) {
f.pad(s.as_slice());
}
@ -1111,7 +1111,7 @@ impl<T> Pointer for *mut T {
// Implementation of Default for various core types
macro_rules! delegate(($ty:ty to $other:ident) => {
impl<'self> Default for $ty {
impl<'a> Default for $ty {
fn fmt(me: &$ty, f: &mut Formatter) {
$other::fmt(me, f)
}
@ -1129,7 +1129,7 @@ delegate!( u32 to Unsigned)
delegate!( u64 to Unsigned)
delegate!(@str to String)
delegate!(~str to String)
delegate!(&'self str to String)
delegate!(&'a str to String)
delegate!(bool to Bool)
delegate!(char to Char)
delegate!(f32 to Float)

View File

@ -24,31 +24,31 @@ condition! { pub parse_error: ~str -> (); }
/// A piece is a portion of the format string which represents the next part to
/// emit. These are emitted as a stream by the `Parser` class.
#[deriving(Eq)]
pub enum Piece<'self> {
pub enum Piece<'a> {
/// A literal string which should directly be emitted
String(&'self str),
String(&'a str),
/// A back-reference to whatever the current argument is. This is used
/// inside of a method call to refer back to the original argument.
CurrentArgument,
/// This describes that formatting should process the next argument (as
/// specified inside) for emission.
Argument(Argument<'self>),
Argument(Argument<'a>),
}
/// Representation of an argument specification.
#[deriving(Eq)]
pub struct Argument<'self> {
pub struct Argument<'a> {
/// Where to find this argument
position: Position<'self>,
position: Position<'a>,
/// How to format the argument
format: FormatSpec<'self>,
format: FormatSpec<'a>,
/// If not `None`, what method to invoke on the argument
method: Option<~Method<'self>>
method: Option<~Method<'a>>
}
/// Specification for the formatting of an argument in the format string.
#[deriving(Eq)]
pub struct FormatSpec<'self> {
pub struct FormatSpec<'a> {
/// Optionally specified character to fill alignment with
fill: Option<char>,
/// Optionally specified alignment
@ -56,20 +56,20 @@ pub struct FormatSpec<'self> {
/// Packed version of various flags provided
flags: uint,
/// The integer precision to use
precision: Count<'self>,
precision: Count<'a>,
/// The string width requested for the resulting format
width: Count<'self>,
width: Count<'a>,
/// The descriptor string representing the name of the format desired for
/// this argument, this can be empty or any number of characters, although
/// it is required to be one word.
ty: &'self str
ty: &'a str
}
/// Enum describing where an argument for a format can be located.
#[deriving(Eq)]
#[allow(missing_doc)]
pub enum Position<'self> {
ArgumentNext, ArgumentIs(uint), ArgumentNamed(&'self str)
pub enum Position<'a> {
ArgumentNext, ArgumentIs(uint), ArgumentNamed(&'a str)
}
/// Enum of alignments which are supported.
@ -92,9 +92,9 @@ pub enum Flag {
/// can reference either an argument or a literal integer.
#[deriving(Eq)]
#[allow(missing_doc)]
pub enum Count<'self> {
pub enum Count<'a> {
CountIs(uint),
CountIsName(&'self str),
CountIsName(&'a str),
CountIsParam(uint),
CountIsNextParam,
CountImplied,
@ -103,7 +103,7 @@ pub enum Count<'self> {
/// Enum describing all of the possible methods which the formatting language
/// currently supports.
#[deriving(Eq)]
pub enum Method<'self> {
pub enum Method<'a> {
/// A plural method selects on an integer over a list of either integer or
/// keyword-defined clauses. The meaning of the keywords is defined by the
/// current locale.
@ -113,23 +113,23 @@ pub enum Method<'self> {
///
/// The final element of this enum is the default "other" case which is
/// always required to be specified.
Plural(Option<uint>, ~[PluralArm<'self>], ~[Piece<'self>]),
Plural(Option<uint>, ~[PluralArm<'a>], ~[Piece<'a>]),
/// A select method selects over a string. Each arm is a different string
/// which can be selected for.
///
/// As with `Plural`, a default "other" case is required as well.
Select(~[SelectArm<'self>], ~[Piece<'self>]),
Select(~[SelectArm<'a>], ~[Piece<'a>]),
}
/// Structure representing one "arm" of the `plural` function.
#[deriving(Eq)]
pub struct PluralArm<'self> {
pub struct PluralArm<'a> {
/// A selector can either be specified by a keyword or with an integer
/// literal.
selector: Either<PluralKeyword, uint>,
/// Array of pieces which are the format of this arm
result: ~[Piece<'self>],
result: ~[Piece<'a>],
}
/// Enum of the 5 CLDR plural keywords. There is one more, "other", but that is
@ -144,11 +144,11 @@ pub enum PluralKeyword {
/// Structure representing one "arm" of the `select` function.
#[deriving(Eq)]
pub struct SelectArm<'self> {
pub struct SelectArm<'a> {
/// String selector which guards this arm
selector: &'self str,
selector: &'a str,
/// Array of pieces which are the format of this arm
result: ~[Piece<'self>],
result: ~[Piece<'a>],
}
/// The parser structure for interpreting the input format string. This is
@ -157,14 +157,14 @@ pub struct SelectArm<'self> {
///
/// This is a recursive-descent parser for the sake of simplicity, and if
/// necessary there's probably lots of room for improvement performance-wise.
pub struct Parser<'self> {
priv input: &'self str,
priv cur: str::CharOffsetIterator<'self>,
pub struct Parser<'a> {
priv input: &'a str,
priv cur: str::CharOffsetIterator<'a>,
priv depth: uint,
}
impl<'self> Iterator<Piece<'self>> for Parser<'self> {
fn next(&mut self) -> Option<Piece<'self>> {
impl<'a> Iterator<Piece<'a>> for Parser<'a> {
fn next(&mut self) -> Option<Piece<'a>> {
match self.cur.clone().next() {
Some((_, '#')) => { self.cur.next(); Some(CurrentArgument) }
Some((_, '{')) => {
@ -191,7 +191,7 @@ impl<'self> Iterator<Piece<'self>> for Parser<'self> {
}
}
impl<'self> Parser<'self> {
impl<'a> Parser<'a> {
/// Creates a new parser for the given format string
pub fn new<'a>(s: &'a str) -> Parser<'a> {
Parser {
@ -276,7 +276,7 @@ impl<'self> Parser<'self> {
/// Parses all of a string which is to be considered a "raw literal" in a
/// format string. This is everything outside of the braces.
fn string(&mut self, start: uint) -> &'self str {
fn string(&mut self, start: uint) -> &'a str {
loop {
// we may not consume the character, so clone the iterator
match self.cur.clone().next() {
@ -295,7 +295,7 @@ impl<'self> Parser<'self> {
/// Parses an Argument structure, or what's contained within braces inside
/// the format string
fn argument(&mut self) -> Argument<'self> {
fn argument(&mut self) -> Argument<'a> {
Argument {
position: self.position(),
format: self.format(),
@ -305,7 +305,7 @@ impl<'self> Parser<'self> {
/// Parses a positional argument for a format. This could either be an
/// integer index of an argument, a named argument, or a blank string.
fn position(&mut self) -> Position<'self> {
fn position(&mut self) -> Position<'a> {
match self.integer() {
Some(i) => { ArgumentIs(i) }
None => {
@ -321,7 +321,7 @@ impl<'self> Parser<'self> {
/// Parses a format specifier at the current position, returning all of the
/// relevant information in the FormatSpec struct.
fn format(&mut self) -> FormatSpec<'self> {
fn format(&mut self) -> FormatSpec<'a> {
let mut spec = FormatSpec {
fill: None,
align: AlignUnknown,
@ -396,7 +396,7 @@ impl<'self> Parser<'self> {
/// Parses a method to be applied to the previously specified argument and
/// its format. The two current supported methods are 'plural' and 'select'
fn method(&mut self) -> Option<~Method<'self>> {
fn method(&mut self) -> Option<~Method<'a>> {
if !self.wsconsume(',') {
return None;
}
@ -422,7 +422,7 @@ impl<'self> Parser<'self> {
}
/// Parses a 'select' statement (after the initial 'select' word)
fn select(&mut self) -> ~Method<'self> {
fn select(&mut self) -> ~Method<'a> {
let mut other = None;
let mut arms = ~[];
// Consume arms one at a time
@ -464,7 +464,7 @@ impl<'self> Parser<'self> {
}
/// Parses a 'plural' statement (after the initial 'plural' word)
fn plural(&mut self) -> ~Method<'self> {
fn plural(&mut self) -> ~Method<'a> {
let mut offset = None;
let mut other = None;
let mut arms = ~[];
@ -564,7 +564,7 @@ impl<'self> Parser<'self> {
/// Parses a Count parameter at the current position. This does not check
/// for 'CountIsNextParam' because that is only used in precision, not
/// width.
fn count(&mut self) -> Count<'self> {
fn count(&mut self) -> Count<'a> {
match self.integer() {
Some(i) => {
if self.consume('$') {
@ -591,7 +591,7 @@ impl<'self> Parser<'self> {
/// Parses a word starting at the current position. A word is considered to
/// be an alphabetic character followed by any number of alphanumeric
/// characters.
fn word(&mut self) -> &'self str {
fn word(&mut self) -> &'a str {
let start = match self.cur.clone().next() {
Some((pos, c)) if char::is_XID_start(c) => {
self.cur.next();

View File

@ -21,17 +21,17 @@ use either::Either;
use fmt::parse;
use option::Option;
pub enum Piece<'self> {
String(&'self str),
pub enum Piece<'a> {
String(&'a str),
// FIXME(#8259): this shouldn't require the unit-value here
CurrentArgument(()),
Argument(Argument<'self>),
Argument(Argument<'a>),
}
pub struct Argument<'self> {
pub struct Argument<'a> {
position: Position,
format: FormatSpec,
method: Option<&'self Method<'self>>
method: Option<&'a Method<'a>>
}
pub struct FormatSpec {
@ -50,17 +50,17 @@ pub enum Position {
ArgumentNext, ArgumentIs(uint)
}
pub enum Method<'self> {
Plural(Option<uint>, &'self [PluralArm<'self>], &'self [Piece<'self>]),
Select(&'self [SelectArm<'self>], &'self [Piece<'self>]),
pub enum Method<'a> {
Plural(Option<uint>, &'a [PluralArm<'a>], &'a [Piece<'a>]),
Select(&'a [SelectArm<'a>], &'a [Piece<'a>]),
}
pub struct PluralArm<'self> {
pub struct PluralArm<'a> {
selector: Either<parse::PluralKeyword, uint>,
result: &'self [Piece<'self>],
result: &'a [Piece<'a>],
}
pub struct SelectArm<'self> {
selector: &'self str,
result: &'self [Piece<'self>],
pub struct SelectArm<'a> {
selector: &'a str,
result: &'a [Piece<'a>],
}

View File

@ -305,8 +305,8 @@ mod tests {
use prelude::*;
// Hash just the bytes of the slice, without length prefix
struct Bytes<'self>(&'self [u8]);
impl<'self> IterBytes for Bytes<'self> {
struct Bytes<'a>(&'a [u8]);
impl<'a> IterBytes for Bytes<'a> {
fn iter_bytes(&self, _lsb0: bool, f: |&[u8]| -> bool) -> bool {
f(**self)
}

View File

@ -521,13 +521,13 @@ impl<K:Hash + Eq + Clone,V:Clone> Clone for HashMap<K,V> {
/// HashMap iterator
#[deriving(Clone)]
pub struct HashMapIterator<'self, K, V> {
priv iter: vec::VecIterator<'self, Option<Bucket<K, V>>>,
pub struct HashMapIterator<'a, K, V> {
priv iter: vec::VecIterator<'a, Option<Bucket<K, V>>>,
}
/// HashMap mutable values iterator
pub struct HashMapMutIterator<'self, K, V> {
priv iter: vec::VecMutIterator<'self, Option<Bucket<K, V>>>,
pub struct HashMapMutIterator<'a, K, V> {
priv iter: vec::VecMutIterator<'a, Option<Bucket<K, V>>>,
}
/// HashMap move iterator
@ -537,8 +537,8 @@ pub struct HashMapMoveIterator<K, V> {
/// HashSet iterator
#[deriving(Clone)]
pub struct HashSetIterator<'self, K> {
priv iter: vec::VecIterator<'self, Option<Bucket<K, ()>>>,
pub struct HashSetIterator<'a, K> {
priv iter: vec::VecIterator<'a, Option<Bucket<K, ()>>>,
}
/// HashSet move iterator
@ -546,9 +546,9 @@ pub struct HashSetMoveIterator<K> {
priv iter: vec::MoveRevIterator<Option<Bucket<K, ()>>>,
}
impl<'self, K, V> Iterator<(&'self K, &'self V)> for HashMapIterator<'self, K, V> {
impl<'a, K, V> Iterator<(&'a K, &'a V)> for HashMapIterator<'a, K, V> {
#[inline]
fn next(&mut self) -> Option<(&'self K, &'self V)> {
fn next(&mut self) -> Option<(&'a K, &'a V)> {
for elt in self.iter {
match elt {
&Some(ref bucket) => return Some((&bucket.key, &bucket.value)),
@ -559,9 +559,9 @@ impl<'self, K, V> Iterator<(&'self K, &'self V)> for HashMapIterator<'self, K, V
}
}
impl<'self, K, V> Iterator<(&'self K, &'self mut V)> for HashMapMutIterator<'self, K, V> {
impl<'a, K, V> Iterator<(&'a K, &'a mut V)> for HashMapMutIterator<'a, K, V> {
#[inline]
fn next(&mut self) -> Option<(&'self K, &'self mut V)> {
fn next(&mut self) -> Option<(&'a K, &'a mut V)> {
for elt in self.iter {
match elt {
&Some(ref mut bucket) => return Some((&bucket.key, &mut bucket.value)),
@ -585,9 +585,9 @@ impl<K, V> Iterator<(K, V)> for HashMapMoveIterator<K, V> {
}
}
impl<'self, K> Iterator<&'self K> for HashSetIterator<'self, K> {
impl<'a, K> Iterator<&'a K> for HashSetIterator<'a, K> {
#[inline]
fn next(&mut self) -> Option<&'self K> {
fn next(&mut self) -> Option<&'a K> {
for elt in self.iter {
match elt {
&Some(ref bucket) => return Some(&bucket.key),
@ -798,9 +798,9 @@ impl<K: Eq + Hash> Default for HashSet<K> {
// `Repeat` is used to feed the filter closure an explicit capture
// of a reference to the other set
/// Set operations iterator
pub type SetAlgebraIter<'self, T> =
FilterMap<'static,(&'self HashSet<T>, &'self T), &'self T,
Zip<Repeat<&'self HashSet<T>>,HashSetIterator<'self,T>>>;
pub type SetAlgebraIter<'a, T> =
FilterMap<'static,(&'a HashSet<T>, &'a T), &'a T,
Zip<Repeat<&'a HashSet<T>>,HashSetIterator<'a,T>>>;
#[cfg(test)]

View File

@ -148,12 +148,12 @@ impl Decorator<~[u8]> for MemReader {
///
/// If a write will not fit in the buffer, it raises the `io_error`
/// condition and does not write any data.
pub struct BufWriter<'self> {
priv buf: &'self mut [u8],
pub struct BufWriter<'a> {
priv buf: &'a mut [u8],
priv pos: uint
}
impl<'self> BufWriter<'self> {
impl<'a> BufWriter<'a> {
pub fn new<'a>(buf: &'a mut [u8]) -> BufWriter<'a> {
BufWriter {
buf: buf,
@ -162,7 +162,7 @@ impl<'self> BufWriter<'self> {
}
}
impl<'self> Writer for BufWriter<'self> {
impl<'a> Writer for BufWriter<'a> {
fn write(&mut self, buf: &[u8]) {
// raises a condition if the entire write does not fit in the buffer
let max_size = self.buf.len();
@ -182,7 +182,7 @@ impl<'self> Writer for BufWriter<'self> {
}
// FIXME(#10432)
impl<'self> Seek for BufWriter<'self> {
impl<'a> Seek for BufWriter<'a> {
fn tell(&self) -> u64 { self.pos as u64 }
fn seek(&mut self, pos: i64, style: SeekStyle) {
@ -199,12 +199,12 @@ impl<'self> Seek for BufWriter<'self> {
/// Reads from a fixed-size byte slice
pub struct BufReader<'self> {
priv buf: &'self [u8],
pub struct BufReader<'a> {
priv buf: &'a [u8],
priv pos: uint
}
impl<'self> BufReader<'self> {
impl<'a> BufReader<'a> {
pub fn new<'a>(buf: &'a [u8]) -> BufReader<'a> {
BufReader {
buf: buf,
@ -213,7 +213,7 @@ impl<'self> BufReader<'self> {
}
}
impl<'self> Reader for BufReader<'self> {
impl<'a> Reader for BufReader<'a> {
fn read(&mut self, buf: &mut [u8]) -> Option<uint> {
{ if self.eof() { return None; } }
@ -233,13 +233,13 @@ impl<'self> Reader for BufReader<'self> {
fn eof(&mut self) -> bool { self.pos == self.buf.len() }
}
impl<'self> Seek for BufReader<'self> {
impl<'a> Seek for BufReader<'a> {
fn tell(&self) -> u64 { self.pos as u64 }
fn seek(&mut self, _pos: i64, _style: SeekStyle) { fail!() }
}
impl<'self> Buffer for BufReader<'self> {
impl<'a> Buffer for BufReader<'a> {
fn fill<'a>(&'a mut self) -> &'a [u8] { self.buf.slice_from(self.pos) }
fn consume(&mut self, amt: uint) { self.pos += amt; }
}

View File

@ -811,7 +811,7 @@ impl Reader for ~Reader {
fn eof(&mut self) -> bool { self.eof() }
}
impl<'self> Reader for &'self mut Reader {
impl<'a> Reader for &'a mut Reader {
fn read(&mut self, buf: &mut [u8]) -> Option<uint> { self.read(buf) }
fn eof(&mut self) -> bool { self.eof() }
}
@ -972,7 +972,7 @@ impl Writer for ~Writer {
fn flush(&mut self) { self.flush() }
}
impl<'self> Writer for &'self mut Writer {
impl<'a> Writer for &'a mut Writer {
fn write(&mut self, buf: &[u8]) { self.write(buf) }
fn flush(&mut self) { self.flush() }
}
@ -1184,11 +1184,11 @@ pub trait Acceptor<T> {
/// The Some contains another Option representing whether the connection attempt was succesful.
/// A successful connection will be wrapped in Some.
/// A failed connection is represented as a None and raises a condition.
struct IncomingIterator<'self, A> {
priv inc: &'self mut A,
struct IncomingIterator<'a, A> {
priv inc: &'a mut A,
}
impl<'self, T, A: Acceptor<T>> Iterator<Option<T>> for IncomingIterator<'self, A> {
impl<'a, T, A: Acceptor<T>> Iterator<Option<T>> for IncomingIterator<'a, A> {
fn next(&mut self) -> Option<Option<T>> {
Some(self.inc.accept())
}

View File

@ -62,14 +62,14 @@ impl ToStr for SocketAddr {
}
}
struct Parser<'self> {
struct Parser<'a> {
// parsing as ASCII, so can use byte array
s: &'self [u8],
s: &'a [u8],
pos: uint,
}
impl<'self> Parser<'self> {
fn new(s: &'self str) -> Parser<'self> {
impl<'a> Parser<'a> {
fn new(s: &'a str) -> Parser<'a> {
Parser {
s: s.as_bytes(),
pos: 0,

View File

@ -33,20 +33,20 @@ pub struct Process {
/// This configuration describes how a new process should be spawned. This is
/// translated to libuv's own configuration
pub struct ProcessConfig<'self> {
pub struct ProcessConfig<'a> {
/// Path to the program to run
program: &'self str,
program: &'a str,
/// Arguments to pass to the program (doesn't include the program itself)
args: &'self [~str],
args: &'a [~str],
/// Optional environment to specify for the program. If this is None, then
/// it will inherit the current process's environment.
env: Option<&'self [(~str, ~str)]>,
env: Option<&'a [(~str, ~str)]>,
/// Optional working directory for the new process. If this is None, then
/// the current directory of the running process is inherited.
cwd: Option<&'self str>,
cwd: Option<&'a str>,
/// Any number of streams/file descriptors/pipes may be attached to this
/// process. This list enumerates the file descriptors and such for the
@ -58,7 +58,7 @@ pub struct ProcessConfig<'self> {
/// 0 - stdin
/// 1 - stdout
/// 2 - stderr
io: &'self [StdioContainer]
io: &'a [StdioContainer]
}
/// Describes what to do with a standard io stream for a child process.

View File

@ -691,7 +691,7 @@ pub trait MutableDoubleEndedIterator {
fn reverse_(&mut self);
}
impl<'self, A, T: DoubleEndedIterator<&'self mut A>> MutableDoubleEndedIterator for T {
impl<'a, A, T: DoubleEndedIterator<&'a mut A>> MutableDoubleEndedIterator for T {
// FIXME: #5898: should be called `reverse`
/// Use an iterator to reverse a container in-place
fn reverse_(&mut self) {
@ -754,9 +754,9 @@ pub trait ExactSize<A> : DoubleEndedIterator<A> {
// All adaptors that preserve the size of the wrapped iterator are fine
// Adaptors that may overflow in `size_hint` are not, i.e. `Chain`.
impl<A, T: ExactSize<A>> ExactSize<(uint, A)> for Enumerate<T> {}
impl<'self, A, T: ExactSize<A>> ExactSize<A> for Inspect<'self, A, T> {}
impl<'a, A, T: ExactSize<A>> ExactSize<A> for Inspect<'a, A, T> {}
impl<A, T: ExactSize<A>> ExactSize<A> for Invert<T> {}
impl<'self, A, B, T: ExactSize<A>> ExactSize<B> for Map<'self, A, B, T> {}
impl<'a, A, B, T: ExactSize<A>> ExactSize<B> for Map<'a, A, B, T> {}
impl<A, B, T: ExactSize<A>, U: ExactSize<B>> ExactSize<(A, B)> for Zip<T, U> {}
/// An double-ended iterator with the direction inverted
@ -788,17 +788,17 @@ impl<A, T: DoubleEndedIterator<A> + RandomAccessIterator<A>> RandomAccessIterato
}
/// A mutable reference to an iterator
pub struct ByRef<'self, T> {
priv iter: &'self mut T
pub struct ByRef<'a, T> {
priv iter: &'a mut T
}
impl<'self, A, T: Iterator<A>> Iterator<A> for ByRef<'self, T> {
impl<'a, A, T: Iterator<A>> Iterator<A> for ByRef<'a, T> {
#[inline]
fn next(&mut self) -> Option<A> { self.iter.next() }
// FIXME: #9629 we cannot implement &self methods like size_hint on ByRef
}
impl<'self, A, T: DoubleEndedIterator<A>> DoubleEndedIterator<A> for ByRef<'self, T> {
impl<'a, A, T: DoubleEndedIterator<A>> DoubleEndedIterator<A> for ByRef<'a, T> {
#[inline]
fn next_back(&mut self) -> Option<A> { self.iter.next_back() }
}
@ -1121,12 +1121,12 @@ RandomAccessIterator<(A, B)> for Zip<T, U> {
}
/// An iterator which maps the values of `iter` with `f`
pub struct Map<'self, A, B, T> {
pub struct Map<'a, A, B, T> {
priv iter: T,
priv f: 'self |A| -> B
priv f: 'a |A| -> B
}
impl<'self, A, B, T> Map<'self, A, B, T> {
impl<'a, A, B, T> Map<'a, A, B, T> {
#[inline]
fn do_map(&self, elt: Option<A>) -> Option<B> {
match elt {
@ -1136,7 +1136,7 @@ impl<'self, A, B, T> Map<'self, A, B, T> {
}
}
impl<'self, A, B, T: Iterator<A>> Iterator<B> for Map<'self, A, B, T> {
impl<'a, A, B, T: Iterator<A>> Iterator<B> for Map<'a, A, B, T> {
#[inline]
fn next(&mut self) -> Option<B> {
let next = self.iter.next();
@ -1149,7 +1149,7 @@ impl<'self, A, B, T: Iterator<A>> Iterator<B> for Map<'self, A, B, T> {
}
}
impl<'self, A, B, T: DoubleEndedIterator<A>> DoubleEndedIterator<B> for Map<'self, A, B, T> {
impl<'a, A, B, T: DoubleEndedIterator<A>> DoubleEndedIterator<B> for Map<'a, A, B, T> {
#[inline]
fn next_back(&mut self) -> Option<B> {
let next = self.iter.next_back();
@ -1157,7 +1157,7 @@ impl<'self, A, B, T: DoubleEndedIterator<A>> DoubleEndedIterator<B> for Map<'sel
}
}
impl<'self, A, B, T: RandomAccessIterator<A>> RandomAccessIterator<B> for Map<'self, A, B, T> {
impl<'a, A, B, T: RandomAccessIterator<A>> RandomAccessIterator<B> for Map<'a, A, B, T> {
#[inline]
fn indexable(&self) -> uint {
self.iter.indexable()
@ -1170,12 +1170,12 @@ impl<'self, A, B, T: RandomAccessIterator<A>> RandomAccessIterator<B> for Map<'s
}
/// An iterator which filters the elements of `iter` with `predicate`
pub struct Filter<'self, A, T> {
pub struct Filter<'a, A, T> {
priv iter: T,
priv predicate: 'self |&A| -> bool
priv predicate: 'a |&A| -> bool
}
impl<'self, A, T: Iterator<A>> Iterator<A> for Filter<'self, A, T> {
impl<'a, A, T: Iterator<A>> Iterator<A> for Filter<'a, A, T> {
#[inline]
fn next(&mut self) -> Option<A> {
for x in self.iter {
@ -1195,7 +1195,7 @@ impl<'self, A, T: Iterator<A>> Iterator<A> for Filter<'self, A, T> {
}
}
impl<'self, A, T: DoubleEndedIterator<A>> DoubleEndedIterator<A> for Filter<'self, A, T> {
impl<'a, A, T: DoubleEndedIterator<A>> DoubleEndedIterator<A> for Filter<'a, A, T> {
#[inline]
fn next_back(&mut self) -> Option<A> {
loop {
@ -1214,12 +1214,12 @@ impl<'self, A, T: DoubleEndedIterator<A>> DoubleEndedIterator<A> for Filter<'sel
}
/// An iterator which uses `f` to both filter and map elements from `iter`
pub struct FilterMap<'self, A, B, T> {
pub struct FilterMap<'a, A, B, T> {
priv iter: T,
priv f: 'self |A| -> Option<B>
priv f: 'a |A| -> Option<B>
}
impl<'self, A, B, T: Iterator<A>> Iterator<B> for FilterMap<'self, A, B, T> {
impl<'a, A, B, T: Iterator<A>> Iterator<B> for FilterMap<'a, A, B, T> {
#[inline]
fn next(&mut self) -> Option<B> {
for x in self.iter {
@ -1238,8 +1238,8 @@ impl<'self, A, B, T: Iterator<A>> Iterator<B> for FilterMap<'self, A, B, T> {
}
}
impl<'self, A, B, T: DoubleEndedIterator<A>> DoubleEndedIterator<B>
for FilterMap<'self, A, B, T> {
impl<'a, A, B, T: DoubleEndedIterator<A>> DoubleEndedIterator<B>
for FilterMap<'a, A, B, T> {
#[inline]
fn next_back(&mut self) -> Option<B> {
loop {
@ -1340,11 +1340,11 @@ impl<A, T: Iterator<A>> Iterator<A> for Peekable<A, T> {
}
}
impl<'self, A, T: Iterator<A>> Peekable<A, T> {
impl<'a, A, T: Iterator<A>> Peekable<A, T> {
/// Return a reference to the next element of the iterator with out advancing it,
/// or None if the iterator is exhausted.
#[inline]
pub fn peek(&'self mut self) -> Option<&'self A> {
pub fn peek(&'a mut self) -> Option<&'a A> {
if self.peeked.is_none() {
self.peeked = self.iter.next();
}
@ -1356,13 +1356,13 @@ impl<'self, A, T: Iterator<A>> Peekable<A, T> {
}
/// An iterator which rejects elements while `predicate` is true
pub struct SkipWhile<'self, A, T> {
pub struct SkipWhile<'a, A, T> {
priv iter: T,
priv flag: bool,
priv predicate: 'self |&A| -> bool
priv predicate: 'a |&A| -> bool
}
impl<'self, A, T: Iterator<A>> Iterator<A> for SkipWhile<'self, A, T> {
impl<'a, A, T: Iterator<A>> Iterator<A> for SkipWhile<'a, A, T> {
#[inline]
fn next(&mut self) -> Option<A> {
let mut next = self.iter.next();
@ -1394,13 +1394,13 @@ impl<'self, A, T: Iterator<A>> Iterator<A> for SkipWhile<'self, A, T> {
}
/// An iterator which only accepts elements while `predicate` is true
pub struct TakeWhile<'self, A, T> {
pub struct TakeWhile<'a, A, T> {
priv iter: T,
priv flag: bool,
priv predicate: 'self |&A| -> bool
priv predicate: 'a |&A| -> bool
}
impl<'self, A, T: Iterator<A>> Iterator<A> for TakeWhile<'self, A, T> {
impl<'a, A, T: Iterator<A>> Iterator<A> for TakeWhile<'a, A, T> {
#[inline]
fn next(&mut self) -> Option<A> {
if self.flag {
@ -1542,15 +1542,15 @@ impl<A, T: RandomAccessIterator<A>> RandomAccessIterator<A> for Take<T> {
/// An iterator to maintain state while iterating another iterator
pub struct Scan<'self, A, B, T, St> {
pub struct Scan<'a, A, B, T, St> {
priv iter: T,
priv f: 'self |&mut St, A| -> Option<B>,
priv f: 'a |&mut St, A| -> Option<B>,
/// The current internal state to be passed to the closure next.
state: St
}
impl<'self, A, B, T: Iterator<A>, St> Iterator<B> for Scan<'self, A, B, T, St> {
impl<'a, A, B, T: Iterator<A>, St> Iterator<B> for Scan<'a, A, B, T, St> {
#[inline]
fn next(&mut self) -> Option<B> {
self.iter.next().and_then(|a| (self.f)(&mut self.state, a))
@ -1566,14 +1566,14 @@ impl<'self, A, B, T: Iterator<A>, St> Iterator<B> for Scan<'self, A, B, T, St> {
/// An iterator that maps each element to an iterator,
/// and yields the elements of the produced iterators
///
pub struct FlatMap<'self, A, T, U> {
pub struct FlatMap<'a, A, T, U> {
priv iter: T,
priv f: 'self |A| -> U,
priv f: 'a |A| -> U,
priv frontiter: Option<U>,
priv backiter: Option<U>,
}
impl<'self, A, T: Iterator<A>, B, U: Iterator<B>> Iterator<B> for FlatMap<'self, A, T, U> {
impl<'a, A, T: Iterator<A>, B, U: Iterator<B>> Iterator<B> for FlatMap<'a, A, T, U> {
#[inline]
fn next(&mut self) -> Option<B> {
loop {
@ -1601,10 +1601,10 @@ impl<'self, A, T: Iterator<A>, B, U: Iterator<B>> Iterator<B> for FlatMap<'self,
}
}
impl<'self,
impl<'a,
A, T: DoubleEndedIterator<A>,
B, U: DoubleEndedIterator<B>> DoubleEndedIterator<B>
for FlatMap<'self, A, T, U> {
for FlatMap<'a, A, T, U> {
#[inline]
fn next_back(&mut self) -> Option<B> {
loop {
@ -1697,12 +1697,12 @@ impl<T> Fuse<T> {
/// An iterator that calls a function with a reference to each
/// element before yielding it.
pub struct Inspect<'self, A, T> {
pub struct Inspect<'a, A, T> {
priv iter: T,
priv f: 'self |&A|
priv f: 'a |&A|
}
impl<'self, A, T> Inspect<'self, A, T> {
impl<'a, A, T> Inspect<'a, A, T> {
#[inline]
fn do_inspect(&self, elt: Option<A>) -> Option<A> {
match elt {
@ -1714,7 +1714,7 @@ impl<'self, A, T> Inspect<'self, A, T> {
}
}
impl<'self, A, T: Iterator<A>> Iterator<A> for Inspect<'self, A, T> {
impl<'a, A, T: Iterator<A>> Iterator<A> for Inspect<'a, A, T> {
#[inline]
fn next(&mut self) -> Option<A> {
let next = self.iter.next();
@ -1727,8 +1727,8 @@ impl<'self, A, T: Iterator<A>> Iterator<A> for Inspect<'self, A, T> {
}
}
impl<'self, A, T: DoubleEndedIterator<A>> DoubleEndedIterator<A>
for Inspect<'self, A, T> {
impl<'a, A, T: DoubleEndedIterator<A>> DoubleEndedIterator<A>
for Inspect<'a, A, T> {
#[inline]
fn next_back(&mut self) -> Option<A> {
let next = self.iter.next_back();
@ -1736,8 +1736,8 @@ for Inspect<'self, A, T> {
}
}
impl<'self, A, T: RandomAccessIterator<A>> RandomAccessIterator<A>
for Inspect<'self, A, T> {
impl<'a, A, T: RandomAccessIterator<A>> RandomAccessIterator<A>
for Inspect<'a, A, T> {
#[inline]
fn indexable(&self) -> uint {
self.iter.indexable()
@ -1750,13 +1750,13 @@ for Inspect<'self, A, T> {
}
/// An iterator which just modifies the contained state throughout iteration.
pub struct Unfold<'self, A, St> {
priv f: 'self |&mut St| -> Option<A>,
pub struct Unfold<'a, A, St> {
priv f: 'a |&mut St| -> Option<A>,
/// Internal state that will be yielded on the next iteration
state: St
}
impl<'self, A, St> Unfold<'self, A, St> {
impl<'a, A, St> Unfold<'a, A, St> {
/// Creates a new iterator with the specified closure as the "iterator
/// function" and an initial state to eventually pass to the iterator
#[inline]
@ -1769,7 +1769,7 @@ impl<'self, A, St> Unfold<'self, A, St> {
}
}
impl<'self, A, St> Iterator<A> for Unfold<'self, A, St> {
impl<'a, A, St> Iterator<A> for Unfold<'a, A, St> {
#[inline]
fn next(&mut self) -> Option<A> {
(self.f)(&mut self.state)

View File

@ -523,18 +523,18 @@ pub trait GenericPathUnsafe {
}
/// Helper struct for printing paths with format!()
pub struct Display<'self, P> {
priv path: &'self P,
pub struct Display<'a, P> {
priv path: &'a P,
priv filename: bool
}
impl<'self, P: GenericPath> fmt::Default for Display<'self, P> {
impl<'a, P: GenericPath> fmt::Default for Display<'a, P> {
fn fmt(d: &Display<P>, f: &mut fmt::Formatter) {
d.with_str(|s| f.pad(s))
}
}
impl<'self, P: GenericPath> ToStr for Display<'self, P> {
impl<'a, P: GenericPath> ToStr for Display<'a, P> {
/// Returns the path as a string
///
/// If the path is not UTF-8, invalid sequences with be replaced with the
@ -551,7 +551,7 @@ impl<'self, P: GenericPath> ToStr for Display<'self, P> {
}
}
impl<'self, P: GenericPath> Display<'self, P> {
impl<'a, P: GenericPath> Display<'a, P> {
/// Provides the path as a string to a closure
///
/// If the path is not UTF-8, invalid sequences will be replaced with the
@ -570,7 +570,7 @@ impl<'self, P: GenericPath> Display<'self, P> {
}
}
impl<'self> BytesContainer for &'self str {
impl<'a> BytesContainer for &'a str {
#[inline]
fn container_as_bytes<'a>(&'a self) -> &'a [u8] {
self.as_bytes()
@ -584,7 +584,7 @@ impl<'self> BytesContainer for &'self str {
Some(*self)
}
#[inline]
fn is_str(_: Option<&'self str>) -> bool { true }
fn is_str(_: Option<&'a str>) -> bool { true }
}
impl BytesContainer for ~str {
@ -625,7 +625,7 @@ impl BytesContainer for @str {
fn is_str(_: Option<@str>) -> bool { true }
}
impl<'self> BytesContainer for &'self [u8] {
impl<'a> BytesContainer for &'a [u8] {
#[inline]
fn container_as_bytes<'a>(&'a self) -> &'a [u8] {
*self

View File

@ -25,16 +25,16 @@ use vec::{CopyableVector, RSplitIterator, SplitIterator, Vector, VectorVector};
use super::{BytesContainer, GenericPath, GenericPathUnsafe};
/// Iterator that yields successive components of a Path as &[u8]
pub type ComponentIter<'self> = SplitIterator<'self, u8>;
pub type ComponentIter<'a> = SplitIterator<'a, u8>;
/// Iterator that yields components of a Path in reverse as &[u8]
pub type RevComponentIter<'self> = RSplitIterator<'self, u8>;
pub type RevComponentIter<'a> = RSplitIterator<'a, u8>;
/// Iterator that yields successive components of a Path as Option<&str>
pub type StrComponentIter<'self> = Map<'self, &'self [u8], Option<&'self str>,
ComponentIter<'self>>;
pub type StrComponentIter<'a> = Map<'a, &'a [u8], Option<&'a str>,
ComponentIter<'a>>;
/// Iterator that yields components of a Path in reverse as Option<&str>
pub type RevStrComponentIter<'self> = Map<'self, &'self [u8], Option<&'self str>,
RevComponentIter<'self>>;
pub type RevStrComponentIter<'a> = Map<'a, &'a [u8], Option<&'a str>,
RevComponentIter<'a>>;
/// Represents a POSIX file path
#[deriving(Clone, DeepClone)]
@ -103,7 +103,7 @@ impl BytesContainer for Path {
}
}
impl<'self> BytesContainer for &'self Path {
impl<'a> BytesContainer for &'a Path {
#[inline]
fn container_as_bytes<'a>(&'a self) -> &'a [u8] {
self.as_vec()

View File

@ -27,21 +27,21 @@ use super::{contains_nul, BytesContainer, GenericPath, GenericPathUnsafe};
///
/// Each component is yielded as Option<&str> for compatibility with PosixPath, but
/// every component in WindowsPath is guaranteed to be Some.
pub type StrComponentIter<'self> = Map<'self, &'self str, Option<&'self str>,
CharSplitIterator<'self, char>>;
pub type StrComponentIter<'a> = Map<'a, &'a str, Option<&'a str>,
CharSplitIterator<'a, char>>;
/// Iterator that yields components of a Path in reverse as &str
///
/// Each component is yielded as Option<&str> for compatibility with PosixPath, but
/// every component in WindowsPath is guaranteed to be Some.
pub type RevStrComponentIter<'self> = Invert<Map<'self, &'self str, Option<&'self str>,
CharSplitIterator<'self, char>>>;
pub type RevStrComponentIter<'a> = Invert<Map<'a, &'a str, Option<&'a str>,
CharSplitIterator<'a, char>>>;
/// Iterator that yields successive components of a Path as &[u8]
pub type ComponentIter<'self> = Map<'self, Option<&'self str>, &'self [u8],
StrComponentIter<'self>>;
pub type ComponentIter<'a> = Map<'a, Option<&'a str>, &'a [u8],
StrComponentIter<'a>>;
/// Iterator that yields components of a Path in reverse as &[u8]
pub type RevComponentIter<'self> = Map<'self, Option<&'self str>, &'self [u8],
RevStrComponentIter<'self>>;
pub type RevComponentIter<'a> = Map<'a, Option<&'a str>, &'a [u8],
RevStrComponentIter<'a>>;
/// Represents a Windows path
// Notes for Windows path impl:
@ -138,7 +138,7 @@ impl BytesContainer for Path {
fn is_str(_: Option<Path>) -> bool { true }
}
impl<'self> BytesContainer for &'self Path {
impl<'a> BytesContainer for &'a Path {
#[inline]
fn container_as_bytes<'a>(&'a self) -> &'a [u8] {
self.as_vec()
@ -152,7 +152,7 @@ impl<'self> BytesContainer for &'self Path {
self.as_str()
}
#[inline]
fn is_str(_: Option<&'self Path>) -> bool { true }
fn is_str(_: Option<&'a Path>) -> bool { true }
}
impl GenericPathUnsafe for Path {

View File

@ -188,8 +188,8 @@ impl Rng for IsaacRng {
}
}
impl<'self> SeedableRng<&'self [u32]> for IsaacRng {
fn reseed(&mut self, seed: &'self [u32]) {
impl<'a> SeedableRng<&'a [u32]> for IsaacRng {
fn reseed(&mut self, seed: &'a [u32]) {
// make the seed into [seed[0], seed[1], ..., seed[seed.len()
// - 1], 0, 0, ...], to fill rng.rsl.
let seed_iter = seed.iter().map(|&x| x).chain(Repeat::new(0u32));
@ -210,7 +210,7 @@ impl<'self> SeedableRng<&'self [u32]> for IsaacRng {
/// 256 and any more will be silently ignored. A generator
/// constructed with a given seed will generate the same sequence
/// of values as all other generators constructed with that seed.
fn from_seed(seed: &'self [u32]) -> IsaacRng {
fn from_seed(seed: &'a [u32]) -> IsaacRng {
let mut rng = EMPTY;
rng.reseed(seed);
rng
@ -399,8 +399,8 @@ impl Rng for Isaac64Rng {
}
}
impl<'self> SeedableRng<&'self [u64]> for Isaac64Rng {
fn reseed(&mut self, seed: &'self [u64]) {
impl<'a> SeedableRng<&'a [u64]> for Isaac64Rng {
fn reseed(&mut self, seed: &'a [u64]) {
// make the seed into [seed[0], seed[1], ..., seed[seed.len()
// - 1], 0, 0, ...], to fill rng.rsl.
let seed_iter = seed.iter().map(|&x| x).chain(Repeat::new(0u64));
@ -421,7 +421,7 @@ impl<'self> SeedableRng<&'self [u64]> for Isaac64Rng {
/// 256 and any more will be silently ignored. A generator
/// constructed with a given seed will generate the same sequence
/// of values as all other generators constructed with that seed.
fn from_seed(seed: &'self [u64]) -> Isaac64Rng {
fn from_seed(seed: &'a [u64]) -> Isaac64Rng {
let mut rng = EMPTY_64;
rng.reseed(seed);
rng

View File

@ -469,14 +469,14 @@ impl Rng for StdRng {
}
}
impl<'self> SeedableRng<&'self [uint]> for StdRng {
fn reseed(&mut self, seed: &'self [uint]) {
impl<'a> SeedableRng<&'a [uint]> for StdRng {
fn reseed(&mut self, seed: &'a [uint]) {
// the internal RNG can just be seeded from the above
// randomness.
self.rng.reseed(unsafe {cast::transmute(seed)})
}
fn from_seed(seed: &'self [uint]) -> StdRng {
fn from_seed(seed: &'a [uint]) -> StdRng {
StdRng { rng: SeedableRng::from_seed(unsafe {cast::transmute(seed)}) }
}
}

View File

@ -97,11 +97,11 @@ enum VariantState {
AlreadyFound
}
pub struct ReprVisitor<'self> {
pub struct ReprVisitor<'a> {
priv ptr: *c_void,
priv ptr_stk: ~[*c_void],
priv var_stk: ~[VariantState],
priv writer: &'self mut io::Writer
priv writer: &'a mut io::Writer
}
pub fn ReprVisitor<'a>(ptr: *c_void,
@ -114,7 +114,7 @@ pub fn ReprVisitor<'a>(ptr: *c_void,
}
}
impl<'self> MovePtr for ReprVisitor<'self> {
impl<'a> MovePtr for ReprVisitor<'a> {
#[inline]
fn move_ptr(&mut self, adjustment: |*c_void| -> *c_void) {
self.ptr = adjustment(self.ptr);
@ -127,7 +127,7 @@ impl<'self> MovePtr for ReprVisitor<'self> {
}
}
impl<'self> ReprVisitor<'self> {
impl<'a> ReprVisitor<'a> {
// Various helpers for the TyVisitor impl
#[inline]
@ -242,7 +242,7 @@ impl<'self> ReprVisitor<'self> {
}
}
impl<'self> TyVisitor for ReprVisitor<'self> {
impl<'a> TyVisitor for ReprVisitor<'a> {
fn visit_bot(&mut self) -> bool {
self.writer.write("!".as_bytes());
true

View File

@ -510,7 +510,7 @@ impl<T: Send> Peekable<T> for Port<T> {
// of them, but a &Port<T> should also be selectable so you can select2 on it
// alongside a PortOne<U> without passing the port by value in recv_ready.
impl<'self, T: Send> SelectInner for &'self Port<T> {
impl<'a, T: Send> SelectInner for &'a Port<T> {
#[inline]
fn optimistic_check(&mut self) -> bool {
self.next.with_mut(|pone| { pone.get_mut_ref().optimistic_check() })
@ -528,7 +528,7 @@ impl<'self, T: Send> SelectInner for &'self Port<T> {
}
}
impl<'self, T: Send> Select for &'self Port<T> { }
impl<'a, T: Send> Select for &'a Port<T> { }
impl<T: Send> SelectInner for Port<T> {
#[inline]
@ -549,7 +549,7 @@ impl<T: Send> SelectInner for Port<T> {
impl<T: Send> Select for Port<T> { }
impl<'self, T: Send> SelectPortInner<T> for &'self Port<T> {
impl<'a, T: Send> SelectPortInner<T> for &'a Port<T> {
fn recv_ready(self) -> Option<T> {
let mut b = self.next.borrow_mut();
match b.get().take_unwrap().recv_ready() {
@ -562,7 +562,7 @@ impl<'self, T: Send> SelectPortInner<T> for &'self Port<T> {
}
}
impl<'self, T: Send> SelectPort<T> for &'self Port<T> { }
impl<'a, T: Send> SelectPort<T> for &'a Port<T> { }
pub struct SharedChan<T> {
// Just like Chan, but a shared AtomicOption

View File

@ -21,15 +21,15 @@ use rt::rtio::EventLoop;
#[link_args = "-Wl,-U,__rust_crate_map_toplevel"]
extern {}
pub struct ModEntry<'self> {
name: &'self str,
pub struct ModEntry<'a> {
name: &'a str,
log_level: *mut u32
}
pub struct CrateMap<'self> {
pub struct CrateMap<'a> {
version: i32,
entries: &'self [ModEntry<'self>],
children: &'self [&'self CrateMap<'self>],
entries: &'a [ModEntry<'a>],
children: &'a [&'a CrateMap<'a>],
event_loop_factory: Option<extern "C" fn() -> ~EventLoop>,
}

View File

@ -33,7 +33,7 @@ pub struct Process {
}
/// Options that can be given when starting a Process.
pub struct ProcessOptions<'self> {
pub struct ProcessOptions<'a> {
/**
* If this is None then the new process will have the same initial
* environment as the parent process.
@ -50,7 +50,7 @@ pub struct ProcessOptions<'self> {
* If this is Some(path) then the new process will use the given path
* for its initial working directory.
*/
dir: Option<&'self Path>,
dir: Option<&'a Path>,
/**
* If this is None then a new pipe will be created for the new process's
@ -83,7 +83,7 @@ pub struct ProcessOptions<'self> {
err_fd: Option<c_int>,
}
impl <'self> ProcessOptions<'self> {
impl <'a> ProcessOptions<'a> {
/// Return a ProcessOptions that has None in every field.
pub fn new<'a>() -> ProcessOptions<'a> {
ProcessOptions {

View File

@ -108,7 +108,7 @@ pub fn select<A: Select>(ports: &mut [A]) -> uint {
/* FIXME(#5121, #7914) This all should be legal, but rust is not clever enough yet.
impl <'self> Select for &'self mut Select {
impl <'a> Select for &'a mut Select {
fn optimistic_check(&mut self) -> bool { self.optimistic_check() }
fn block_on(&mut self, sched: &mut Scheduler, task: BlockedTask) -> bool {
self.block_on(sched, task)

View File

@ -107,7 +107,7 @@ impl TotalOrd for SendStr {
}
}
impl<'self, S: Str> Equiv<S> for SendStr {
impl<'a, S: Str> Equiv<S> for SendStr {
#[inline]
fn equiv(&self, other: &S) -> bool {
self.as_slice().equals(&other.as_slice())

View File

@ -182,7 +182,7 @@ impl FromStr for ~str {
fn from_str(s: &str) -> Option<~str> { Some(s.to_owned()) }
}
impl<'self> ToStr for &'self str {
impl<'a> ToStr for &'a str {
#[inline]
fn to_str(&self) -> ~str { self.to_owned() }
}
@ -192,7 +192,7 @@ impl ToStr for @str {
fn to_str(&self) -> ~str { self.to_owned() }
}
impl<'self> FromStr for @str {
impl<'a> FromStr for @str {
#[inline]
fn from_str(s: &str) -> Option<@str> { Some(s.to_managed()) }
}
@ -238,7 +238,7 @@ pub trait StrVector {
fn connect(&self, sep: &str) -> ~str;
}
impl<'self, S: Str> StrVector for &'self [S] {
impl<'a, S: Str> StrVector for &'a [S] {
fn concat(&self) -> ~str {
if self.is_empty() { return ~""; }
@ -294,7 +294,7 @@ impl CharEq for char {
fn only_ascii(&self) -> bool { (*self as uint) < 128 }
}
impl<'self> CharEq for 'self |char| -> bool {
impl<'a> CharEq for 'a |char| -> bool {
#[inline]
fn matches(&self, c: char) -> bool { (*self)(c) }
@ -308,7 +308,7 @@ impl CharEq for extern "Rust" fn(char) -> bool {
fn only_ascii(&self) -> bool { false }
}
impl<'self, C: CharEq> CharEq for &'self [C] {
impl<'a, C: CharEq> CharEq for &'a [C] {
#[inline]
fn matches(&self, c: char) -> bool {
self.iter().any(|m| m.matches(c))
@ -326,12 +326,12 @@ Section: Iterators
/// External iterator for a string's characters.
/// Use with the `std::iter` module.
#[deriving(Clone)]
pub struct CharIterator<'self> {
pub struct CharIterator<'a> {
/// The slice remaining to be iterated
priv string: &'self str,
priv string: &'a str,
}
impl<'self> Iterator<char> for CharIterator<'self> {
impl<'a> Iterator<char> for CharIterator<'a> {
#[inline]
fn next(&mut self) -> Option<char> {
// Decode the next codepoint, then update
@ -353,7 +353,7 @@ impl<'self> Iterator<char> for CharIterator<'self> {
}
}
impl<'self> DoubleEndedIterator<char> for CharIterator<'self> {
impl<'a> DoubleEndedIterator<char> for CharIterator<'a> {
#[inline]
fn next_back(&mut self) -> Option<char> {
if self.string.len() != 0 {
@ -371,13 +371,13 @@ impl<'self> DoubleEndedIterator<char> for CharIterator<'self> {
/// External iterator for a string's characters and their byte offsets.
/// Use with the `std::iter` module.
#[deriving(Clone)]
pub struct CharOffsetIterator<'self> {
pub struct CharOffsetIterator<'a> {
/// The original string to be iterated
priv string: &'self str,
priv iter: CharIterator<'self>,
priv string: &'a str,
priv iter: CharIterator<'a>,
}
impl<'self> Iterator<(uint, char)> for CharOffsetIterator<'self> {
impl<'a> Iterator<(uint, char)> for CharOffsetIterator<'a> {
#[inline]
fn next(&mut self) -> Option<(uint, char)> {
// Compute the byte offset by using the pointer offset between
@ -396,7 +396,7 @@ impl<'self> Iterator<(uint, char)> for CharOffsetIterator<'self> {
}
}
impl<'self> DoubleEndedIterator<(uint, char)> for CharOffsetIterator<'self> {
impl<'a> DoubleEndedIterator<(uint, char)> for CharOffsetIterator<'a> {
#[inline]
fn next_back(&mut self) -> Option<(uint, char)> {
self.iter.next_back().map(|ch| {
@ -412,26 +412,26 @@ impl<'self> DoubleEndedIterator<(uint, char)> for CharOffsetIterator<'self> {
/// External iterator for a string's characters in reverse order.
/// Use with the `std::iter` module.
pub type CharRevIterator<'self> = Invert<CharIterator<'self>>;
pub type CharRevIterator<'a> = Invert<CharIterator<'a>>;
/// External iterator for a string's characters and their byte offsets in reverse order.
/// Use with the `std::iter` module.
pub type CharOffsetRevIterator<'self> = Invert<CharOffsetIterator<'self>>;
pub type CharOffsetRevIterator<'a> = Invert<CharOffsetIterator<'a>>;
/// External iterator for a string's bytes.
/// Use with the `std::iter` module.
pub type ByteIterator<'self> =
Map<'self, &'self u8, u8, vec::VecIterator<'self, u8>>;
pub type ByteIterator<'a> =
Map<'a, &'a u8, u8, vec::VecIterator<'a, u8>>;
/// External iterator for a string's bytes in reverse order.
/// Use with the `std::iter` module.
pub type ByteRevIterator<'self> = Invert<ByteIterator<'self>>;
pub type ByteRevIterator<'a> = Invert<ByteIterator<'a>>;
/// An iterator over the substrings of a string, separated by `sep`.
#[deriving(Clone)]
pub struct CharSplitIterator<'self, Sep> {
pub struct CharSplitIterator<'a, Sep> {
/// The slice remaining to be iterated
priv string: &'self str,
priv string: &'a str,
priv sep: Sep,
/// Whether an empty string at the end is allowed
priv allow_trailing_empty: bool,
@ -441,29 +441,29 @@ pub struct CharSplitIterator<'self, Sep> {
/// An iterator over the substrings of a string, separated by `sep`,
/// starting from the back of the string.
pub type CharRSplitIterator<'self, Sep> = Invert<CharSplitIterator<'self, Sep>>;
pub type CharRSplitIterator<'a, Sep> = Invert<CharSplitIterator<'a, Sep>>;
/// An iterator over the substrings of a string, separated by `sep`,
/// splitting at most `count` times.
#[deriving(Clone)]
pub struct CharSplitNIterator<'self, Sep> {
priv iter: CharSplitIterator<'self, Sep>,
pub struct CharSplitNIterator<'a, Sep> {
priv iter: CharSplitIterator<'a, Sep>,
/// The number of splits remaining
priv count: uint,
priv invert: bool,
}
/// An iterator over the words of a string, separated by an sequence of whitespace
pub type WordIterator<'self> =
Filter<'self, &'self str, CharSplitIterator<'self, extern "Rust" fn(char) -> bool>>;
pub type WordIterator<'a> =
Filter<'a, &'a str, CharSplitIterator<'a, extern "Rust" fn(char) -> bool>>;
/// An iterator over the lines of a string, separated by either `\n` or (`\r\n`).
pub type AnyLineIterator<'self> =
Map<'self, &'self str, &'self str, CharSplitIterator<'self, char>>;
pub type AnyLineIterator<'a> =
Map<'a, &'a str, &'a str, CharSplitIterator<'a, char>>;
impl<'self, Sep> CharSplitIterator<'self, Sep> {
impl<'a, Sep> CharSplitIterator<'a, Sep> {
#[inline]
fn get_end(&mut self) -> Option<&'self str> {
fn get_end(&mut self) -> Option<&'a str> {
if !self.finished && (self.allow_trailing_empty || self.string.len() > 0) {
self.finished = true;
Some(self.string)
@ -473,9 +473,9 @@ impl<'self, Sep> CharSplitIterator<'self, Sep> {
}
}
impl<'self, Sep: CharEq> Iterator<&'self str> for CharSplitIterator<'self, Sep> {
impl<'a, Sep: CharEq> Iterator<&'a str> for CharSplitIterator<'a, Sep> {
#[inline]
fn next(&mut self) -> Option<&'self str> {
fn next(&mut self) -> Option<&'a str> {
if self.finished { return None }
let mut next_split = None;
@ -505,10 +505,10 @@ impl<'self, Sep: CharEq> Iterator<&'self str> for CharSplitIterator<'self, Sep>
}
}
impl<'self, Sep: CharEq> DoubleEndedIterator<&'self str>
for CharSplitIterator<'self, Sep> {
impl<'a, Sep: CharEq> DoubleEndedIterator<&'a str>
for CharSplitIterator<'a, Sep> {
#[inline]
fn next_back(&mut self) -> Option<&'self str> {
fn next_back(&mut self) -> Option<&'a str> {
if self.finished { return None }
if !self.allow_trailing_empty {
@ -547,9 +547,9 @@ for CharSplitIterator<'self, Sep> {
}
}
impl<'self, Sep: CharEq> Iterator<&'self str> for CharSplitNIterator<'self, Sep> {
impl<'a, Sep: CharEq> Iterator<&'a str> for CharSplitNIterator<'a, Sep> {
#[inline]
fn next(&mut self) -> Option<&'self str> {
fn next(&mut self) -> Option<&'a str> {
if self.count != 0 {
self.count -= 1;
if self.invert { self.iter.next_back() } else { self.iter.next() }
@ -562,22 +562,22 @@ impl<'self, Sep: CharEq> Iterator<&'self str> for CharSplitNIterator<'self, Sep>
/// An iterator over the start and end indices of the matches of a
/// substring within a larger string
#[deriving(Clone)]
pub struct MatchesIndexIterator<'self> {
priv haystack: &'self str,
priv needle: &'self str,
pub struct MatchesIndexIterator<'a> {
priv haystack: &'a str,
priv needle: &'a str,
priv position: uint,
}
/// An iterator over the substrings of a string separated by a given
/// search string
#[deriving(Clone)]
pub struct StrSplitIterator<'self> {
priv it: MatchesIndexIterator<'self>,
pub struct StrSplitIterator<'a> {
priv it: MatchesIndexIterator<'a>,
priv last_end: uint,
priv finished: bool
}
impl<'self> Iterator<(uint, uint)> for MatchesIndexIterator<'self> {
impl<'a> Iterator<(uint, uint)> for MatchesIndexIterator<'a> {
#[inline]
fn next(&mut self) -> Option<(uint, uint)> {
// See Issue #1932 for why this is a naive search
@ -608,9 +608,9 @@ impl<'self> Iterator<(uint, uint)> for MatchesIndexIterator<'self> {
}
}
impl<'self> Iterator<&'self str> for StrSplitIterator<'self> {
impl<'a> Iterator<&'a str> for StrSplitIterator<'a> {
#[inline]
fn next(&mut self) -> Option<&'self str> {
fn next(&mut self) -> Option<&'a str> {
if self.finished { return None; }
match self.it.next() {
@ -656,14 +656,14 @@ enum NormalizationForm {
/// External iterator for a string's normalization's characters.
/// Use with the `std::iter` module.
#[deriving(Clone)]
struct NormalizationIterator<'self> {
struct NormalizationIterator<'a> {
priv kind: NormalizationForm,
priv iter: CharIterator<'self>,
priv iter: CharIterator<'a>,
priv buffer: ~[(char, u8)],
priv sorted: bool
}
impl<'self> Iterator<char> for NormalizationIterator<'self> {
impl<'a> Iterator<char> for NormalizationIterator<'a> {
#[inline]
fn next(&mut self) -> Option<char> {
use unicode::decompose::canonical_combining_class;
@ -1168,18 +1168,18 @@ pub mod traits {
use super::{Str, eq_slice};
use option::{Some, None};
impl<'self> Add<&'self str,~str> for &'self str {
impl<'a> Add<&'a str,~str> for &'a str {
#[inline]
fn add(&self, rhs: & &'self str) -> ~str {
fn add(&self, rhs: & &'a str) -> ~str {
let mut ret = self.to_owned();
ret.push_str(*rhs);
ret
}
}
impl<'self> TotalOrd for &'self str {
impl<'a> TotalOrd for &'a str {
#[inline]
fn cmp(&self, other: & &'self str) -> Ordering {
fn cmp(&self, other: & &'a str) -> Ordering {
for (s_b, o_b) in self.bytes().zip(other.bytes()) {
match s_b.cmp(&o_b) {
Greater => return Greater,
@ -1202,13 +1202,13 @@ pub mod traits {
fn cmp(&self, other: &@str) -> Ordering { self.as_slice().cmp(&other.as_slice()) }
}
impl<'self> Eq for &'self str {
impl<'a> Eq for &'a str {
#[inline]
fn eq(&self, other: & &'self str) -> bool {
fn eq(&self, other: & &'a str) -> bool {
eq_slice((*self), (*other))
}
#[inline]
fn ne(&self, other: & &'self str) -> bool { !(*self).eq(other) }
fn ne(&self, other: & &'a str) -> bool { !(*self).eq(other) }
}
impl Eq for ~str {
@ -1225,9 +1225,9 @@ pub mod traits {
}
}
impl<'self> TotalEq for &'self str {
impl<'a> TotalEq for &'a str {
#[inline]
fn equals(&self, other: & &'self str) -> bool {
fn equals(&self, other: & &'a str) -> bool {
eq_slice((*self), (*other))
}
}
@ -1246,9 +1246,9 @@ pub mod traits {
}
}
impl<'self> Ord for &'self str {
impl<'a> Ord for &'a str {
#[inline]
fn lt(&self, other: & &'self str) -> bool { self.cmp(other) == Less }
fn lt(&self, other: & &'a str) -> bool { self.cmp(other) == Less }
}
impl Ord for ~str {
@ -1261,17 +1261,17 @@ pub mod traits {
fn lt(&self, other: &@str) -> bool { self.cmp(other) == Less }
}
impl<'self, S: Str> Equiv<S> for &'self str {
impl<'a, S: Str> Equiv<S> for &'a str {
#[inline]
fn equiv(&self, other: &S) -> bool { eq_slice(*self, other.as_slice()) }
}
impl<'self, S: Str> Equiv<S> for @str {
impl<'a, S: Str> Equiv<S> for @str {
#[inline]
fn equiv(&self, other: &S) -> bool { eq_slice(*self, other.as_slice()) }
}
impl<'self, S: Str> Equiv<S> for ~str {
impl<'a, S: Str> Equiv<S> for ~str {
#[inline]
fn equiv(&self, other: &S) -> bool { eq_slice(*self, other.as_slice()) }
}
@ -1289,7 +1289,7 @@ pub trait Str {
fn into_owned(self) -> ~str;
}
impl<'self> Str for &'self str {
impl<'a> Str for &'a str {
#[inline]
fn as_slice<'a>(&'a self) -> &'a str { *self }
@ -1297,7 +1297,7 @@ impl<'self> Str for &'self str {
fn into_owned(self) -> ~str { self.to_owned() }
}
impl<'self> Str for ~str {
impl<'a> Str for ~str {
#[inline]
fn as_slice<'a>(&'a self) -> &'a str {
let s: &'a str = *self; s
@ -1307,7 +1307,7 @@ impl<'self> Str for ~str {
fn into_owned(self) -> ~str { self }
}
impl<'self> Str for @str {
impl<'a> Str for @str {
#[inline]
fn as_slice<'a>(&'a self) -> &'a str {
let s: &'a str = *self; s
@ -1317,7 +1317,7 @@ impl<'self> Str for @str {
fn into_owned(self) -> ~str { self.to_owned() }
}
impl<'self> Container for &'self str {
impl<'a> Container for &'a str {
#[inline]
fn len(&self) -> uint {
self.as_imm_buf(|_p, n| n)
@ -1345,7 +1345,7 @@ impl Mutable for ~str {
}
/// Methods for string slices
pub trait StrSlice<'self> {
pub trait StrSlice<'a> {
/// Returns true if one string contains another
///
/// # Arguments
@ -1369,23 +1369,23 @@ pub trait StrSlice<'self> {
/// let v: ~[char] = "abc åäö".chars().collect();
/// assert_eq!(v, ~['a', 'b', 'c', ' ', 'å', 'ä', 'ö']);
/// ```
fn chars(&self) -> CharIterator<'self>;
fn chars(&self) -> CharIterator<'a>;
/// An iterator over the characters of `self`, in reverse order.
fn chars_rev(&self) -> CharRevIterator<'self>;
fn chars_rev(&self) -> CharRevIterator<'a>;
/// An iterator over the bytes of `self`
fn bytes(&self) -> ByteIterator<'self>;
fn bytes(&self) -> ByteIterator<'a>;
/// An iterator over the bytes of `self`, in reverse order
fn bytes_rev(&self) -> ByteRevIterator<'self>;
fn bytes_rev(&self) -> ByteRevIterator<'a>;
/// An iterator over the characters of `self` and their byte offsets.
fn char_indices(&self) -> CharOffsetIterator<'self>;
fn char_indices(&self) -> CharOffsetIterator<'a>;
/// An iterator over the characters of `self` and their byte offsets,
/// in reverse order.
fn char_indices_rev(&self) -> CharOffsetRevIterator<'self>;
fn char_indices_rev(&self) -> CharOffsetRevIterator<'a>;
/// An iterator over substrings of `self`, separated by characters
/// matched by `sep`.
@ -1402,7 +1402,7 @@ pub trait StrSlice<'self> {
/// let v: ~[&str] = "lionXXtigerXleopard".split('X').collect();
/// assert_eq!(v, ~["lion", "", "tiger", "leopard"]);
/// ```
fn split<Sep: CharEq>(&self, sep: Sep) -> CharSplitIterator<'self, Sep>;
fn split<Sep: CharEq>(&self, sep: Sep) -> CharSplitIterator<'a, Sep>;
/// An iterator over substrings of `self`, separated by characters
/// matched by `sep`, restricted to splitting at most `count`
@ -1420,7 +1420,7 @@ pub trait StrSlice<'self> {
/// let v: ~[&str] = "lionXXtigerXleopard".splitn('X', 2).collect();
/// assert_eq!(v, ~["lion", "", "tigerXleopard"]);
/// ```
fn splitn<Sep: CharEq>(&self, sep: Sep, count: uint) -> CharSplitNIterator<'self, Sep>;
fn splitn<Sep: CharEq>(&self, sep: Sep, count: uint) -> CharSplitNIterator<'a, Sep>;
/// An iterator over substrings of `self`, separated by characters
/// matched by `sep`.
@ -1437,7 +1437,7 @@ pub trait StrSlice<'self> {
/// let v: ~[&str] = "A..B..".split_terminator('.').collect();
/// assert_eq!(v, ~["A", "", "B", ""]);
/// ```
fn split_terminator<Sep: CharEq>(&self, sep: Sep) -> CharSplitIterator<'self, Sep>;
fn split_terminator<Sep: CharEq>(&self, sep: Sep) -> CharSplitIterator<'a, Sep>;
/// An iterator over substrings of `self`, separated by characters
/// matched by `sep`, in reverse order.
@ -1454,7 +1454,7 @@ pub trait StrSlice<'self> {
/// let v: ~[&str] = "lionXXtigerXleopard".rsplit('X').collect();
/// assert_eq!(v, ~["leopard", "tiger", "", "lion"]);
/// ```
fn rsplit<Sep: CharEq>(&self, sep: Sep) -> CharRSplitIterator<'self, Sep>;
fn rsplit<Sep: CharEq>(&self, sep: Sep) -> CharRSplitIterator<'a, Sep>;
/// An iterator over substrings of `self`, separated by characters
/// matched by `sep`, starting from the end of the string.
@ -1472,7 +1472,7 @@ pub trait StrSlice<'self> {
/// let v: ~[&str] = "lionXXtigerXleopard".rsplitn('X', 2).collect();
/// assert_eq!(v, ~["leopard", "tiger", "lionX"]);
/// ```
fn rsplitn<Sep: CharEq>(&self, sep: Sep, count: uint) -> CharSplitNIterator<'self, Sep>;
fn rsplitn<Sep: CharEq>(&self, sep: Sep, count: uint) -> CharSplitNIterator<'a, Sep>;
/// An iterator over the start and end indices of the disjoint
/// matches of `sep` within `self`.
@ -1494,7 +1494,7 @@ pub trait StrSlice<'self> {
/// let v: ~[(uint, uint)] = "ababa".split_str("aba").collect();
/// assert_eq!(v, ~[(0, 3)]); // only the first `aba`
/// ```
fn match_indices(&self, sep: &'self str) -> MatchesIndexIterator<'self>;
fn match_indices(&self, sep: &'a str) -> MatchesIndexIterator<'a>;
/// An iterator over the substrings of `self` separated by `sep`.
///
@ -1507,7 +1507,7 @@ pub trait StrSlice<'self> {
/// let v: ~[&str] = "1abcabc2".split_str("abc").collect();
/// assert_eq!(v, ~["1", "", "2"]);
/// ```
fn split_str(&self, &'self str) -> StrSplitIterator<'self>;
fn split_str(&self, &'a str) -> StrSplitIterator<'a>;
/// An iterator over the lines of a string (subsequences separated
/// by `\n`). This does not include the empty string after a
@ -1520,7 +1520,7 @@ pub trait StrSlice<'self> {
/// let v: ~[&str] = four_lines.lines().collect();
/// assert_eq!(v, ~["foo", "bar", "", "baz"]);
/// ```
fn lines(&self) -> CharSplitIterator<'self, char>;
fn lines(&self) -> CharSplitIterator<'a, char>;
/// An iterator over the lines of a string, separated by either
/// `\n` or `\r\n`. As with `.lines()`, this does not include an
@ -1533,7 +1533,7 @@ pub trait StrSlice<'self> {
/// let v: ~[&str] = four_lines.lines_any().collect();
/// assert_eq!(v, ~["foo", "bar", "", "baz"]);
/// ```
fn lines_any(&self) -> AnyLineIterator<'self>;
fn lines_any(&self) -> AnyLineIterator<'a>;
/// An iterator over the words of a string (subsequences separated
/// by any sequence of whitespace). Sequences of whitespace are
@ -1546,15 +1546,15 @@ pub trait StrSlice<'self> {
/// let v: ~[&str] = some_words.words().collect();
/// assert_eq!(v, ~["Mary", "had", "a", "little", "lamb"]);
/// ```
fn words(&self) -> WordIterator<'self>;
fn words(&self) -> WordIterator<'a>;
/// An Iterator over the string in Unicode Normalization Form D
/// (canonical decomposition).
fn nfd_chars(&self) -> NormalizationIterator<'self>;
fn nfd_chars(&self) -> NormalizationIterator<'a>;
/// An Iterator over the string in Unicode Normalization Form KD
/// (compatibility decomposition).
fn nfkd_chars(&self) -> NormalizationIterator<'self>;
fn nfkd_chars(&self) -> NormalizationIterator<'a>;
/// Returns true if the string contains only whitespace.
///
@ -1647,7 +1647,7 @@ pub trait StrSlice<'self> {
/// // byte 100 is outside the string
/// // s.slice(3, 100);
/// ```
fn slice(&self, begin: uint, end: uint) -> &'self str;
fn slice(&self, begin: uint, end: uint) -> &'a str;
/// Returns a slice of the string from `begin` to its end.
///
@ -1657,7 +1657,7 @@ pub trait StrSlice<'self> {
/// out of bounds.
///
/// See also `slice`, `slice_to` and `slice_chars`.
fn slice_from(&self, begin: uint) -> &'self str;
fn slice_from(&self, begin: uint) -> &'a str;
/// Returns a slice of the string from the beginning to byte
/// `end`.
@ -1668,7 +1668,7 @@ pub trait StrSlice<'self> {
/// out of bounds.
///
/// See also `slice`, `slice_from` and `slice_chars`.
fn slice_to(&self, end: uint) -> &'self str;
fn slice_to(&self, end: uint) -> &'a str;
/// Returns a slice of the string from the character range
/// [`begin`..`end`).
@ -1693,7 +1693,7 @@ pub trait StrSlice<'self> {
/// assert_eq!(s.slice_chars(0, 4), "Löwe");
/// assert_eq!(s.slice_chars(6, 8), "老虎");
/// ```
fn slice_chars(&self, begin: uint, end: uint) -> &'self str;
fn slice_chars(&self, begin: uint, end: uint) -> &'a str;
/// Returns true if `needle` is a prefix of the string.
fn starts_with(&self, needle: &str) -> bool;
@ -1708,13 +1708,13 @@ pub trait StrSlice<'self> {
fn escape_unicode(&self) -> ~str;
/// Returns a string with leading and trailing whitespace removed.
fn trim(&self) -> &'self str;
fn trim(&self) -> &'a str;
/// Returns a string with leading whitespace removed.
fn trim_left(&self) -> &'self str;
fn trim_left(&self) -> &'a str;
/// Returns a string with trailing whitespace removed.
fn trim_right(&self) -> &'self str;
fn trim_right(&self) -> &'a str;
/// Returns a string with characters that match `to_trim` removed.
///
@ -1729,7 +1729,7 @@ pub trait StrSlice<'self> {
/// assert_eq!("12foo1bar12".trim_chars(& &['1', '2']), "foo1bar")
/// assert_eq!("123foo1bar123".trim_chars(&|c: char| c.is_digit()), "foo1bar")
/// ```
fn trim_chars<C: CharEq>(&self, to_trim: &C) -> &'self str;
fn trim_chars<C: CharEq>(&self, to_trim: &C) -> &'a str;
/// Returns a string with leading `chars_to_trim` removed.
///
@ -1744,7 +1744,7 @@ pub trait StrSlice<'self> {
/// assert_eq!("12foo1bar12".trim_left_chars(& &['1', '2']), "foo1bar12")
/// assert_eq!("123foo1bar123".trim_left_chars(&|c: char| c.is_digit()), "foo1bar123")
/// ```
fn trim_left_chars<C: CharEq>(&self, to_trim: &C) -> &'self str;
fn trim_left_chars<C: CharEq>(&self, to_trim: &C) -> &'a str;
/// Returns a string with trailing `chars_to_trim` removed.
///
@ -1759,7 +1759,7 @@ pub trait StrSlice<'self> {
/// assert_eq!("12foo1bar12".trim_right_chars(& &['1', '2']), "12foo1bar")
/// assert_eq!("123foo1bar123".trim_right_chars(&|c: char| c.is_digit()), "123foo1bar")
/// ```
fn trim_right_chars<C: CharEq>(&self, to_trim: &C) -> &'self str;
fn trim_right_chars<C: CharEq>(&self, to_trim: &C) -> &'a str;
/// Replace all occurrences of one string with another.
///
@ -1891,7 +1891,7 @@ pub trait StrSlice<'self> {
fn char_at_reverse(&self, i: uint) -> char;
/// Work with the byte buffer of a string as a byte slice.
fn as_bytes(&self) -> &'self [u8];
fn as_bytes(&self) -> &'a [u8];
/// Returns the byte index of the first character of `self` that
/// matches `search`.
@ -1986,7 +1986,7 @@ pub trait StrSlice<'self> {
/// assert_eq!(c, 'ö');
/// assert_eq!(s2, "we 老虎 Léopard");
/// ```
fn slice_shift_char(&self) -> (char, &'self str);
fn slice_shift_char(&self) -> (char, &'a str);
/// Levenshtein Distance between two strings.
fn lev_distance(&self, t: &str) -> uint;
@ -2013,7 +2013,7 @@ pub trait StrSlice<'self> {
fn as_imm_buf<T>(&self, f: |*u8, uint| -> T) -> T;
}
impl<'self> StrSlice<'self> for &'self str {
impl<'a> StrSlice<'a> for &'a str {
#[inline]
fn contains<'a>(&self, needle: &'a str) -> bool {
self.find_str(needle).is_some()
@ -2025,37 +2025,37 @@ impl<'self> StrSlice<'self> for &'self str {
}
#[inline]
fn chars(&self) -> CharIterator<'self> {
fn chars(&self) -> CharIterator<'a> {
CharIterator{string: *self}
}
#[inline]
fn chars_rev(&self) -> CharRevIterator<'self> {
fn chars_rev(&self) -> CharRevIterator<'a> {
self.chars().invert()
}
#[inline]
fn bytes(&self) -> ByteIterator<'self> {
fn bytes(&self) -> ByteIterator<'a> {
self.as_bytes().iter().map(|&b| b)
}
#[inline]
fn bytes_rev(&self) -> ByteRevIterator<'self> {
fn bytes_rev(&self) -> ByteRevIterator<'a> {
self.bytes().invert()
}
#[inline]
fn char_indices(&self) -> CharOffsetIterator<'self> {
fn char_indices(&self) -> CharOffsetIterator<'a> {
CharOffsetIterator{string: *self, iter: self.chars()}
}
#[inline]
fn char_indices_rev(&self) -> CharOffsetRevIterator<'self> {
fn char_indices_rev(&self) -> CharOffsetRevIterator<'a> {
self.char_indices().invert()
}
#[inline]
fn split<Sep: CharEq>(&self, sep: Sep) -> CharSplitIterator<'self, Sep> {
fn split<Sep: CharEq>(&self, sep: Sep) -> CharSplitIterator<'a, Sep> {
CharSplitIterator {
string: *self,
only_ascii: sep.only_ascii(),
@ -2067,7 +2067,7 @@ impl<'self> StrSlice<'self> for &'self str {
#[inline]
fn splitn<Sep: CharEq>(&self, sep: Sep, count: uint)
-> CharSplitNIterator<'self, Sep> {
-> CharSplitNIterator<'a, Sep> {
CharSplitNIterator {
iter: self.split(sep),
count: count,
@ -2077,7 +2077,7 @@ impl<'self> StrSlice<'self> for &'self str {
#[inline]
fn split_terminator<Sep: CharEq>(&self, sep: Sep)
-> CharSplitIterator<'self, Sep> {
-> CharSplitIterator<'a, Sep> {
CharSplitIterator {
allow_trailing_empty: false,
..self.split(sep)
@ -2085,13 +2085,13 @@ impl<'self> StrSlice<'self> for &'self str {
}
#[inline]
fn rsplit<Sep: CharEq>(&self, sep: Sep) -> CharRSplitIterator<'self, Sep> {
fn rsplit<Sep: CharEq>(&self, sep: Sep) -> CharRSplitIterator<'a, Sep> {
self.split(sep).invert()
}
#[inline]
fn rsplitn<Sep: CharEq>(&self, sep: Sep, count: uint)
-> CharSplitNIterator<'self, Sep> {
-> CharSplitNIterator<'a, Sep> {
CharSplitNIterator {
iter: self.split(sep),
count: count,
@ -2100,7 +2100,7 @@ impl<'self> StrSlice<'self> for &'self str {
}
#[inline]
fn match_indices(&self, sep: &'self str) -> MatchesIndexIterator<'self> {
fn match_indices(&self, sep: &'a str) -> MatchesIndexIterator<'a> {
assert!(!sep.is_empty())
MatchesIndexIterator {
haystack: *self,
@ -2110,7 +2110,7 @@ impl<'self> StrSlice<'self> for &'self str {
}
#[inline]
fn split_str(&self, sep: &'self str) -> StrSplitIterator<'self> {
fn split_str(&self, sep: &'a str) -> StrSplitIterator<'a> {
StrSplitIterator {
it: self.match_indices(sep),
last_end: 0,
@ -2119,11 +2119,11 @@ impl<'self> StrSlice<'self> for &'self str {
}
#[inline]
fn lines(&self) -> CharSplitIterator<'self, char> {
fn lines(&self) -> CharSplitIterator<'a, char> {
self.split_terminator('\n')
}
fn lines_any(&self) -> AnyLineIterator<'self> {
fn lines_any(&self) -> AnyLineIterator<'a> {
self.lines().map(|line| {
let l = line.len();
if l > 0 && line[l - 1] == '\r' as u8 { line.slice(0, l - 1) }
@ -2132,12 +2132,12 @@ impl<'self> StrSlice<'self> for &'self str {
}
#[inline]
fn words(&self) -> WordIterator<'self> {
fn words(&self) -> WordIterator<'a> {
self.split(char::is_whitespace).filter(|s| !s.is_empty())
}
#[inline]
fn nfd_chars(&self) -> NormalizationIterator<'self> {
fn nfd_chars(&self) -> NormalizationIterator<'a> {
NormalizationIterator {
iter: self.chars(),
buffer: ~[],
@ -2147,7 +2147,7 @@ impl<'self> StrSlice<'self> for &'self str {
}
#[inline]
fn nfkd_chars(&self) -> NormalizationIterator<'self> {
fn nfkd_chars(&self) -> NormalizationIterator<'a> {
NormalizationIterator {
iter: self.chars(),
buffer: ~[],
@ -2166,23 +2166,23 @@ impl<'self> StrSlice<'self> for &'self str {
fn char_len(&self) -> uint { self.chars().len() }
#[inline]
fn slice(&self, begin: uint, end: uint) -> &'self str {
fn slice(&self, begin: uint, end: uint) -> &'a str {
assert!(self.is_char_boundary(begin) && self.is_char_boundary(end));
unsafe { raw::slice_bytes(*self, begin, end) }
}
#[inline]
fn slice_from(&self, begin: uint) -> &'self str {
fn slice_from(&self, begin: uint) -> &'a str {
self.slice(begin, self.len())
}
#[inline]
fn slice_to(&self, end: uint) -> &'self str {
fn slice_to(&self, end: uint) -> &'a str {
assert!(self.is_char_boundary(end));
unsafe { raw::slice_bytes(*self, 0, end) }
}
fn slice_chars(&self, begin: uint, end: uint) -> &'self str {
fn slice_chars(&self, begin: uint, end: uint) -> &'a str {
assert!(begin <= end);
let mut count = 0;
let mut begin_byte = None;
@ -2236,27 +2236,27 @@ impl<'self> StrSlice<'self> for &'self str {
}
#[inline]
fn trim(&self) -> &'self str {
fn trim(&self) -> &'a str {
self.trim_left().trim_right()
}
#[inline]
fn trim_left(&self) -> &'self str {
fn trim_left(&self) -> &'a str {
self.trim_left_chars(&char::is_whitespace)
}
#[inline]
fn trim_right(&self) -> &'self str {
fn trim_right(&self) -> &'a str {
self.trim_right_chars(&char::is_whitespace)
}
#[inline]
fn trim_chars<C: CharEq>(&self, to_trim: &C) -> &'self str {
fn trim_chars<C: CharEq>(&self, to_trim: &C) -> &'a str {
self.trim_left_chars(to_trim).trim_right_chars(to_trim)
}
#[inline]
fn trim_left_chars<C: CharEq>(&self, to_trim: &C) -> &'self str {
fn trim_left_chars<C: CharEq>(&self, to_trim: &C) -> &'a str {
match self.find(|c: char| !to_trim.matches(c)) {
None => "",
Some(first) => unsafe { raw::slice_bytes(*self, first, self.len()) }
@ -2264,7 +2264,7 @@ impl<'self> StrSlice<'self> for &'self str {
}
#[inline]
fn trim_right_chars<C: CharEq>(&self, to_trim: &C) -> &'self str {
fn trim_right_chars<C: CharEq>(&self, to_trim: &C) -> &'a str {
match self.rfind(|c: char| !to_trim.matches(c)) {
None => "",
Some(last) => {
@ -2408,7 +2408,7 @@ impl<'self> StrSlice<'self> for &'self str {
}
#[inline]
fn as_bytes(&self) -> &'self [u8] {
fn as_bytes(&self) -> &'a [u8] {
unsafe { cast::transmute(*self) }
}
@ -2453,7 +2453,7 @@ impl<'self> StrSlice<'self> for &'self str {
}
#[inline]
fn slice_shift_char(&self) -> (char, &'self str) {
fn slice_shift_char(&self) -> (char, &'a str) {
let CharRange {ch, next} = self.char_range_at(0u);
let next_s = unsafe { raw::slice_bytes(*self, next, self.len()) };
return (ch, next_s);
@ -2756,8 +2756,8 @@ impl Extendable<char> for ~str {
}
// This works because every lifetime is a sub-lifetime of 'static
impl<'self> Default for &'self str {
fn default() -> &'self str { "" }
impl<'a> Default for &'a str {
fn default() -> &'a str { "" }
}
impl Default for ~str {

View File

@ -22,7 +22,7 @@ use rc::Rc;
use str::{Str, StrSlice};
use vec::{Vector, ImmutableVector};
pub type Cb<'self> = 'self |buf: &[u8]| -> bool;
pub type Cb<'a> = 'a |buf: &[u8]| -> bool;
///
/// A trait to implement in order to make a type hashable;
@ -219,7 +219,7 @@ impl IterBytes for f64 {
}
}
impl<'self,A:IterBytes> IterBytes for &'self [A] {
impl<'a,A:IterBytes> IterBytes for &'a [A] {
#[inline]
fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool {
self.len().iter_bytes(lsb0, |b| f(b)) &&
@ -273,7 +273,7 @@ impl<A:IterBytes> IterBytes for @[A] {
}
}
impl<'self> IterBytes for &'self str {
impl<'a> IterBytes for &'a str {
#[inline]
fn iter_bytes(&self, _lsb0: bool, f: Cb) -> bool {
// Terminate the string with a byte that does not appear in UTF-8
@ -305,7 +305,7 @@ impl<A:IterBytes> IterBytes for Option<A> {
}
}
impl<'self,A:IterBytes> IterBytes for &'self A {
impl<'a,A:IterBytes> IterBytes for &'a A {
#[inline]
fn iter_bytes(&self, lsb0: bool, f: Cb) -> bool {
(**self).iter_bytes(lsb0, f)

View File

@ -121,7 +121,7 @@ impl<A:ToStr,B:ToStr,C:ToStr> ToStr for (A, B, C) {
}
}
impl<'self,A:ToStr> ToStr for &'self [A] {
impl<'a,A:ToStr> ToStr for &'a [A] {
#[inline]
fn to_str(&self) -> ~str {
let mut acc = ~"[";

View File

@ -443,14 +443,14 @@ fn remove<T>(count: &mut uint, child: &mut Child<T>, key: uint,
}
/// Forward iterator over a map
pub struct TrieMapIterator<'self, T> {
priv stack: ~[vec::VecIterator<'self, Child<T>>],
pub struct TrieMapIterator<'a, T> {
priv stack: ~[vec::VecIterator<'a, Child<T>>],
priv remaining_min: uint,
priv remaining_max: uint
}
impl<'self, T> Iterator<(uint, &'self T)> for TrieMapIterator<'self, T> {
fn next(&mut self) -> Option<(uint, &'self T)> {
impl<'a, T> Iterator<(uint, &'a T)> for TrieMapIterator<'a, T> {
fn next(&mut self) -> Option<(uint, &'a T)> {
while !self.stack.is_empty() {
match self.stack[self.stack.len() - 1].next() {
None => {
@ -483,11 +483,11 @@ impl<'self, T> Iterator<(uint, &'self T)> for TrieMapIterator<'self, T> {
}
/// Forward iterator over a set
pub struct TrieSetIterator<'self> {
priv iter: TrieMapIterator<'self, ()>
pub struct TrieSetIterator<'a> {
priv iter: TrieMapIterator<'a, ()>
}
impl<'self> Iterator<uint> for TrieSetIterator<'self> {
impl<'a> Iterator<uint> for TrieSetIterator<'a> {
fn next(&mut self) -> Option<uint> {
self.iter.next().map(|(key, _)| key)
}

View File

@ -62,7 +62,7 @@ impl DynamicLibrary {
/// Access the value at the symbol of the dynamic library
pub unsafe fn symbol<T>(&self, symbol: &str) -> Result<T, ~str> {
// This function should have a lifetime constraint of 'self on
// This function should have a lifetime constraint of 'a on
// T but that feature is still unimplemented
let maybe_symbol_value = dl::check_for_errors_in(|| {

View File

@ -44,7 +44,7 @@ macro_rules! finally_fn {
}
}
impl<'self,T> Finally<T> for 'self || -> T {
impl<'a,T> Finally<T> for 'a || -> T {
fn finally(&self, dtor: ||) -> T {
let _d = Finallyalizer {
dtor: dtor
@ -56,12 +56,12 @@ impl<'self,T> Finally<T> for 'self || -> T {
finally_fn!(extern "Rust" fn() -> T)
struct Finallyalizer<'self> {
dtor: 'self ||
struct Finallyalizer<'a> {
dtor: 'a ||
}
#[unsafe_destructor]
impl<'self> Drop for Finallyalizer<'self> {
impl<'a> Drop for Finallyalizer<'a> {
fn drop(&mut self) {
(self.dtor)();
}

View File

@ -53,8 +53,8 @@ pub trait Repr<T> {
fn repr(&self) -> T { unsafe { cast::transmute_copy(self) } }
}
impl<'self, T> Repr<Slice<T>> for &'self [T] {}
impl<'self> Repr<Slice<u8>> for &'self str {}
impl<'a, T> Repr<Slice<T>> for &'a [T] {}
impl<'a> Repr<Slice<u8>> for &'a str {}
impl<T> Repr<*Box<T>> for @T {}
impl<T> Repr<*Box<Vec<T>>> for @[T] {}
impl Repr<*String> for ~str {}

View File

@ -219,16 +219,16 @@ pub fn build<A>(size: Option<uint>, builder: |push: |v: A||) -> ~[A] {
/// An iterator over the slices of a vector separated by elements that
/// match a predicate function.
pub struct SplitIterator<'self, T> {
priv v: &'self [T],
pub struct SplitIterator<'a, T> {
priv v: &'a [T],
priv n: uint,
priv pred: 'self |t: &T| -> bool,
priv pred: 'a |t: &T| -> bool,
priv finished: bool
}
impl<'self, T> Iterator<&'self [T]> for SplitIterator<'self, T> {
impl<'a, T> Iterator<&'a [T]> for SplitIterator<'a, T> {
#[inline]
fn next(&mut self) -> Option<&'self [T]> {
fn next(&mut self) -> Option<&'a [T]> {
if self.finished { return None; }
if self.n == 0 {
@ -268,16 +268,16 @@ impl<'self, T> Iterator<&'self [T]> for SplitIterator<'self, T> {
/// An iterator over the slices of a vector separated by elements that
/// match a predicate function, from back to front.
pub struct RSplitIterator<'self, T> {
priv v: &'self [T],
pub struct RSplitIterator<'a, T> {
priv v: &'a [T],
priv n: uint,
priv pred: 'self |t: &T| -> bool,
priv pred: 'a |t: &T| -> bool,
priv finished: bool
}
impl<'self, T> Iterator<&'self [T]> for RSplitIterator<'self, T> {
impl<'a, T> Iterator<&'a [T]> for RSplitIterator<'a, T> {
#[inline]
fn next(&mut self) -> Option<&'self [T]> {
fn next(&mut self) -> Option<&'a [T]> {
if self.finished { return None; }
if self.n == 0 {
@ -355,7 +355,7 @@ pub trait VectorVector<T> {
fn connect_vec(&self, sep: &T) -> ~[T];
}
impl<'self, T: Clone, V: Vector<T>> VectorVector<T> for &'self [V] {
impl<'a, T: Clone, V: Vector<T>> VectorVector<T> for &'a [V] {
fn concat_vec(&self) -> ~[T] {
let size = self.iter().fold(0u, |acc, v| acc + v.as_slice().len());
let mut result = with_capacity(size);
@ -503,14 +503,14 @@ impl<T: Clone> Iterator<~[T]> for Permutations<T> {
/// An iterator over the (overlapping) slices of length `size` within
/// a vector.
#[deriving(Clone)]
pub struct WindowIter<'self, T> {
priv v: &'self [T],
pub struct WindowIter<'a, T> {
priv v: &'a [T],
priv size: uint
}
impl<'self, T> Iterator<&'self [T]> for WindowIter<'self, T> {
impl<'a, T> Iterator<&'a [T]> for WindowIter<'a, T> {
#[inline]
fn next(&mut self) -> Option<&'self [T]> {
fn next(&mut self) -> Option<&'a [T]> {
if self.size > self.v.len() {
None
} else {
@ -537,14 +537,14 @@ impl<'self, T> Iterator<&'self [T]> for WindowIter<'self, T> {
/// When the vector len is not evenly divided by the chunk size,
/// the last slice of the iteration will be the remainder.
#[deriving(Clone)]
pub struct ChunkIter<'self, T> {
priv v: &'self [T],
pub struct ChunkIter<'a, T> {
priv v: &'a [T],
priv size: uint
}
impl<'self, T> Iterator<&'self [T]> for ChunkIter<'self, T> {
impl<'a, T> Iterator<&'a [T]> for ChunkIter<'a, T> {
#[inline]
fn next(&mut self) -> Option<&'self [T]> {
fn next(&mut self) -> Option<&'a [T]> {
if self.v.len() == 0 {
None
} else {
@ -568,9 +568,9 @@ impl<'self, T> Iterator<&'self [T]> for ChunkIter<'self, T> {
}
}
impl<'self, T> DoubleEndedIterator<&'self [T]> for ChunkIter<'self, T> {
impl<'a, T> DoubleEndedIterator<&'a [T]> for ChunkIter<'a, T> {
#[inline]
fn next_back(&mut self) -> Option<&'self [T]> {
fn next_back(&mut self) -> Option<&'a [T]> {
if self.v.len() == 0 {
None
} else {
@ -584,14 +584,14 @@ impl<'self, T> DoubleEndedIterator<&'self [T]> for ChunkIter<'self, T> {
}
}
impl<'self, T> RandomAccessIterator<&'self [T]> for ChunkIter<'self, T> {
impl<'a, T> RandomAccessIterator<&'a [T]> for ChunkIter<'a, T> {
#[inline]
fn indexable(&self) -> uint {
self.v.len()/self.size + if self.v.len() % self.size != 0 { 1 } else { 0 }
}
#[inline]
fn idx(&self, index: uint) -> Option<&'self [T]> {
fn idx(&self, index: uint) -> Option<&'a [T]> {
if index < self.indexable() {
let lo = index * self.size;
let mut hi = lo + self.size;
@ -616,12 +616,12 @@ pub mod traits {
use iter::order;
use ops::Add;
impl<'self,T:Eq> Eq for &'self [T] {
fn eq(&self, other: & &'self [T]) -> bool {
impl<'a,T:Eq> Eq for &'a [T] {
fn eq(&self, other: & &'a [T]) -> bool {
self.len() == other.len() &&
order::eq(self.iter(), other.iter())
}
fn ne(&self, other: & &'self [T]) -> bool {
fn ne(&self, other: & &'a [T]) -> bool {
self.len() != other.len() ||
order::ne(self.iter(), other.iter())
}
@ -641,8 +641,8 @@ pub mod traits {
fn ne(&self, other: &@[T]) -> bool { !self.eq(other) }
}
impl<'self,T:TotalEq> TotalEq for &'self [T] {
fn equals(&self, other: & &'self [T]) -> bool {
impl<'a,T:TotalEq> TotalEq for &'a [T] {
fn equals(&self, other: & &'a [T]) -> bool {
self.len() == other.len() &&
order::equals(self.iter(), other.iter())
}
@ -658,23 +658,23 @@ pub mod traits {
fn equals(&self, other: &@[T]) -> bool { self.as_slice().equals(&other.as_slice()) }
}
impl<'self,T:Eq, V: Vector<T>> Equiv<V> for &'self [T] {
impl<'a,T:Eq, V: Vector<T>> Equiv<V> for &'a [T] {
#[inline]
fn equiv(&self, other: &V) -> bool { self.as_slice() == other.as_slice() }
}
impl<'self,T:Eq, V: Vector<T>> Equiv<V> for ~[T] {
impl<'a,T:Eq, V: Vector<T>> Equiv<V> for ~[T] {
#[inline]
fn equiv(&self, other: &V) -> bool { self.as_slice() == other.as_slice() }
}
impl<'self,T:Eq, V: Vector<T>> Equiv<V> for @[T] {
impl<'a,T:Eq, V: Vector<T>> Equiv<V> for @[T] {
#[inline]
fn equiv(&self, other: &V) -> bool { self.as_slice() == other.as_slice() }
}
impl<'self,T:TotalOrd> TotalOrd for &'self [T] {
fn cmp(&self, other: & &'self [T]) -> Ordering {
impl<'a,T:TotalOrd> TotalOrd for &'a [T] {
fn cmp(&self, other: & &'a [T]) -> Ordering {
order::cmp(self.iter(), other.iter())
}
}
@ -689,20 +689,20 @@ pub mod traits {
fn cmp(&self, other: &@[T]) -> Ordering { self.as_slice().cmp(&other.as_slice()) }
}
impl<'self, T: Eq + Ord> Ord for &'self [T] {
fn lt(&self, other: & &'self [T]) -> bool {
impl<'a, T: Eq + Ord> Ord for &'a [T] {
fn lt(&self, other: & &'a [T]) -> bool {
order::lt(self.iter(), other.iter())
}
#[inline]
fn le(&self, other: & &'self [T]) -> bool {
fn le(&self, other: & &'a [T]) -> bool {
order::le(self.iter(), other.iter())
}
#[inline]
fn ge(&self, other: & &'self [T]) -> bool {
fn ge(&self, other: & &'a [T]) -> bool {
order::ge(self.iter(), other.iter())
}
#[inline]
fn gt(&self, other: & &'self [T]) -> bool {
fn gt(&self, other: & &'a [T]) -> bool {
order::gt(self.iter(), other.iter())
}
}
@ -729,7 +729,7 @@ pub mod traits {
fn gt(&self, other: &@[T]) -> bool { self.as_slice() > other.as_slice() }
}
impl<'self,T:Clone, V: Vector<T>> Add<V, ~[T]> for &'self [T] {
impl<'a,T:Clone, V: Vector<T>> Add<V, ~[T]> for &'a [T] {
#[inline]
fn add(&self, rhs: &V) -> ~[T] {
let mut res = with_capacity(self.len() + rhs.as_slice().len());
@ -756,7 +756,7 @@ pub trait Vector<T> {
fn as_slice<'a>(&'a self) -> &'a [T];
}
impl<'self,T> Vector<T> for &'self [T] {
impl<'a,T> Vector<T> for &'a [T] {
#[inline(always)]
fn as_slice<'a>(&'a self) -> &'a [T] { *self }
}
@ -771,7 +771,7 @@ impl<T> Vector<T> for @[T] {
fn as_slice<'a>(&'a self) -> &'a [T] { let v: &'a [T] = *self; v }
}
impl<'self, T> Container for &'self [T] {
impl<'a, T> Container for &'a [T] {
/// Returns the length of a vector
#[inline]
fn len(&self) -> uint {
@ -797,7 +797,7 @@ pub trait CopyableVector<T> {
}
/// Extension methods for vector slices
impl<'self, T: Clone> CopyableVector<T> for &'self [T] {
impl<'a, T: Clone> CopyableVector<T> for &'a [T] {
/// Returns a copy of `v`.
#[inline]
fn to_owned(&self) -> ~[T] {
@ -831,52 +831,52 @@ impl<T: Clone> CopyableVector<T> for @[T] {
}
/// Extension methods for vectors
pub trait ImmutableVector<'self, T> {
pub trait ImmutableVector<'a, T> {
/**
* Returns a slice of self between `start` and `end`.
*
* Fails when `start` or `end` point outside the bounds of self,
* or when `start` > `end`.
*/
fn slice(&self, start: uint, end: uint) -> &'self [T];
fn slice(&self, start: uint, end: uint) -> &'a [T];
/**
* Returns a slice of self from `start` to the end of the vec.
*
* Fails when `start` points outside the bounds of self.
*/
fn slice_from(&self, start: uint) -> &'self [T];
fn slice_from(&self, start: uint) -> &'a [T];
/**
* Returns a slice of self from the start of the vec to `end`.
*
* Fails when `end` points outside the bounds of self.
*/
fn slice_to(&self, end: uint) -> &'self [T];
fn slice_to(&self, end: uint) -> &'a [T];
/// Returns an iterator over the vector
fn iter(self) -> VecIterator<'self, T>;
fn iter(self) -> VecIterator<'a, T>;
/// Returns a reversed iterator over a vector
fn rev_iter(self) -> RevIterator<'self, T>;
fn rev_iter(self) -> RevIterator<'a, T>;
/// Returns an iterator over the subslices of the vector which are
/// separated by elements that match `pred`. The matched element
/// is not contained in the subslices.
fn split(self, pred: 'self |&T| -> bool) -> SplitIterator<'self, T>;
fn split(self, pred: 'a |&T| -> bool) -> SplitIterator<'a, T>;
/// Returns an iterator over the subslices of the vector which are
/// separated by elements that match `pred`, limited to splitting
/// at most `n` times. The matched element is not contained in
/// the subslices.
fn splitn(self, n: uint, pred: 'self |&T| -> bool) -> SplitIterator<'self, T>;
fn splitn(self, n: uint, pred: 'a |&T| -> bool) -> SplitIterator<'a, T>;
/// Returns an iterator over the subslices of the vector which are
/// separated by elements that match `pred`. This starts at the
/// end of the vector and works backwards. The matched element is
/// not contained in the subslices.
fn rsplit(self, pred: 'self |&T| -> bool) -> RSplitIterator<'self, T>;
fn rsplit(self, pred: 'a |&T| -> bool) -> RSplitIterator<'a, T>;
/// Returns an iterator over the subslices of the vector which are
/// separated by elements that match `pred` limited to splitting
/// at most `n` times. This starts at the end of the vector and
/// works backwards. The matched element is not contained in the
/// subslices.
fn rsplitn(self, n: uint, pred: 'self |&T| -> bool) -> RSplitIterator<'self, T>;
fn rsplitn(self, n: uint, pred: 'a |&T| -> bool) -> RSplitIterator<'a, T>;
/**
* Returns an iterator over all contiguous windows of length
@ -900,7 +900,7 @@ pub trait ImmutableVector<'self, T> {
* ```
*
*/
fn windows(self, size: uint) -> WindowIter<'self, T>;
fn windows(self, size: uint) -> WindowIter<'a, T>;
/**
*
* Returns an iterator over `size` elements of the vector at a
@ -925,27 +925,27 @@ pub trait ImmutableVector<'self, T> {
* ```
*
*/
fn chunks(self, size: uint) -> ChunkIter<'self, T>;
fn chunks(self, size: uint) -> ChunkIter<'a, T>;
/// Returns the element of a vector at the given index, or `None` if the
/// index is out of bounds
fn get_opt(&self, index: uint) -> Option<&'self T>;
fn get_opt(&self, index: uint) -> Option<&'a T>;
/// Returns the first element of a vector, failing if the vector is empty.
fn head(&self) -> &'self T;
fn head(&self) -> &'a T;
/// Returns the first element of a vector, or `None` if it is empty
fn head_opt(&self) -> Option<&'self T>;
fn head_opt(&self) -> Option<&'a T>;
/// Returns all but the first element of a vector
fn tail(&self) -> &'self [T];
fn tail(&self) -> &'a [T];
/// Returns all but the first `n' elements of a vector
fn tailn(&self, n: uint) -> &'self [T];
fn tailn(&self, n: uint) -> &'a [T];
/// Returns all but the last element of a vector
fn init(&self) -> &'self [T];
fn init(&self) -> &'a [T];
/// Returns all but the last `n' elemnts of a vector
fn initn(&self, n: uint) -> &'self [T];
fn initn(&self, n: uint) -> &'a [T];
/// Returns the last element of a vector, failing if the vector is empty.
fn last(&self) -> &'self T;
fn last(&self) -> &'a T;
/// Returns the last element of a vector, or `None` if it is empty.
fn last_opt(&self) -> Option<&'self T>;
fn last_opt(&self) -> Option<&'a T>;
/**
* Apply a function to each element of a vector and return a concatenation
* of each result vector
@ -995,7 +995,7 @@ pub trait ImmutableVector<'self, T> {
*
* Fails if slice is empty.
*/
fn shift_ref(&mut self) -> &'self T;
fn shift_ref(&mut self) -> &'a T;
/**
* Returns a mutable reference to the last element in this slice
@ -1012,12 +1012,12 @@ pub trait ImmutableVector<'self, T> {
*
* Fails if slice is empty.
*/
fn pop_ref(&mut self) -> &'self T;
fn pop_ref(&mut self) -> &'a T;
}
impl<'self,T> ImmutableVector<'self, T> for &'self [T] {
impl<'a,T> ImmutableVector<'a, T> for &'a [T] {
#[inline]
fn slice(&self, start: uint, end: uint) -> &'self [T] {
fn slice(&self, start: uint, end: uint) -> &'a [T] {
assert!(start <= end);
assert!(end <= self.len());
self.as_imm_buf(|p, _len| {
@ -1031,17 +1031,17 @@ impl<'self,T> ImmutableVector<'self, T> for &'self [T] {
}
#[inline]
fn slice_from(&self, start: uint) -> &'self [T] {
fn slice_from(&self, start: uint) -> &'a [T] {
self.slice(start, self.len())
}
#[inline]
fn slice_to(&self, end: uint) -> &'self [T] {
fn slice_to(&self, end: uint) -> &'a [T] {
self.slice(0, end)
}
#[inline]
fn iter(self) -> VecIterator<'self, T> {
fn iter(self) -> VecIterator<'a, T> {
unsafe {
let p = vec::raw::to_ptr(self);
if mem::size_of::<T>() == 0 {
@ -1057,17 +1057,17 @@ impl<'self,T> ImmutableVector<'self, T> for &'self [T] {
}
#[inline]
fn rev_iter(self) -> RevIterator<'self, T> {
fn rev_iter(self) -> RevIterator<'a, T> {
self.iter().invert()
}
#[inline]
fn split(self, pred: 'self |&T| -> bool) -> SplitIterator<'self, T> {
fn split(self, pred: 'a |&T| -> bool) -> SplitIterator<'a, T> {
self.splitn(uint::max_value, pred)
}
#[inline]
fn splitn(self, n: uint, pred: 'self |&T| -> bool) -> SplitIterator<'self, T> {
fn splitn(self, n: uint, pred: 'a |&T| -> bool) -> SplitIterator<'a, T> {
SplitIterator {
v: self,
n: n,
@ -1077,12 +1077,12 @@ impl<'self,T> ImmutableVector<'self, T> for &'self [T] {
}
#[inline]
fn rsplit(self, pred: 'self |&T| -> bool) -> RSplitIterator<'self, T> {
fn rsplit(self, pred: 'a |&T| -> bool) -> RSplitIterator<'a, T> {
self.rsplitn(uint::max_value, pred)
}
#[inline]
fn rsplitn(self, n: uint, pred: 'self |&T| -> bool) -> RSplitIterator<'self, T> {
fn rsplitn(self, n: uint, pred: 'a |&T| -> bool) -> RSplitIterator<'a, T> {
RSplitIterator {
v: self,
n: n,
@ -1092,57 +1092,57 @@ impl<'self,T> ImmutableVector<'self, T> for &'self [T] {
}
#[inline]
fn windows(self, size: uint) -> WindowIter<'self, T> {
fn windows(self, size: uint) -> WindowIter<'a, T> {
assert!(size != 0);
WindowIter { v: self, size: size }
}
#[inline]
fn chunks(self, size: uint) -> ChunkIter<'self, T> {
fn chunks(self, size: uint) -> ChunkIter<'a, T> {
assert!(size != 0);
ChunkIter { v: self, size: size }
}
#[inline]
fn get_opt(&self, index: uint) -> Option<&'self T> {
fn get_opt(&self, index: uint) -> Option<&'a T> {
if index < self.len() { Some(&self[index]) } else { None }
}
#[inline]
fn head(&self) -> &'self T {
fn head(&self) -> &'a T {
if self.len() == 0 { fail!("head: empty vector") }
&self[0]
}
#[inline]
fn head_opt(&self) -> Option<&'self T> {
fn head_opt(&self) -> Option<&'a T> {
if self.len() == 0 { None } else { Some(&self[0]) }
}
#[inline]
fn tail(&self) -> &'self [T] { self.slice(1, self.len()) }
fn tail(&self) -> &'a [T] { self.slice(1, self.len()) }
#[inline]
fn tailn(&self, n: uint) -> &'self [T] { self.slice(n, self.len()) }
fn tailn(&self, n: uint) -> &'a [T] { self.slice(n, self.len()) }
#[inline]
fn init(&self) -> &'self [T] {
fn init(&self) -> &'a [T] {
self.slice(0, self.len() - 1)
}
#[inline]
fn initn(&self, n: uint) -> &'self [T] {
fn initn(&self, n: uint) -> &'a [T] {
self.slice(0, self.len() - n)
}
#[inline]
fn last(&self) -> &'self T {
fn last(&self) -> &'a T {
if self.len() == 0 { fail!("last: empty vector") }
&self[self.len() - 1]
}
#[inline]
fn last_opt(&self) -> Option<&'self T> {
fn last_opt(&self) -> Option<&'a T> {
if self.len() == 0 { None } else { Some(&self[self.len() - 1]) }
}
@ -1185,14 +1185,14 @@ impl<'self,T> ImmutableVector<'self, T> for &'self [T] {
f(s.data, s.len)
}
fn shift_ref(&mut self) -> &'self T {
fn shift_ref(&mut self) -> &'a T {
unsafe {
let s: &mut Slice<T> = cast::transmute(self);
&*raw::shift_ptr(s)
}
}
fn pop_ref(&mut self) -> &'self T {
fn pop_ref(&mut self) -> &'a T {
unsafe {
let s: &mut Slice<T> = cast::transmute(self);
&*raw::pop_ptr(s)
@ -1218,7 +1218,7 @@ pub trait ImmutableEqVector<T:Eq> {
fn ends_with(&self, needle: &[T]) -> bool;
}
impl<'self,T:Eq> ImmutableEqVector<T> for &'self [T] {
impl<'a,T:Eq> ImmutableEqVector<T> for &'a [T] {
#[inline]
fn position_elem(&self, x: &T) -> Option<uint> {
self.iter().position(|y| *x == *y)
@ -1257,7 +1257,7 @@ pub trait ImmutableTotalOrdVector<T: TotalOrd> {
fn bsearch_elem(&self, x: &T) -> Option<uint>;
}
impl<'self, T: TotalOrd> ImmutableTotalOrdVector<T> for &'self [T] {
impl<'a, T: TotalOrd> ImmutableTotalOrdVector<T> for &'a [T] {
fn bsearch_elem(&self, x: &T) -> Option<uint> {
self.bsearch(|p| p.cmp(x))
}
@ -1278,7 +1278,7 @@ pub trait ImmutableCopyableVector<T> {
fn permutations(self) -> Permutations<T>;
}
impl<'self,T:Clone> ImmutableCopyableVector<T> for &'self [T] {
impl<'a,T:Clone> ImmutableCopyableVector<T> for &'a [T] {
#[inline]
fn partitioned(&self, f: |&T| -> bool) -> (~[T], ~[T]) {
let mut lefts = ~[];
@ -1913,34 +1913,34 @@ impl<T:Eq> OwnedEqVector<T> for ~[T] {
/// Extension methods for vectors such that their elements are
/// mutable.
pub trait MutableVector<'self, T> {
pub trait MutableVector<'a, T> {
/// Return a slice that points into another slice.
fn mut_slice(self, start: uint, end: uint) -> &'self mut [T];
fn mut_slice(self, start: uint, end: uint) -> &'a mut [T];
/**
* Returns a slice of self from `start` to the end of the vec.
*
* Fails when `start` points outside the bounds of self.
*/
fn mut_slice_from(self, start: uint) -> &'self mut [T];
fn mut_slice_from(self, start: uint) -> &'a mut [T];
/**
* Returns a slice of self from the start of the vec to `end`.
*
* Fails when `end` points outside the bounds of self.
*/
fn mut_slice_to(self, end: uint) -> &'self mut [T];
fn mut_slice_to(self, end: uint) -> &'a mut [T];
/// Returns an iterator that allows modifying each value
fn mut_iter(self) -> VecMutIterator<'self, T>;
fn mut_iter(self) -> VecMutIterator<'a, T>;
/// Returns a reversed iterator that allows modifying each value
fn mut_rev_iter(self) -> MutRevIterator<'self, T>;
fn mut_rev_iter(self) -> MutRevIterator<'a, T>;
/// Returns an iterator over the mutable subslices of the vector
/// which are separated by elements that match `pred`. The
/// matched element is not contained in the subslices.
fn mut_split(self, pred: 'self |&T| -> bool) -> MutSplitIterator<'self, T>;
fn mut_split(self, pred: 'a |&T| -> bool) -> MutSplitIterator<'a, T>;
/**
* Returns an iterator over `size` elements of the vector at a time.
@ -1952,7 +1952,7 @@ pub trait MutableVector<'self, T> {
*
* Fails if `size` is 0.
*/
fn mut_chunks(self, chunk_size: uint) -> MutChunkIter<'self, T>;
fn mut_chunks(self, chunk_size: uint) -> MutChunkIter<'a, T>;
/**
* Returns a mutable reference to the first element in this slice
@ -1969,7 +1969,7 @@ pub trait MutableVector<'self, T> {
*
* Fails if slice is empty.
*/
fn mut_shift_ref(&mut self) -> &'self mut T;
fn mut_shift_ref(&mut self) -> &'a mut T;
/**
* Returns a mutable reference to the last element in this slice
@ -1986,7 +1986,7 @@ pub trait MutableVector<'self, T> {
*
* Fails if slice is empty.
*/
fn mut_pop_ref(&mut self) -> &'self mut T;
fn mut_pop_ref(&mut self) -> &'a mut T;
/**
* Swaps two elements in a vector
@ -2004,8 +2004,8 @@ pub trait MutableVector<'self, T> {
* itself) and the second will contain all indices from
* `mid..len` (excluding the index `len` itself).
*/
fn mut_split_at(self, mid: uint) -> (&'self mut [T],
&'self mut [T]);
fn mut_split_at(self, mid: uint) -> (&'a mut [T],
&'a mut [T]);
/// Reverse the order of elements in a vector, in place
fn reverse(self);
@ -2034,9 +2034,9 @@ pub trait MutableVector<'self, T> {
fn as_mut_buf<U>(self, f: |*mut T, uint| -> U) -> U;
}
impl<'self,T> MutableVector<'self, T> for &'self mut [T] {
impl<'a,T> MutableVector<'a, T> for &'a mut [T] {
#[inline]
fn mut_slice(self, start: uint, end: uint) -> &'self mut [T] {
fn mut_slice(self, start: uint, end: uint) -> &'a mut [T] {
assert!(start <= end);
assert!(end <= self.len());
self.as_mut_buf(|p, _len| {
@ -2050,27 +2050,27 @@ impl<'self,T> MutableVector<'self, T> for &'self mut [T] {
}
#[inline]
fn mut_slice_from(self, start: uint) -> &'self mut [T] {
fn mut_slice_from(self, start: uint) -> &'a mut [T] {
let len = self.len();
self.mut_slice(start, len)
}
#[inline]
fn mut_slice_to(self, end: uint) -> &'self mut [T] {
fn mut_slice_to(self, end: uint) -> &'a mut [T] {
self.mut_slice(0, end)
}
#[inline]
fn mut_split_at(self, mid: uint) -> (&'self mut [T], &'self mut [T]) {
fn mut_split_at(self, mid: uint) -> (&'a mut [T], &'a mut [T]) {
unsafe {
let len = self.len();
let self2: &'self mut [T] = cast::transmute_copy(&self);
let self2: &'a mut [T] = cast::transmute_copy(&self);
(self.mut_slice(0, mid), self2.mut_slice(mid, len))
}
}
#[inline]
fn mut_iter(self) -> VecMutIterator<'self, T> {
fn mut_iter(self) -> VecMutIterator<'a, T> {
unsafe {
let p = vec::raw::to_mut_ptr(self);
if mem::size_of::<T>() == 0 {
@ -2086,30 +2086,30 @@ impl<'self,T> MutableVector<'self, T> for &'self mut [T] {
}
#[inline]
fn mut_rev_iter(self) -> MutRevIterator<'self, T> {
fn mut_rev_iter(self) -> MutRevIterator<'a, T> {
self.mut_iter().invert()
}
#[inline]
fn mut_split(self, pred: 'self |&T| -> bool) -> MutSplitIterator<'self, T> {
fn mut_split(self, pred: 'a |&T| -> bool) -> MutSplitIterator<'a, T> {
MutSplitIterator { v: self, pred: pred, finished: false }
}
#[inline]
fn mut_chunks(self, chunk_size: uint) -> MutChunkIter<'self, T> {
fn mut_chunks(self, chunk_size: uint) -> MutChunkIter<'a, T> {
assert!(chunk_size > 0);
let len = self.len();
MutChunkIter { v: self, chunk_size: chunk_size, remaining: len }
}
fn mut_shift_ref(&mut self) -> &'self mut T {
fn mut_shift_ref(&mut self) -> &'a mut T {
unsafe {
let s: &mut Slice<T> = cast::transmute(self);
cast::transmute_mut(&*raw::shift_ptr(s))
}
}
fn mut_pop_ref(&mut self) -> &'self mut T {
fn mut_pop_ref(&mut self) -> &'a mut T {
unsafe {
let s: &mut Slice<T> = cast::transmute(self);
cast::transmute_mut(&*raw::pop_ptr(s))
@ -2167,7 +2167,7 @@ pub trait MutableCloneableVector<T> {
fn copy_from(self, &[T]) -> uint;
}
impl<'self, T:Clone> MutableCloneableVector<T> for &'self mut [T] {
impl<'a, T:Clone> MutableCloneableVector<T> for &'a mut [T] {
#[inline]
fn copy_from(self, src: &[T]) -> uint {
for (a, b) in self.mut_iter().zip(src.iter()) {
@ -2368,7 +2368,7 @@ pub mod bytes {
fn set_memory(self, value: u8);
}
impl<'self> MutableByteVector for &'self mut [u8] {
impl<'a> MutableByteVector for &'a mut [u8] {
#[inline]
fn set_memory(self, value: u8) {
self.as_mut_buf(|p, len| {
@ -2483,8 +2483,8 @@ impl<A: DeepClone> DeepClone for ~[A] {
}
// This works because every lifetime is a sub-lifetime of 'static
impl<'self, A> Default for &'self [A] {
fn default() -> &'self [A] { &'self [] }
impl<'a, A> Default for &'a [A] {
fn default() -> &'a [A] { &'a [] }
}
impl<A> Default for ~[A] {
@ -2498,13 +2498,13 @@ impl<A> Default for @[A] {
macro_rules! iterator {
(struct $name:ident -> $ptr:ty, $elem:ty) => {
/// An iterator for iterating over a vector.
pub struct $name<'self, T> {
pub struct $name<'a, T> {
priv ptr: $ptr,
priv end: $ptr,
priv lifetime: Option<$elem> // FIXME: #5922
}
impl<'self, T> Iterator<$elem> for $name<'self, T> {
impl<'a, T> Iterator<$elem> for $name<'a, T> {
#[inline]
fn next(&mut self) -> Option<$elem> {
// could be implemented with slices, but this avoids bounds checks
@ -2535,7 +2535,7 @@ macro_rules! iterator {
}
}
impl<'self, T> DoubleEndedIterator<$elem> for $name<'self, T> {
impl<'a, T> DoubleEndedIterator<$elem> for $name<'a, T> {
#[inline]
fn next_back(&mut self) -> Option<$elem> {
// could be implemented with slices, but this avoids bounds checks
@ -2557,7 +2557,7 @@ macro_rules! iterator {
}
}
impl<'self, T> RandomAccessIterator<&'self T> for VecIterator<'self, T> {
impl<'a, T> RandomAccessIterator<&'a T> for VecIterator<'a, T> {
#[inline]
fn indexable(&self) -> uint {
let (exact, _) = self.size_hint();
@ -2565,7 +2565,7 @@ impl<'self, T> RandomAccessIterator<&'self T> for VecIterator<'self, T> {
}
#[inline]
fn idx(&self, index: uint) -> Option<&'self T> {
fn idx(&self, index: uint) -> Option<&'a T> {
unsafe {
if index < self.indexable() {
cast::transmute(self.ptr.offset(index as int))
@ -2576,30 +2576,30 @@ impl<'self, T> RandomAccessIterator<&'self T> for VecIterator<'self, T> {
}
}
iterator!{struct VecIterator -> *T, &'self T}
pub type RevIterator<'self, T> = Invert<VecIterator<'self, T>>;
iterator!{struct VecIterator -> *T, &'a T}
pub type RevIterator<'a, T> = Invert<VecIterator<'a, T>>;
impl<'self, T> ExactSize<&'self T> for VecIterator<'self, T> {}
impl<'self, T> ExactSize<&'self mut T> for VecMutIterator<'self, T> {}
impl<'a, T> ExactSize<&'a T> for VecIterator<'a, T> {}
impl<'a, T> ExactSize<&'a mut T> for VecMutIterator<'a, T> {}
impl<'self, T> Clone for VecIterator<'self, T> {
fn clone(&self) -> VecIterator<'self, T> { *self }
impl<'a, T> Clone for VecIterator<'a, T> {
fn clone(&self) -> VecIterator<'a, T> { *self }
}
iterator!{struct VecMutIterator -> *mut T, &'self mut T}
pub type MutRevIterator<'self, T> = Invert<VecMutIterator<'self, T>>;
iterator!{struct VecMutIterator -> *mut T, &'a mut T}
pub type MutRevIterator<'a, T> = Invert<VecMutIterator<'a, T>>;
/// An iterator over the subslices of the vector which are separated
/// by elements that match `pred`.
pub struct MutSplitIterator<'self, T> {
priv v: &'self mut [T],
priv pred: 'self |t: &T| -> bool,
pub struct MutSplitIterator<'a, T> {
priv v: &'a mut [T],
priv pred: 'a |t: &T| -> bool,
priv finished: bool
}
impl<'self, T> Iterator<&'self mut [T]> for MutSplitIterator<'self, T> {
impl<'a, T> Iterator<&'a mut [T]> for MutSplitIterator<'a, T> {
#[inline]
fn next(&mut self) -> Option<&'self mut [T]> {
fn next(&mut self) -> Option<&'a mut [T]> {
if self.finished { return None; }
match self.v.iter().position(|x| (self.pred)(x)) {
@ -2632,9 +2632,9 @@ impl<'self, T> Iterator<&'self mut [T]> for MutSplitIterator<'self, T> {
}
}
impl<'self, T> DoubleEndedIterator<&'self mut [T]> for MutSplitIterator<'self, T> {
impl<'a, T> DoubleEndedIterator<&'a mut [T]> for MutSplitIterator<'a, T> {
#[inline]
fn next_back(&mut self) -> Option<&'self mut [T]> {
fn next_back(&mut self) -> Option<&'a mut [T]> {
if self.finished { return None; }
match self.v.iter().rposition(|x| (self.pred)(x)) {
@ -2659,15 +2659,15 @@ impl<'self, T> DoubleEndedIterator<&'self mut [T]> for MutSplitIterator<'self, T
/// An iterator over a vector in (non-overlapping) mutable chunks (`size` elements at a time). When
/// the vector len is not evenly divided by the chunk size, the last slice of the iteration will be
/// the remainder.
pub struct MutChunkIter<'self, T> {
priv v: &'self mut [T],
pub struct MutChunkIter<'a, T> {
priv v: &'a mut [T],
priv chunk_size: uint,
priv remaining: uint
}
impl<'self, T> Iterator<&'self mut [T]> for MutChunkIter<'self, T> {
impl<'a, T> Iterator<&'a mut [T]> for MutChunkIter<'a, T> {
#[inline]
fn next(&mut self) -> Option<&'self mut [T]> {
fn next(&mut self) -> Option<&'a mut [T]> {
if self.remaining == 0 {
None
} else {
@ -2692,9 +2692,9 @@ impl<'self, T> Iterator<&'self mut [T]> for MutChunkIter<'self, T> {
}
}
impl<'self, T> DoubleEndedIterator<&'self mut [T]> for MutChunkIter<'self, T> {
impl<'a, T> DoubleEndedIterator<&'a mut [T]> for MutChunkIter<'a, T> {
#[inline]
fn next_back(&mut self) -> Option<&'self mut [T]> {
fn next_back(&mut self) -> Option<&'a mut [T]> {
if self.remaining == 0 {
None
} else {

Some files were not shown because too many files have changed in this diff Show More