From 299995c2b62c520708d450e4b7c6d360be0fd852 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 14 Mar 2013 11:22:51 -0700 Subject: [PATCH] librustc: Convert all uses of old lifetime notation to new lifetime notation. rs=delifetiming --- src/libcore/at_vec.rs | 4 +- src/libcore/cast.rs | 12 +- src/libcore/cleanup.rs | 4 +- src/libcore/condition.rs | 10 +- src/libcore/container.rs | 2 +- src/libcore/gc.rs | 2 +- src/libcore/hashmap.rs | 16 +-- src/libcore/io.rs | 2 +- src/libcore/iter.rs | 2 +- src/libcore/option.rs | 20 +-- src/libcore/os.rs | 44 +++---- src/libcore/pipes.rs | 2 +- src/libcore/ptr.rs | 18 +-- src/libcore/reflect.rs | 16 +-- src/libcore/result.rs | 4 +- src/libcore/rt/io.rs | 2 +- src/libcore/rt/sched.rs | 8 +- src/libcore/rt/uv.rs | 2 +- src/libcore/rt/uvio.rs | 4 +- src/libcore/str.rs | 70 +++++------ src/libcore/sys.rs | 2 +- src/libcore/task/local_data.rs | 2 +- src/libcore/task/spawn.rs | 2 +- src/libcore/to_bytes.rs | 10 +- src/libcore/to_str.rs | 4 +- src/libcore/trie.rs | 12 +- src/libcore/tuple.rs | 10 +- src/libcore/unstable.rs | 2 +- src/libcore/unstable/finally.rs | 4 +- src/libcore/unstable/global.rs | 2 +- src/libcore/vec.rs | 114 +++++++++--------- src/librust/rust.rc | 14 +-- src/librustc/front/core_inject.rs | 2 +- src/librustc/front/test.rs | 20 ++- src/librustc/metadata/decoder.rs | 4 +- src/librustc/metadata/encoder.rs | 2 +- src/librustc/metadata/filesearch.rs | 2 +- src/librustc/metadata/tydecode.rs | 2 +- src/librustc/middle/borrowck/gather_loans.rs | 2 +- src/librustc/middle/borrowck/preserve.rs | 2 +- src/librustc/middle/kind.rs | 2 +- src/librustc/middle/lang_items.rs | 6 +- src/librustc/middle/lint.rs | 8 +- src/librustc/middle/region.rs | 14 +-- src/librustc/middle/resolve.rs | 2 +- src/librustc/middle/trans/_match.rs | 4 +- src/librustc/middle/trans/callee.rs | 4 +- src/librustc/middle/trans/datum.rs | 2 +- src/librustc/middle/trans/tvec.rs | 2 +- src/librustc/middle/ty.rs | 4 +- src/librustc/middle/typeck/astconv.rs | 2 +- src/librustc/middle/typeck/check/method.rs | 2 +- src/librustc/middle/typeck/check/regionck.rs | 4 +- src/librustc/middle/typeck/coherence.rs | 4 +- src/librustc/middle/typeck/collect.rs | 4 +- src/librustc/middle/typeck/infer/lattice.rs | 4 +- .../middle/typeck/infer/region_inference.rs | 38 +++--- src/librustc/middle/typeck/infer/unify.rs | 16 +-- src/libstd/arc.rs | 14 +-- src/libstd/arena.rs | 6 +- src/libstd/base64.rs | 4 +- src/libstd/bigint.rs | 40 +++--- src/libstd/deque.rs | 8 +- src/libstd/future.rs | 2 +- src/libstd/json.rs | 6 +- src/libstd/priority_queue.rs | 4 +- src/libstd/serialize.rs | 6 +- src/libstd/smallintmap.rs | 12 +- src/libstd/sort.rs | 16 +-- src/libstd/stats.rs | 2 +- src/libstd/sync.rs | 24 ++-- src/libstd/test.rs | 2 +- src/libstd/treemap.rs | 28 ++--- src/libsyntax/ext/base.rs | 4 +- src/libsyntax/ext/deriving.rs | 4 +- src/libsyntax/ext/quote.rs | 6 + src/libsyntax/opt_vec.rs | 2 +- src/libsyntax/parse/parser.rs | 2 +- src/test/auxiliary/cci_const.rs | 2 +- .../compile-fail/borrowck-addr-of-upvar.rs | 4 +- .../const-cast-different-types.rs | 2 +- src/test/compile-fail/issue-2149.rs | 2 +- src/test/compile-fail/issue-2478.rs | 2 +- src/test/compile-fail/issue-3243.rs | 2 +- src/test/compile-fail/issue-3311.rs | 2 +- src/test/compile-fail/issue-3563.rs | 2 +- src/test/compile-fail/issue-3888.rs | 2 +- src/test/compile-fail/issue-4335.rs | 2 +- src/test/compile-fail/issue-4523.rs | 2 +- .../kindck-owned-trait-contains.rs | 4 +- .../compile-fail/kindck-owned-trait-scoped.rs | 2 +- src/test/compile-fail/regions-addr-of-self.rs | 4 +- src/test/compile-fail/regions-blk.rs | 6 +- src/test/compile-fail/regions-fn-bound.rs | 2 +- src/test/compile-fail/regions-fn-subtyping.rs | 50 ++++---- src/test/compile-fail/regions-fns.rs | 4 +- src/test/compile-fail/regions-freevar.rs | 2 +- .../regions-infer-borrow-scope-too-big.rs | 2 +- .../regions-infer-borrow-scope-within-loop.rs | 2 +- src/test/compile-fail/regions-infer-call-3.rs | 4 +- ...regions-infer-contravariance-due-to-ret.rs | 2 +- .../regions-infer-covariance-due-to-arg.rs | 2 +- ...ns-infer-invariance-due-to-mutability-3.rs | 2 +- ...ns-infer-invariance-due-to-mutability-4.rs | 2 +- .../regions-infer-paramd-indirect.rs | 2 +- src/test/compile-fail/regions-nested-fns-2.rs | 2 +- src/test/compile-fail/regions-nested-fns.rs | 6 +- .../regions-out-of-scope-slice.rs | 2 +- .../compile-fail/regions-ret-borrowed-1.rs | 4 +- src/test/compile-fail/regions-ret.rs | 2 +- src/test/compile-fail/regions-scoping.rs | 6 +- src/test/compile-fail/regions-trait-2.rs | 2 +- src/test/compile-fail/regions-trait-3.rs | 2 +- src/test/run-pass/assignability-trait.rs | 2 +- src/test/run-pass/bare-static-string.rs | 2 +- src/test/run-pass/borrowck-root-while-cond.rs | 2 +- .../borrowck-wg-borrow-mut-to-imm-3.rs | 2 +- src/test/run-pass/borrowed-ptr-pattern-3.rs | 2 +- .../run-pass/borrowed-ptr-pattern-option.rs | 2 +- src/test/run-pass/const-cast.rs | 2 +- src/test/run-pass/const-cross-crate-const.rs | 2 +- src/test/run-pass/const-enum-ptr.rs | 2 +- src/test/run-pass/const-enum-vec-ptr.rs | 2 +- src/test/run-pass/const-str-ptr.rs | 2 +- src/test/run-pass/explicit-self.rs | 6 +- src/test/run-pass/issue-2502.rs | 4 +- src/test/run-pass/issue-2748-b.rs | 2 +- src/test/run-pass/issue-3860.rs | 2 +- src/test/run-pass/issue-3888-2.rs | 2 +- src/test/run-pass/issue-4448.rs | 2 +- src/test/run-pass/reflect-visit-data.rs | 16 +-- src/test/run-pass/region-dependent-addr-of.rs | 18 +-- .../region-return-interior-of-option.rs | 2 +- src/test/run-pass/regions-addr-of-ret.rs | 2 +- src/test/run-pass/regions-bot.rs | 2 +- src/test/run-pass/regions-equiv-fns.rs | 2 +- .../run-pass/regions-escape-into-other-fn.rs | 2 +- src/test/run-pass/regions-fn-subtyping.rs | 4 +- .../regions-infer-borrow-scope-view.rs | 2 +- ...gions-infer-borrow-scope-within-loop-ok.rs | 2 +- .../run-pass/regions-infer-borrow-scope.rs | 2 +- src/test/run-pass/regions-infer-call-2.rs | 2 +- src/test/run-pass/regions-infer-call.rs | 2 +- ...regions-infer-contravariance-due-to-ret.rs | 2 +- .../run-pass/regions-infer-contravariance.rs | 4 +- src/test/run-pass/regions-params.rs | 2 +- src/test/run-pass/regions-trait.rs | 4 +- 147 files changed, 523 insertions(+), 501 deletions(-) diff --git a/src/libcore/at_vec.rs b/src/libcore/at_vec.rs index 8cd8b297e2f3..8d3c8561957b 100644 --- a/src/libcore/at_vec.rs +++ b/src/libcore/at_vec.rs @@ -174,9 +174,9 @@ pub mod traits { use kinds::Copy; use ops::Add; - impl Add<&self/[const T],@[T]> for @[T] { + impl Add<&'self [const T],@[T]> for @[T] { #[inline(always)] - pure fn add(&self, rhs: & &self/[const T]) -> @[T] { + pure fn add(&self, rhs: & &'self [const T]) -> @[T] { append(*self, (*rhs)) } } diff --git a/src/libcore/cast.rs b/src/libcore/cast.rs index bc4358db56c7..f752f52ce539 100644 --- a/src/libcore/cast.rs +++ b/src/libcore/cast.rs @@ -59,17 +59,17 @@ pub unsafe fn transmute(thing: L) -> G { /// Coerce an immutable reference to be mutable. #[inline(always)] -pub unsafe fn transmute_mut(ptr: &a/T) -> &a/mut T { transmute(ptr) } +pub unsafe fn transmute_mut(ptr: &'a T) -> &'a mut T { transmute(ptr) } /// Coerce a mutable reference to be immutable. #[inline(always)] -pub unsafe fn transmute_immut(ptr: &a/mut T) -> &a/T { +pub unsafe fn transmute_immut(ptr: &'a mut T) -> &'a T { transmute(ptr) } /// Coerce a borrowed pointer to have an arbitrary associated region. #[inline(always)] -pub unsafe fn transmute_region(ptr: &a/T) -> &b/T { transmute(ptr) } +pub unsafe fn transmute_region(ptr: &'a T) -> &'b T { transmute(ptr) } /// Coerce an immutable reference to be mutable. #[inline(always)] @@ -85,19 +85,19 @@ pub unsafe fn transmute_immut_unsafe(ptr: *const T) -> *T { /// Coerce a borrowed mutable pointer to have an arbitrary associated region. #[inline(always)] -pub unsafe fn transmute_mut_region(ptr: &a/mut T) -> &b/mut T { +pub unsafe fn transmute_mut_region(ptr: &'a mut T) -> &'b mut T { transmute(ptr) } /// Transforms lifetime of the second pointer to match the first. #[inline(always)] -pub unsafe fn copy_lifetime(_ptr: &a/S, ptr: &T) -> &a/T { +pub unsafe fn copy_lifetime(_ptr: &'a S, ptr: &T) -> &'a T { transmute_region(ptr) } /// Transforms lifetime of the second pointer to match the first. #[inline(always)] -pub unsafe fn copy_lifetime_vec(_ptr: &a/[S], ptr: &T) -> &a/T { +pub unsafe fn copy_lifetime_vec(_ptr: &'a [S], ptr: &T) -> &'a T { transmute_region(ptr) } diff --git a/src/libcore/cleanup.rs b/src/libcore/cleanup.rs index a46e9154703d..66eeb339700e 100644 --- a/src/libcore/cleanup.rs +++ b/src/libcore/cleanup.rs @@ -22,8 +22,8 @@ use cast::transmute; * NB: These must match the representation in the C++ runtime. */ -type DropGlue = &self/fn(**TypeDesc, *c_void); -type FreeGlue = &self/fn(**TypeDesc, *c_void); +type DropGlue = &'self fn(**TypeDesc, *c_void); +type FreeGlue = &'self fn(**TypeDesc, *c_void); type TaskID = uintptr_t; diff --git a/src/libcore/condition.rs b/src/libcore/condition.rs index 17d15a8886f4..56b690ca8afd 100644 --- a/src/libcore/condition.rs +++ b/src/libcore/condition.rs @@ -21,12 +21,12 @@ pub struct Handler { } pub struct Condition { - name: &static/str, + name: &'static str, key: task::local_data::LocalDataKey/&self> } pub impl Condition/&self { - fn trap(&self, h: &self/fn(T) -> U) -> Trap/&self { + fn trap(&self, h: &'self fn(T) -> U) -> Trap/&self { unsafe { let p : *RustClosure = ::cast::transmute(&h); let prev = task::local_data::local_data_get(self.key); @@ -65,12 +65,12 @@ pub impl Condition/&self { } struct Trap { - cond: &self/Condition/&self, + cond: &'self Condition/&self, handler: @Handler } pub impl Trap/&self { - fn in(&self, inner: &self/fn() -> V) -> V { + fn in(&self, inner: &'self fn() -> V) -> V { unsafe { let _g = Guard { cond: self.cond }; debug!("Trap: pushing handler to TLS"); @@ -81,7 +81,7 @@ pub impl Trap/&self { } struct Guard { - cond: &self/Condition/&self + cond: &'self Condition/&self } impl Drop for Guard/&self { diff --git a/src/libcore/container.rs b/src/libcore/container.rs index 828678b65f7d..efcf1e26534c 100644 --- a/src/libcore/container.rs +++ b/src/libcore/container.rs @@ -39,7 +39,7 @@ pub trait Map: Mutable { fn mutate_values(&mut self, f: &fn(&K, &mut V) -> bool); /// Return the value corresponding to the key in the map - pure fn find(&self, key: &K) -> Option<&self/V>; + pure fn find(&self, key: &K) -> Option<&'self V>; /// Insert a key-value pair into the map. An existing value for a /// key is replaced by the new value. Return true if the key did diff --git a/src/libcore/gc.rs b/src/libcore/gc.rs index 5f84f7f0d19e..3449c5ff4ba4 100644 --- a/src/libcore/gc.rs +++ b/src/libcore/gc.rs @@ -122,7 +122,7 @@ unsafe fn is_safe_point(pc: *Word) -> Option { return None; } -type Visitor = &self/fn(root: **Word, tydesc: *Word) -> bool; +type Visitor = &'self fn(root: **Word, tydesc: *Word) -> bool; // Walks the list of roots for the given safe point, and calls visitor // on each root. diff --git a/src/libcore/hashmap.rs b/src/libcore/hashmap.rs index cc7dafad1694..20d207e9302b 100644 --- a/src/libcore/hashmap.rs +++ b/src/libcore/hashmap.rs @@ -185,7 +185,7 @@ pub mod linear { } #[inline(always)] - pure fn value_for_bucket(&self, idx: uint) -> &self/V { + pure fn value_for_bucket(&self, idx: uint) -> &'self V { match self.buckets[idx] { Some(ref bkt) => &bkt.value, None => fail!(~"LinearMap::find: internal logic error"), @@ -270,10 +270,10 @@ pub mod linear { } impl - BaseIter<(&self/K, &self/V)> for LinearMap + BaseIter<(&'self K, &'self V)> for LinearMap { /// Visit all key-value pairs - pure fn each(&self, blk: &fn(&(&self/K, &self/V)) -> bool) { + pure fn each(&self, blk: &fn(&(&'self K, &'self V)) -> bool) { for uint::range(0, self.buckets.len()) |i| { let mut broke = false; do self.buckets[i].map |bucket| { @@ -339,7 +339,7 @@ pub mod linear { } /// Return the value corresponding to the key in the map - pure fn find(&self, k: &K) -> Option<&self/V> { + pure fn find(&self, k: &K) -> Option<&'self V> { match self.bucket_for_key(k) { FoundEntry(idx) => Some(self.value_for_bucket(idx)), TableFull | FoundHole(_) => None, @@ -412,7 +412,7 @@ pub mod linear { /// Return the value corresponding to the key in the map, or insert /// and return the value if it doesn't exist. - fn find_or_insert(&mut self, k: K, v: V) -> &self/V { + fn find_or_insert(&mut self, k: K, v: V) -> &'self V { if self.size >= self.resize_at { // n.b.: We could also do this after searching, so // that we do not resize if this call to insert is @@ -442,7 +442,7 @@ pub mod linear { /// Return the value corresponding to the key in the map, or create, /// insert, and return a new value if it doesn't exist. - fn find_or_insert_with(&mut self, k: K, f: &fn(&K) -> V) -> &self/V { + fn find_or_insert_with(&mut self, k: K, f: &fn(&K) -> V) -> &'self V { if self.size >= self.resize_at { // n.b.: We could also do this after searching, so // that we do not resize if this call to insert is @@ -487,7 +487,7 @@ pub mod linear { } } - pure fn get(&self, k: &K) -> &self/V { + pure fn get(&self, k: &K) -> &'self V { match self.find(k) { Some(v) => v, None => fail!(fmt!("No entry found for key: %?", k)), @@ -509,7 +509,7 @@ pub mod linear { /// Return the value corresponding to the key in the map, using /// equivalence pure fn find_equiv>(&self, k: &Q) - -> Option<&self/V> { + -> Option<&'self V> { match self.bucket_for_key_equiv(k) { FoundEntry(idx) => Some(self.value_for_bucket(idx)), TableFull | FoundHole(_) => None, diff --git a/src/libcore/io.rs b/src/libcore/io.rs index 4942b0587851..dcb9e23b45b2 100644 --- a/src/libcore/io.rs +++ b/src/libcore/io.rs @@ -589,7 +589,7 @@ pub fn file_reader(path: &Path) -> Result<@Reader, ~str> { // Byte readers pub struct BytesReader { - bytes: &self/[u8], + bytes: &'self [u8], mut pos: uint } diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs index e461cb2c65f1..816dc6d22554 100644 --- a/src/libcore/iter.rs +++ b/src/libcore/iter.rs @@ -20,7 +20,7 @@ use option::{None, Option, Some}; use vec; /// A function used to initialize the elements of a sequence -pub type InitOp = &self/fn(uint) -> T; +pub type InitOp = &'self fn(uint) -> T; pub trait BaseIter { pure fn each(&self, blk: &fn(v: &A) -> bool); diff --git a/src/libcore/option.rs b/src/libcore/option.rs index 1e3bba64f274..237fc762b3c5 100644 --- a/src/libcore/option.rs +++ b/src/libcore/option.rs @@ -122,7 +122,7 @@ pub pure fn get(opt: Option) -> T { } #[inline(always)] -pub pure fn get_ref(opt: &r/Option) -> &r/T { +pub pure fn get_ref(opt: &'r Option) -> &'r T { /*! Gets an immutable reference to the value inside an option. @@ -143,7 +143,7 @@ pub pure fn get_ref(opt: &r/Option) -> &r/T { } } -pub pure fn get_mut_ref(opt: &r/mut Option) -> &r/mut T { +pub pure fn get_mut_ref(opt: &'r mut Option) -> &'r mut T { /*! Gets a mutable reference to the value inside an option. @@ -165,7 +165,7 @@ pub pure fn get_mut_ref(opt: &r/mut Option) -> &r/mut T { } #[inline(always)] -pub pure fn map(opt: &r/Option, f: &fn(x: &r/T) -> U) -> Option { +pub pure fn map(opt: &'r Option, f: &fn(x: &'r T) -> U) -> Option { //! Maps a `some` value by reference from one type to another match *opt { Some(ref x) => Some(f(x)), None => None } @@ -256,8 +256,8 @@ pub pure fn get_or_default(opt: Option, def: T) -> T { } #[inline(always)] -pub pure fn map_default(opt: &r/Option, def: U, - f: &fn(&r/T) -> U) -> U { +pub pure fn map_default(opt: &'r Option, def: U, + f: &fn(&'r T) -> U) -> U { //! Applies a function to the contained value or returns a default match *opt { None => def, Some(ref t) => f(t) } @@ -313,7 +313,7 @@ pub pure fn expect(opt: Option, reason: &str) -> T { impl BaseIter for Option { /// Performs an operation on the contained value by reference #[inline(always)] - pure fn each(&self, f: &fn(x: &self/T) -> bool) { + pure fn each(&self, f: &fn(x: &'self T) -> bool) { match *self { None => (), Some(ref t) => { f(t); } } } @@ -350,7 +350,7 @@ pub impl Option { /// Maps a `some` value from one type to another by reference #[inline(always)] - pure fn map(&self, f: &fn(&self/T) -> U) -> Option { map(self, f) } + pure fn map(&self, f: &fn(&'self T) -> U) -> Option { map(self, f) } /// As `map`, but consumes the option and gives `f` ownership to avoid /// copying. @@ -361,7 +361,7 @@ pub impl Option { /// Applies a function to the contained value or returns a default #[inline(always)] - pure fn map_default(&self, def: U, f: &fn(&self/T) -> U) -> U { + pure fn map_default(&self, def: U, f: &fn(&'self T) -> U) -> U { map_default(self, def, f) } @@ -403,7 +403,7 @@ pub impl Option { case explicitly. */ #[inline(always)] - pure fn get_ref(&self) -> &self/T { get_ref(self) } + pure fn get_ref(&self) -> &'self T { get_ref(self) } /** Gets a mutable reference to the value inside an option. @@ -420,7 +420,7 @@ pub impl Option { case explicitly. */ #[inline(always)] - pure fn get_mut_ref(&mut self) -> &self/mut T { get_mut_ref(self) } + pure fn get_mut_ref(&mut self) -> &'self mut T { get_mut_ref(self) } /** * Gets the value out of an option without copying. diff --git a/src/libcore/os.rs b/src/libcore/os.rs index 746c403c7bfb..17ec9df9d569 100644 --- a/src/libcore/os.rs +++ b/src/libcore/os.rs @@ -1170,11 +1170,11 @@ pub mod consts { pub use os::consts::windows::*; pub mod unix { - pub const FAMILY: &static/str = "unix"; + pub const FAMILY: &'static str = "unix"; } pub mod windows { - pub const FAMILY: &static/str = "windows"; + pub const FAMILY: &'static str = "windows"; } #[cfg(target_os = "macos")] @@ -1193,38 +1193,38 @@ pub mod consts { pub use os::consts::win32::*; pub mod macos { - pub const SYSNAME: &static/str = "macos"; - pub const DLL_PREFIX: &static/str = "lib"; - pub const DLL_SUFFIX: &static/str = ".dylib"; - pub const EXE_SUFFIX: &static/str = ""; + pub const SYSNAME: &'static str = "macos"; + pub const DLL_PREFIX: &'static str = "lib"; + pub const DLL_SUFFIX: &'static str = ".dylib"; + pub const EXE_SUFFIX: &'static str = ""; } pub mod freebsd { - pub const SYSNAME: &static/str = "freebsd"; - pub const DLL_PREFIX: &static/str = "lib"; - pub const DLL_SUFFIX: &static/str = ".so"; - pub const EXE_SUFFIX: &static/str = ""; + pub const SYSNAME: &'static str = "freebsd"; + pub const DLL_PREFIX: &'static str = "lib"; + pub const DLL_SUFFIX: &'static str = ".so"; + pub const EXE_SUFFIX: &'static str = ""; } pub mod linux { - pub const SYSNAME: &static/str = "linux"; - pub const DLL_PREFIX: &static/str = "lib"; - pub const DLL_SUFFIX: &static/str = ".so"; - pub const EXE_SUFFIX: &static/str = ""; + pub const SYSNAME: &'static str = "linux"; + pub const DLL_PREFIX: &'static str = "lib"; + pub const DLL_SUFFIX: &'static str = ".so"; + pub const EXE_SUFFIX: &'static str = ""; } pub mod android { - pub const SYSNAME: &static/str = "android"; - pub const DLL_PREFIX: &static/str = "lib"; - pub const DLL_SUFFIX: &static/str = ".so"; - pub const EXE_SUFFIX: &static/str = ""; + pub const SYSNAME: &'static str = "android"; + pub const DLL_PREFIX: &'static str = "lib"; + pub const DLL_SUFFIX: &'static str = ".so"; + pub const EXE_SUFFIX: &'static str = ""; } pub mod win32 { - pub const SYSNAME: &static/str = "win32"; - pub const DLL_PREFIX: &static/str = ""; - pub const DLL_SUFFIX: &static/str = ".dll"; - pub const EXE_SUFFIX: &static/str = ".exe"; + pub const SYSNAME: &'static str = "win32"; + pub const DLL_PREFIX: &'static str = ""; + pub const DLL_SUFFIX: &'static str = ".dll"; + pub const EXE_SUFFIX: &'static str = ".exe"; } diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index fd823e9dda0d..eb385d903545 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -446,7 +446,7 @@ pub fn try_recv(p: RecvPacketBuffered) let p = unsafe { &*p_ }; struct DropState { - p: &self/PacketHeader, + p: &'self PacketHeader, drop { if task::failing() { diff --git a/src/libcore/ptr.rs b/src/libcore/ptr.rs index e6e312d01b9f..481a61f4ab71 100644 --- a/src/libcore/ptr.rs +++ b/src/libcore/ptr.rs @@ -178,7 +178,7 @@ pub pure fn to_uint(thing: &T) -> uint { /// Determine if two borrowed pointers point to the same thing. #[inline(always)] -pub pure fn ref_eq(thing: &a/T, other: &b/T) -> bool { +pub pure fn ref_eq(thing: &'a T, other: &'b T) -> bool { to_uint(thing) == to_uint(other) } @@ -312,34 +312,34 @@ impl Ord for *const T { // Equality for region pointers #[cfg(notest)] -impl Eq for &self/const T { +impl Eq for &'self const T { #[inline(always)] - pure fn eq(&self, other: & &self/const T) -> bool { + pure fn eq(&self, other: & &'self const T) -> bool { return *(*self) == *(*other); } #[inline(always)] - pure fn ne(&self, other: & &self/const T) -> bool { + pure fn ne(&self, other: & &'self const T) -> bool { return *(*self) != *(*other); } } // Comparison for region pointers #[cfg(notest)] -impl Ord for &self/const T { +impl Ord for &'self const T { #[inline(always)] - pure fn lt(&self, other: & &self/const T) -> bool { + pure fn lt(&self, other: & &'self const T) -> bool { *(*self) < *(*other) } #[inline(always)] - pure fn le(&self, other: & &self/const T) -> bool { + pure fn le(&self, other: & &'self const T) -> bool { *(*self) <= *(*other) } #[inline(always)] - pure fn ge(&self, other: & &self/const T) -> bool { + pure fn ge(&self, other: & &'self const T) -> bool { *(*self) >= *(*other) } #[inline(always)] - pure fn gt(&self, other: & &self/const T) -> bool { + pure fn gt(&self, other: & &'self const T) -> bool { *(*self) > *(*other) } } diff --git a/src/libcore/reflect.rs b/src/libcore/reflect.rs index 30c46cd3e35d..a0f9fa7e08e4 100644 --- a/src/libcore/reflect.rs +++ b/src/libcore/reflect.rs @@ -214,9 +214,9 @@ impl TyVisitor for MovePtrAdaptor { } fn visit_estr_slice(&self) -> bool { - self.align_to::<&static/str>(); + self.align_to::<&'static str>(); if ! self.inner.visit_estr_slice() { return false; } - self.bump_past::<&static/str>(); + self.bump_past::<&'static str>(); true } @@ -251,9 +251,9 @@ impl TyVisitor for MovePtrAdaptor { } fn visit_rptr(&self, mtbl: uint, inner: *TyDesc) -> bool { - self.align_to::<&static/u8>(); + self.align_to::<&'static u8>(); if ! self.inner.visit_rptr(mtbl, inner) { return false; } - self.bump_past::<&static/u8>(); + self.bump_past::<&'static u8>(); true } @@ -285,9 +285,9 @@ impl TyVisitor for MovePtrAdaptor { } fn visit_evec_slice(&self, mtbl: uint, inner: *TyDesc) -> bool { - self.align_to::<&static/[u8]>(); + self.align_to::<&'static [u8]>(); if ! self.inner.visit_evec_slice(mtbl, inner) { return false; } - self.bump_past::<&static/[u8]>(); + self.bump_past::<&'static [u8]>(); true } @@ -465,9 +465,9 @@ impl TyVisitor for MovePtrAdaptor { } fn visit_self(&self) -> bool { - self.align_to::<&static/u8>(); + self.align_to::<&'static u8>(); if ! self.inner.visit_self() { return false; } - self.align_to::<&static/u8>(); + self.align_to::<&'static u8>(); true } diff --git a/src/libcore/result.rs b/src/libcore/result.rs index e3fd279a9960..832071a0ba81 100644 --- a/src/libcore/result.rs +++ b/src/libcore/result.rs @@ -53,7 +53,7 @@ pub pure fn get(res: &Result) -> T { * If the result is an error */ #[inline(always)] -pub pure fn get_ref(res: &a/Result) -> &a/T { +pub pure fn get_ref(res: &'a Result) -> &'a T { match *res { Ok(ref t) => t, Err(ref the_err) => unsafe { @@ -229,7 +229,7 @@ pub pure fn map_err(res: &Result, op: &fn(&E) -> F) pub impl Result { #[inline(always)] - pure fn get_ref(&self) -> &self/T { get_ref(self) } + pure fn get_ref(&self) -> &'self T { get_ref(self) } #[inline(always)] pure fn is_ok(&self) -> bool { is_ok(self) } diff --git a/src/libcore/rt/io.rs b/src/libcore/rt/io.rs index 3a94c01e0a41..55e062de85b0 100644 --- a/src/libcore/rt/io.rs +++ b/src/libcore/rt/io.rs @@ -22,7 +22,7 @@ pub trait EventLoop { fn run(&mut self); fn callback(&mut self, ~fn()); /// The asynchronous I/O services. Not all event loops may provide one - fn io(&mut self) -> Option<&self/mut IoFactoryObject>; + fn io(&mut self) -> Option<&'self mut IoFactoryObject>; } pub trait IoFactory { diff --git a/src/libcore/rt/sched.rs b/src/libcore/rt/sched.rs index 8f315452e5e5..69cbbdd2ad43 100644 --- a/src/libcore/rt/sched.rs +++ b/src/libcore/rt/sched.rs @@ -265,12 +265,12 @@ pub impl Scheduler { } } - // XXX: Hack. This should return &self/mut but I don't know how to + // XXX: Hack. This should return &'self mut but I don't know how to // make the borrowcheck happy fn task_from_last_cleanup_job(&mut self) -> &mut Task { fail_unless!(!self.cleanup_jobs.is_empty()); - let last_job: &self/mut CleanupJob = &mut self.cleanup_jobs[0]; - let last_task: &self/Task = match last_job { + let last_job: &'self mut CleanupJob = &mut self.cleanup_jobs[0]; + let last_task: &'self Task = match last_job { &RescheduleTask(~ref task) => task, &RecycleTask(~ref task) => task, &GiveTask(~ref task, _) => task, @@ -356,7 +356,7 @@ impl ThreadLocalScheduler { } } - fn get_scheduler(&mut self) -> &self/mut Scheduler { + fn get_scheduler(&mut self) -> &'self mut Scheduler { unsafe { let key = match self { &ThreadLocalScheduler(key) => key }; let mut value: *mut c_void = tls::get(key); diff --git a/src/libcore/rt/uv.rs b/src/libcore/rt/uv.rs index c947e4dde4c1..80224fa523a9 100644 --- a/src/libcore/rt/uv.rs +++ b/src/libcore/rt/uv.rs @@ -659,7 +659,7 @@ fn install_watcher_data>(watcher: &mut W) { } fn get_watcher_data>( - watcher: &r/mut W) -> &r/mut WatcherData { + watcher: &'r mut W) -> &'r mut WatcherData { unsafe { let data = uvll::get_data_for_uv_handle(watcher.native_handle()); diff --git a/src/libcore/rt/uvio.rs b/src/libcore/rt/uvio.rs index f7275652e7f3..a971ed92b7eb 100644 --- a/src/libcore/rt/uvio.rs +++ b/src/libcore/rt/uvio.rs @@ -69,7 +69,7 @@ impl EventLoop for UvEventLoop { } } - fn io(&mut self) -> Option<&self/mut IoFactoryObject> { + fn io(&mut self) -> Option<&'self mut IoFactoryObject> { Some(&mut self.uvio) } } @@ -91,7 +91,7 @@ fn test_callback_run_once() { pub struct UvIoFactory(Loop); pub impl UvIoFactory { - fn uv_loop(&mut self) -> &self/mut Loop { + fn uv_loop(&mut self) -> &'self mut Loop { match self { &UvIoFactory(ref mut ptr) => ptr } } } diff --git a/src/libcore/str.rs b/src/libcore/str.rs index 23b14e243b8f..3d591af6d3c4 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -279,7 +279,7 @@ pub fn shift_char(s: &mut ~str) -> char { * If the string does not contain any characters */ #[inline] -pub fn view_shift_char(s: &a/str) -> (char, &a/str) { +pub fn view_shift_char(s: &'a str) -> (char, &'a str) { let CharRange {ch, next} = char_range_at(s, 0u); let next_s = unsafe { raw::view_bytes(s, next, len(s)) }; return (ch, next_s); @@ -429,7 +429,7 @@ pub pure fn slice(s: &str, begin: uint, end: uint) -> ~str { * Fails when `begin` and `end` do not point to valid characters or beyond * the last character of the string */ -pub pure fn view(s: &a/str, begin: uint, end: uint) -> &a/str { +pub pure fn view(s: &'a str, begin: uint, end: uint) -> &'a str { fail_unless!(is_char_boundary(s, begin)); fail_unless!(is_char_boundary(s, end)); unsafe { raw::view_bytes(s, begin, end) } @@ -530,7 +530,7 @@ pure fn split_inner(s: &str, sepfn: &fn(cc: char) -> bool, count: uint, } // See Issue #1932 for why this is a naive search -pure fn iter_matches(s: &a/str, sep: &b/str, f: &fn(uint, uint)) { +pure fn iter_matches(s: &'a str, sep: &'b str, f: &fn(uint, uint)) { let sep_len = len(sep), l = len(s); fail_unless!(sep_len > 0u); let mut i = 0u, match_start = 0u, match_i = 0u; @@ -557,7 +557,7 @@ pure fn iter_matches(s: &a/str, sep: &b/str, f: &fn(uint, uint)) { } } -pure fn iter_between_matches(s: &a/str, sep: &b/str, f: &fn(uint, uint)) { +pure fn iter_between_matches(s: &'a str, sep: &'b str, f: &fn(uint, uint)) { let mut last_end = 0u; do iter_matches(s, sep) |from, to| { f(last_end, from); @@ -575,7 +575,7 @@ pure fn iter_between_matches(s: &a/str, sep: &b/str, f: &fn(uint, uint)) { * fail_unless!(["", "XXX", "YYY", ""] == split_str(".XXX.YYY.", ".")) * ~~~ */ -pub pure fn split_str(s: &a/str, sep: &b/str) -> ~[~str] { +pub pure fn split_str(s: &'a str, sep: &'b str) -> ~[~str] { let mut result = ~[]; do iter_between_matches(s, sep) |from, to| { unsafe { result.push(raw::slice_bytes(s, from, to)); } @@ -583,7 +583,7 @@ pub pure fn split_str(s: &a/str, sep: &b/str) -> ~[~str] { result } -pub pure fn split_str_nonempty(s: &a/str, sep: &b/str) -> ~[~str] { +pub pure fn split_str_nonempty(s: &'a str, sep: &'b str) -> ~[~str] { let mut result = ~[]; do iter_between_matches(s, sep) |from, to| { if to > from { @@ -792,7 +792,7 @@ pure fn cmp(a: &str, b: &str) -> Ordering { #[cfg(notest)] impl TotalOrd for &'self str { - pure fn cmp(&self, other: & &self/str) -> Ordering { cmp(*self, *other) } + pure fn cmp(&self, other: & &'self str) -> Ordering { cmp(*self, *other) } } #[cfg(notest)] @@ -837,13 +837,13 @@ pure fn gt(a: &str, b: &str) -> bool { } #[cfg(notest)] -impl Eq for &self/str { +impl Eq for &'self str { #[inline(always)] - pure fn eq(&self, other: & &self/str) -> bool { + pure fn eq(&self, other: & &'self str) -> bool { eq_slice((*self), (*other)) } #[inline(always)] - pure fn ne(&self, other: & &self/str) -> bool { !(*self).eq(other) } + pure fn ne(&self, other: & &'self str) -> bool { !(*self).eq(other) } } #[cfg(notest)] @@ -879,15 +879,15 @@ impl Ord for ~str { } #[cfg(notest)] -impl Ord for &self/str { +impl Ord for &'self str { #[inline(always)] - pure fn lt(&self, other: & &self/str) -> bool { lt((*self), (*other)) } + pure fn lt(&self, other: & &'self str) -> bool { lt((*self), (*other)) } #[inline(always)] - pure fn le(&self, other: & &self/str) -> bool { le((*self), (*other)) } + pure fn le(&self, other: & &'self str) -> bool { le((*self), (*other)) } #[inline(always)] - pure fn ge(&self, other: & &self/str) -> bool { ge((*self), (*other)) } + pure fn ge(&self, other: & &'self str) -> bool { ge((*self), (*other)) } #[inline(always)] - pure fn gt(&self, other: & &self/str) -> bool { gt((*self), (*other)) } + pure fn gt(&self, other: & &'self str) -> bool { gt((*self), (*other)) } } #[cfg(notest)] @@ -1348,7 +1348,7 @@ pub pure fn rfind_between(s: &str, start: uint, end: uint, } // Utility used by various searching functions -pure fn match_at(haystack: &a/str, needle: &b/str, at: uint) -> bool { +pure fn match_at(haystack: &'a str, needle: &'b str, at: uint) -> bool { let mut i = at; for each(needle) |c| { if haystack[i] != c { return false; } i += 1u; } return true; @@ -1367,7 +1367,7 @@ pure fn match_at(haystack: &a/str, needle: &b/str, at: uint) -> bool { * An `option` containing the byte index of the first matching substring * or `none` if there is no match */ -pub pure fn find_str(haystack: &a/str, needle: &b/str) -> Option { +pub pure fn find_str(haystack: &'a str, needle: &'b str) -> Option { find_str_between(haystack, needle, 0u, len(haystack)) } @@ -1390,7 +1390,7 @@ pub pure fn find_str(haystack: &a/str, needle: &b/str) -> Option { * * `start` must be less than or equal to `len(s)` */ -pub pure fn find_str_from(haystack: &a/str, needle: &b/str, start: uint) +pub pure fn find_str_from(haystack: &'a str, needle: &'b str, start: uint) -> Option { find_str_between(haystack, needle, start, len(haystack)) } @@ -1415,7 +1415,7 @@ pub pure fn find_str_from(haystack: &a/str, needle: &b/str, start: uint) * `start` must be less than or equal to `end` and `end` must be less than * or equal to `len(s)`. */ -pub pure fn find_str_between(haystack: &a/str, needle: &b/str, start: uint, +pub pure fn find_str_between(haystack: &'a str, needle: &'b str, start: uint, end:uint) -> Option { // See Issue #1932 for why this is a naive search @@ -1441,7 +1441,7 @@ pub pure fn find_str_between(haystack: &a/str, needle: &b/str, start: uint, * * haystack - The string to look in * * needle - The string to look for */ -pub pure fn contains(haystack: &a/str, needle: &b/str) -> bool { +pub pure fn contains(haystack: &'a str, needle: &'b str) -> bool { find_str(haystack, needle).is_some() } @@ -1465,7 +1465,7 @@ pub pure fn contains_char(haystack: &str, needle: char) -> bool { * * haystack - The string to look in * * needle - The string to look for */ -pub pure fn starts_with(haystack: &a/str, needle: &b/str) -> bool { +pub pure fn starts_with(haystack: &'a str, needle: &'b str) -> bool { let haystack_len = len(haystack), needle_len = len(needle); if needle_len == 0u { true } else if needle_len > haystack_len { false } @@ -1480,7 +1480,7 @@ pub pure fn starts_with(haystack: &a/str, needle: &b/str) -> bool { * * haystack - The string to look in * * needle - The string to look for */ -pub pure fn ends_with(haystack: &a/str, needle: &b/str) -> bool { +pub pure fn ends_with(haystack: &'a str, needle: &'b str) -> bool { let haystack_len = len(haystack), needle_len = len(needle); if needle_len == 0u { true } else if needle_len > haystack_len { false } @@ -1662,7 +1662,7 @@ pub pure fn count_chars(s: &str, start: uint, end: uint) -> uint { } /// Counts the number of bytes taken by the `n` in `s` starting from `start`. -pub pure fn count_bytes(s: &b/str, start: uint, n: uint) -> uint { +pub pure fn count_bytes(s: &'b str, start: uint, n: uint) -> uint { fail_unless!(is_char_boundary(s, start)); let mut end = start, cnt = n; let l = len(s); @@ -1905,7 +1905,7 @@ pub pure fn as_bytes(s: &const ~str, f: &fn(&~[u8]) -> T) -> T { * * The byte slice does not include the null terminator. */ -pub pure fn as_bytes_slice(s: &a/str) -> &a/[u8] { +pub pure fn as_bytes_slice(s: &'a str) -> &'a [u8] { unsafe { let (ptr, len): (*u8, uint) = ::cast::reinterpret_cast(&s); let outgoing_tuple: (*u8, uint) = (ptr, len - 1); @@ -2233,9 +2233,9 @@ pub mod traits { use ops::Add; use str::append; - impl Add<&self/str,~str> for ~str { + impl Add<&'self str,~str> for ~str { #[inline(always)] - pure fn add(&self, rhs: & &self/str) -> ~str { + pure fn add(&self, rhs: & &'self str) -> ~str { append(copy *self, (*rhs)) } } @@ -2247,7 +2247,7 @@ pub mod traits {} pub trait StrSlice { pure fn all(&self, it: &fn(char) -> bool) -> bool; pure fn any(&self, it: &fn(char) -> bool) -> bool; - pure fn contains(&self, needle: &a/str) -> bool; + pure fn contains(&self, needle: &'a str) -> bool; pure fn contains_char(&self, needle: char) -> bool; pure fn each(&self, it: &fn(u8) -> bool); pure fn eachi(&self, it: &fn(uint, u8) -> bool); @@ -2261,8 +2261,8 @@ pub trait StrSlice { pure fn slice(&self, begin: uint, end: uint) -> ~str; pure fn split(&self, sepfn: &fn(char) -> bool) -> ~[~str]; pure fn split_char(&self, sep: char) -> ~[~str]; - pure fn split_str(&self, sep: &a/str) -> ~[~str]; - pure fn starts_with(&self, needle: &a/str) -> bool; + pure fn split_str(&self, sep: &'a str) -> ~[~str]; + pure fn starts_with(&self, needle: &'a str) -> bool; pure fn substr(&self, begin: uint, n: uint) -> ~str; pure fn to_lower(&self) -> ~str; pure fn to_upper(&self) -> ~str; @@ -2278,7 +2278,7 @@ pub trait StrSlice { } /// Extension methods for strings -impl StrSlice for &self/str { +impl StrSlice for &'self str { /** * Return true if a predicate matches all characters or if the string * contains no characters @@ -2293,7 +2293,7 @@ impl StrSlice for &self/str { pure fn any(&self, it: &fn(char) -> bool) -> bool { any(*self, it) } /// Returns true if one string contains another #[inline] - pure fn contains(&self, needle: &a/str) -> bool { + pure fn contains(&self, needle: &'a str) -> bool { contains(*self, needle) } /// Returns true if a string contains a char @@ -2366,10 +2366,10 @@ impl StrSlice for &self/str { * string */ #[inline] - pure fn split_str(&self, sep: &a/str) -> ~[~str] { split_str(*self, sep) } + pure fn split_str(&self, sep: &'a str) -> ~[~str] { split_str(*self, sep) } /// Returns true if one string starts with another #[inline] - pure fn starts_with(&self, needle: &a/str) -> bool { + pure fn starts_with(&self, needle: &'a str) -> bool { starts_with(*self, needle) } /** @@ -2612,8 +2612,8 @@ mod tests { #[test] fn test_split_str() { - fn t(s: &str, sep: &a/str, i: int, k: &str) { - fn borrow(x: &a/str) -> &a/str { x } + fn t(s: &str, sep: &'a str, i: int, k: &str) { + fn borrow(x: &'a str) -> &'a str { x } let v = split_str(s, sep); fail_unless!(borrow(v[i]) == k); } diff --git a/src/libcore/sys.rs b/src/libcore/sys.rs index 179a33ae43ea..f7eceeebc1e6 100644 --- a/src/libcore/sys.rs +++ b/src/libcore/sys.rs @@ -19,7 +19,7 @@ use libc::{c_void, c_char, size_t}; use repr; use str; -pub type FreeGlue = &self/fn(*TypeDesc, *c_void); +pub type FreeGlue = &'self fn(*TypeDesc, *c_void); // Corresponds to runtime type_desc type pub struct TypeDesc { diff --git a/src/libcore/task/local_data.rs b/src/libcore/task/local_data.rs index 690b3aedc5a4..ccd917094798 100644 --- a/src/libcore/task/local_data.rs +++ b/src/libcore/task/local_data.rs @@ -44,7 +44,7 @@ use task::rt; * * These two cases aside, the interface is safe. */ -pub type LocalDataKey = &self/fn(v: @T); +pub type LocalDataKey = &'self fn(v: @T); /** * Remove a task-local data value from the table, returning the diff --git a/src/libcore/task/spawn.rs b/src/libcore/task/spawn.rs index a0db25254415..0fd373b803fb 100644 --- a/src/libcore/task/spawn.rs +++ b/src/libcore/task/spawn.rs @@ -123,7 +123,7 @@ struct TaskGroupData { } type TaskGroupArc = unstable::Exclusive>; -type TaskGroupInner = &self/mut Option; +type TaskGroupInner = &'self mut Option; // A taskgroup is 'dead' when nothing can cause it to fail; only members can. pure fn taskgroup_is_dead(tg: &TaskGroupData) -> bool { diff --git a/src/libcore/to_bytes.rs b/src/libcore/to_bytes.rs index 60665bcddf6b..e5fbad16717a 100644 --- a/src/libcore/to_bytes.rs +++ b/src/libcore/to_bytes.rs @@ -19,7 +19,7 @@ use io::Writer; use option::{None, Option, Some}; use str; -pub type Cb = &self/fn(buf: &[const u8]) -> bool; +pub type Cb = &'self fn(buf: &[const u8]) -> bool; /** * A trait to implement in order to make a type hashable; @@ -197,7 +197,7 @@ impl IterBytes for int { } } -impl IterBytes for &self/[A] { +impl IterBytes for &'self [A] { #[inline(always)] pure fn iter_bytes(&self, lsb0: bool, f: Cb) { for (*self).each |elt| { @@ -231,7 +231,7 @@ impl IterBytes for (A,B,C) { } // Move this to vec, probably. -pure fn borrow(a: &x/[A]) -> &x/[A] { +pure fn borrow(a: &'x [A]) -> &'x [A] { a } @@ -352,7 +352,7 @@ pub pure fn iter_bytes_7 IterBytes for Option { } } -impl IterBytes for &self/A { +impl IterBytes for &'self A { #[inline(always)] pure fn iter_bytes(&self, lsb0: bool, f: Cb) { (**self).iter_bytes(lsb0, f); diff --git a/src/libcore/to_str.rs b/src/libcore/to_str.rs index 8215152ef74e..0f2fd6996044 100644 --- a/src/libcore/to_str.rs +++ b/src/libcore/to_str.rs @@ -32,7 +32,7 @@ impl ToStr for ~str { #[inline(always)] pure fn to_str(&self) -> ~str { copy *self } } -impl ToStr for &self/str { +impl ToStr for &'self str { #[inline(always)] pure fn to_str(&self) -> ~str { ::str::from_slice(*self) } } @@ -72,7 +72,7 @@ impl ToStr for (A, B, C) { } } -impl ToStr for &self/[A] { +impl ToStr for &'self [A] { #[inline(always)] pure fn to_str(&self) -> ~str { unsafe { diff --git a/src/libcore/trie.rs b/src/libcore/trie.rs index 15b0e1604343..26532c1a4ff7 100644 --- a/src/libcore/trie.rs +++ b/src/libcore/trie.rs @@ -32,7 +32,7 @@ pub struct TrieMap { impl BaseIter<(uint, &'self T)> for TrieMap { /// Visit all key-value pairs in order #[inline(always)] - pure fn each(&self, f: &fn(&(uint, &self/T)) -> bool) { + pure fn each(&self, f: &fn(&(uint, &'self T)) -> bool) { self.root.each(f); } #[inline(always)] @@ -42,7 +42,7 @@ impl BaseIter<(uint, &'self T)> for TrieMap { impl ReverseIter<(uint, &'self T)> for TrieMap { /// Visit all key-value pairs in reverse order #[inline(always)] - pure fn each_reverse(&self, f: &fn(&(uint, &self/T)) -> bool) { + pure fn each_reverse(&self, f: &fn(&(uint, &'self T)) -> bool) { self.root.each_reverse(f); } } @@ -93,8 +93,8 @@ impl Map for TrieMap { /// Return the value corresponding to the key in the map #[inline(hint)] - pure fn find(&self, key: &uint) -> Option<&self/T> { - let mut node: &self/TrieNode = &self.root; + pure fn find(&self, key: &uint) -> Option<&'self T> { + let mut node: &'self TrieNode = &self.root; let mut idx = 0; loop { match node.children[chunk(*key, idx)] { @@ -233,7 +233,7 @@ impl TrieNode { } impl TrieNode { - pure fn each(&self, f: &fn(&(uint, &self/T)) -> bool) -> bool { + pure fn each(&self, f: &fn(&(uint, &'self T)) -> bool) -> bool { for uint::range(0, self.children.len()) |idx| { match self.children[idx] { Internal(ref x) => if !x.each(f) { return false }, @@ -244,7 +244,7 @@ impl TrieNode { true } - pure fn each_reverse(&self, f: &fn(&(uint, &self/T)) -> bool) -> bool { + pure fn each_reverse(&self, f: &fn(&(uint, &'self T)) -> bool) -> bool { for uint::range_rev(self.children.len(), 0) |idx| { match self.children[idx - 1] { Internal(ref x) => if !x.each_reverse(f) { return false }, diff --git a/src/libcore/tuple.rs b/src/libcore/tuple.rs index e41ff424012b..b4f68466c275 100644 --- a/src/libcore/tuple.rs +++ b/src/libcore/tuple.rs @@ -47,19 +47,19 @@ impl CopyableTuple for (T, U) { } pub trait ImmutableTuple { - pure fn first_ref(&self) -> &self/T; - pure fn second_ref(&self) -> &self/U; + pure fn first_ref(&self) -> &'self T; + pure fn second_ref(&self) -> &'self U; } impl ImmutableTuple for (T, U) { #[inline(always)] - pure fn first_ref(&self) -> &self/T { + pure fn first_ref(&self) -> &'self T { match *self { (ref t, _) => t, } } #[inline(always)] - pure fn second_ref(&self) -> &self/U { + pure fn second_ref(&self) -> &'self U { match *self { (_, ref u) => u, } @@ -71,7 +71,7 @@ pub trait ExtendedTupleOps { fn map(&self, f: &fn(a: &A, b: &B) -> C) -> ~[C]; } -impl ExtendedTupleOps for (&self/[A], &self/[B]) { +impl ExtendedTupleOps for (&'self [A], &'self [B]) { #[inline(always)] fn zip(&self) -> ~[(A, B)] { match *self { diff --git a/src/libcore/unstable.rs b/src/libcore/unstable.rs index 9b6dcc312347..899d01cd9963 100644 --- a/src/libcore/unstable.rs +++ b/src/libcore/unstable.rs @@ -173,7 +173,7 @@ pub unsafe fn get_shared_mutable_state( } #[inline(always)] pub unsafe fn get_shared_immutable_state( - rc: &a/SharedMutableState) -> &a/T { + rc: &'a SharedMutableState) -> &'a T { unsafe { let ptr: ~ArcData = cast::reinterpret_cast(&(*rc).data); fail_unless!(ptr.count > 0); diff --git a/src/libcore/unstable/finally.rs b/src/libcore/unstable/finally.rs index 5089470e6efb..e8c27ff7d92d 100644 --- a/src/libcore/unstable/finally.rs +++ b/src/libcore/unstable/finally.rs @@ -31,7 +31,7 @@ pub trait Finally { fn finally(&self, dtor: &fn()) -> T; } -impl Finally for &self/fn() -> T { +impl Finally for &'self fn() -> T { fn finally(&self, dtor: &fn()) -> T { let _d = Finallyalizer { dtor: dtor @@ -42,7 +42,7 @@ impl Finally for &self/fn() -> T { } struct Finallyalizer { - dtor: &self/fn() + dtor: &'self fn() } impl Drop for Finallyalizer/&self { diff --git a/src/libcore/unstable/global.rs b/src/libcore/unstable/global.rs index d8ded635291d..660336055590 100644 --- a/src/libcore/unstable/global.rs +++ b/src/libcore/unstable/global.rs @@ -42,7 +42,7 @@ use sys::Closure; #[cfg(test)] use task::spawn; #[cfg(test)] use uint; -pub type GlobalDataKey = &self/fn(v: T); +pub type GlobalDataKey = &'self fn(v: T); pub unsafe fn global_data_clone_create( key: GlobalDataKey, create: &fn() -> ~T) -> T { diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index f11a63a787d7..34d3c022dcac 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -217,46 +217,46 @@ pub pure fn build_sized_opt(size: Option, // Accessors /// Returns the first element of a vector -pub pure fn head(v: &r/[T]) -> &r/T { +pub pure fn head(v: &'r [T]) -> &'r T { if v.len() == 0 { fail!(~"head: empty vector") } &v[0] } /// Returns `Some(x)` where `x` is the first element of the slice `v`, /// or `None` if the vector is empty. -pub pure fn head_opt(v: &r/[T]) -> Option<&r/T> { +pub pure fn head_opt(v: &'r [T]) -> Option<&'r T> { if v.len() == 0 { None } else { Some(&v[0]) } } /// Returns a vector containing all but the first element of a slice -pub pure fn tail(v: &r/[T]) -> &r/[T] { slice(v, 1, v.len()) } +pub pure fn tail(v: &'r [T]) -> &'r [T] { slice(v, 1, v.len()) } /// Returns a vector containing all but the first `n` elements of a slice -pub pure fn tailn(v: &r/[T], n: uint) -> &r/[T] { slice(v, n, v.len()) } +pub pure fn tailn(v: &'r [T], n: uint) -> &'r [T] { slice(v, n, v.len()) } /// Returns a vector containing all but the last element of a slice -pub pure fn init(v: &r/[T]) -> &r/[T] { slice(v, 0, v.len() - 1) } +pub pure fn init(v: &'r [T]) -> &'r [T] { slice(v, 0, v.len() - 1) } /// Returns a vector containing all but the last `n' elements of a slice -pub pure fn initn(v: &r/[T], n: uint) -> &r/[T] { +pub pure fn initn(v: &'r [T], n: uint) -> &'r [T] { slice(v, 0, v.len() - n) } /// Returns the last element of the slice `v`, failing if the slice is empty. -pub pure fn last(v: &r/[T]) -> &r/T { +pub pure fn last(v: &'r [T]) -> &'r T { if v.len() == 0 { fail!(~"last: empty vector") } &v[v.len() - 1] } /// Returns `Some(x)` where `x` is the last element of the slice `v`, or /// `None` if the vector is empty. -pub pure fn last_opt(v: &r/[T]) -> Option<&r/T> { +pub pure fn last_opt(v: &'r [T]) -> Option<&'r T> { if v.len() == 0 { None } else { Some(&v[v.len() - 1]) } } /// Return a slice that points into another slice. #[inline(always)] -pub pure fn slice(v: &r/[T], start: uint, end: uint) -> &r/[T] { +pub pure fn slice(v: &'r [T], start: uint, end: uint) -> &'r [T] { fail_unless!(start <= end); fail_unless!(end <= len(v)); do as_imm_buf(v) |p, _len| { @@ -270,10 +270,10 @@ pub pure fn slice(v: &r/[T], start: uint, end: uint) -> &r/[T] { /// Return a slice that points into another slice. #[inline(always)] -pub pure fn mut_slice(v: &r/mut [T], +pub pure fn mut_slice(v: &'r mut [T], start: uint, end: uint) - -> &r/mut [T] { + -> &'r mut [T] { fail_unless!(start <= end); fail_unless!(end <= v.len()); do as_mut_buf(v) |p, _len| { @@ -287,10 +287,10 @@ pub pure fn mut_slice(v: &r/mut [T], /// Return a slice that points into another slice. #[inline(always)] -pub pure fn const_slice(v: &r/[const T], +pub pure fn const_slice(v: &'r [const T], start: uint, end: uint) - -> &r/[const T] { + -> &'r [const T] { fail_unless!(start <= end); fail_unless!(end <= len(v)); do as_const_buf(v) |p, _len| { @@ -1334,7 +1334,7 @@ pub pure fn reversed(v: &[const T]) -> ~[T] { * ~~~ */ #[inline(always)] -pub pure fn each(v: &r/[T], f: &fn(&r/T) -> bool) { +pub pure fn each(v: &'r [T], f: &fn(&'r T) -> bool) { // ^^^^ // NB---this CANNOT be &[const T]! The reason // is that you are passing it to `f()` using @@ -1389,7 +1389,7 @@ pub pure fn each_const(v: &[const T], f: &fn(elem: &const T) -> bool) { * Return true to continue, false to break. */ #[inline(always)] -pub pure fn eachi(v: &r/[T], f: &fn(uint, v: &r/T) -> bool) { +pub pure fn eachi(v: &'r [T], f: &fn(uint, v: &'r T) -> bool) { let mut i = 0; for each(v) |p| { if !f(i, p) { return; } @@ -1403,7 +1403,7 @@ pub pure fn eachi(v: &r/[T], f: &fn(uint, v: &r/T) -> bool) { * Return true to continue, false to break. */ #[inline(always)] -pub pure fn rev_each(v: &r/[T], blk: &fn(v: &r/T) -> bool) { +pub pure fn rev_each(v: &'r [T], blk: &fn(v: &'r T) -> bool) { rev_eachi(v, |_i, v| blk(v)) } @@ -1413,7 +1413,7 @@ pub pure fn rev_each(v: &r/[T], blk: &fn(v: &r/T) -> bool) { * Return true to continue, false to break. */ #[inline(always)] -pub pure fn rev_eachi(v: &r/[T], blk: &fn(i: uint, v: &r/T) -> bool) { +pub pure fn rev_eachi(v: &'r [T], blk: &fn(i: uint, v: &'r T) -> bool) { let mut i = v.len(); while i > 0 { i -= 1; @@ -1555,11 +1555,11 @@ pure fn eq(a: &[T], b: &[T]) -> bool { } #[cfg(notest)] -impl Eq for &self/[T] { +impl Eq for &'self [T] { #[inline(always)] - pure fn eq(&self, other: & &self/[T]) -> bool { eq((*self), (*other)) } + pure fn eq(&self, other: & &'self [T]) -> bool { eq((*self), (*other)) } #[inline(always)] - pure fn ne(&self, other: & &self/[T]) -> bool { !(*self).eq(other) } + pure fn ne(&self, other: & &'self [T]) -> bool { !(*self).eq(other) } } @@ -1604,7 +1604,7 @@ pure fn cmp(a: &[T], b: &[T]) -> Ordering { #[cfg(notest)] impl TotalOrd for &'self [T] { #[inline(always)] - pure fn cmp(&self, other: & &self/[T]) -> Ordering { cmp(*self, *other) } + pure fn cmp(&self, other: & &'self [T]) -> Ordering { cmp(*self, *other) } } #[cfg(notest)] @@ -1639,15 +1639,15 @@ pure fn ge(a: &[T], b: &[T]) -> bool { !lt(a, b) } pure fn gt(a: &[T], b: &[T]) -> bool { lt(b, a) } #[cfg(notest)] -impl Ord for &self/[T] { +impl Ord for &'self [T] { #[inline(always)] - pure fn lt(&self, other: & &self/[T]) -> bool { lt((*self), (*other)) } + pure fn lt(&self, other: & &'self [T]) -> bool { lt((*self), (*other)) } #[inline(always)] - pure fn le(&self, other: & &self/[T]) -> bool { le((*self), (*other)) } + pure fn le(&self, other: & &'self [T]) -> bool { le((*self), (*other)) } #[inline(always)] - pure fn ge(&self, other: & &self/[T]) -> bool { ge((*self), (*other)) } + pure fn ge(&self, other: & &'self [T]) -> bool { ge((*self), (*other)) } #[inline(always)] - pure fn gt(&self, other: & &self/[T]) -> bool { gt((*self), (*other)) } + pure fn gt(&self, other: & &'self [T]) -> bool { gt((*self), (*other)) } } #[cfg(notest)] @@ -1680,15 +1680,15 @@ pub mod traits { use ops::Add; use vec::append; - impl Add<&self/[const T],~[T]> for ~[T] { + impl Add<&'self [const T],~[T]> for ~[T] { #[inline(always)] - pure fn add(&self, rhs: & &self/[const T]) -> ~[T] { + pure fn add(&self, rhs: & &'self [const T]) -> ~[T] { append(copy *self, (*rhs)) } } } -impl Container for &self/[const T] { +impl Container for &'self [const T] { /// Returns true if a vector contains no elements #[inline] pure fn is_empty(&self) -> bool { is_empty(*self) } @@ -1712,15 +1712,15 @@ impl CopyableVector for &'self [const T] { } pub trait ImmutableVector { - pure fn view(&self, start: uint, end: uint) -> &self/[T]; - pure fn head(&self) -> &self/T; - pure fn head_opt(&self) -> Option<&self/T>; - pure fn tail(&self) -> &self/[T]; - pure fn tailn(&self, n: uint) -> &self/[T]; - pure fn init(&self) -> &self/[T]; - pure fn initn(&self, n: uint) -> &self/[T]; - pure fn last(&self) -> &self/T; - pure fn last_opt(&self) -> Option<&self/T>; + pure fn view(&self, start: uint, end: uint) -> &'self [T]; + pure fn head(&self) -> &'self T; + pure fn head_opt(&self) -> Option<&'self T>; + pure fn tail(&self) -> &'self [T]; + pure fn tailn(&self, n: uint) -> &'self [T]; + pure fn init(&self) -> &'self [T]; + pure fn initn(&self, n: uint) -> &'self [T]; + pure fn last(&self) -> &'self T; + pure fn last_opt(&self) -> Option<&'self T>; pure fn foldr(&self, z: U, p: &fn(t: &T, u: U) -> U) -> U; pure fn map(&self, f: &fn(t: &T) -> U) -> ~[U]; pure fn mapi(&self, f: &fn(uint, t: &T) -> U) -> ~[U]; @@ -1731,44 +1731,44 @@ pub trait ImmutableVector { } /// Extension methods for vectors -impl ImmutableVector for &self/[T] { +impl ImmutableVector for &'self [T] { /// Return a slice that points into another slice. #[inline] - pure fn view(&self, start: uint, end: uint) -> &self/[T] { + pure fn view(&self, start: uint, end: uint) -> &'self [T] { slice(*self, start, end) } /// Returns the first element of a vector, failing if the vector is empty. #[inline] - pure fn head(&self) -> &self/T { head(*self) } + pure fn head(&self) -> &'self T { head(*self) } /// Returns the first element of a vector #[inline] - pure fn head_opt(&self) -> Option<&self/T> { head_opt(*self) } + pure fn head_opt(&self) -> Option<&'self T> { head_opt(*self) } /// Returns all but the first element of a vector #[inline] - pure fn tail(&self) -> &self/[T] { tail(*self) } + pure fn tail(&self) -> &'self [T] { tail(*self) } /// Returns all but the first `n' elements of a vector #[inline] - pure fn tailn(&self, n: uint) -> &self/[T] { tailn(*self, n) } + pure fn tailn(&self, n: uint) -> &'self [T] { tailn(*self, n) } /// Returns all but the last elemnt of a vector #[inline] - pure fn init(&self) -> &self/[T] { init(*self) } + pure fn init(&self) -> &'self [T] { init(*self) } /// Returns all but the last `n' elemnts of a vector #[inline] - pure fn initn(&self, n: uint) -> &self/[T] { initn(*self, n) } + pure fn initn(&self, n: uint) -> &'self [T] { initn(*self, n) } /// Returns the last element of a `v`, failing if the vector is empty. #[inline] - pure fn last(&self) -> &self/T { last(*self) } + pure fn last(&self) -> &'self T { last(*self) } /// Returns the last element of a `v`, failing if the vector is empty. #[inline] - pure fn last_opt(&self) -> Option<&self/T> { last_opt(*self) } + pure fn last_opt(&self) -> Option<&'self T> { last_opt(*self) } /// Reduce a vector from right to left #[inline] @@ -1834,7 +1834,7 @@ pub trait ImmutableEqVector { pure fn rposition_elem(&self, t: &T) -> Option; } -impl ImmutableEqVector for &self/[T] { +impl ImmutableEqVector for &'self [T] { /** * Find the first index matching some predicate * @@ -1879,7 +1879,7 @@ pub trait ImmutableCopyableVector { } /// Extension methods for vectors -impl ImmutableCopyableVector for &self/[T] { +impl ImmutableCopyableVector for &'self [T] { /** * Construct a new vector from the elements of a vector for which some * predicate holds. @@ -2139,7 +2139,7 @@ pub mod raw { len: uint, f: &fn(v: &[T]) -> U) -> U { let pair = (p, len * sys::nonzero_size_of::()); - let v : *(&blk/[T]) = + let v : *(&'blk [T]) = ::cast::reinterpret_cast(&addr_of(&pair)); f(*v) } @@ -2153,7 +2153,7 @@ pub mod raw { len: uint, f: &fn(v: &mut [T]) -> U) -> U { let pair = (p, len * sys::nonzero_size_of::()); - let v : *(&blk/mut [T]) = + let v : *(&'blk mut [T]) = ::cast::reinterpret_cast(&addr_of(&pair)); f(*v) } @@ -2327,7 +2327,7 @@ impl iter::MutableIter for @mut [A] { } } -impl iter::ExtendedIter for &self/[A] { +impl iter::ExtendedIter for &'self [A] { pub pure fn eachi(&self, blk: &fn(uint, v: &A) -> bool) { iter::eachi(self, blk) } @@ -2404,7 +2404,7 @@ impl iter::ExtendedIter for @[A] { } } -impl iter::EqIter for &self/[A] { +impl iter::EqIter for &'self [A] { pub pure fn contains(&self, x: &A) -> bool { iter::contains(self, x) } pub pure fn count(&self, x: &A) -> uint { iter::count(self, x) } } @@ -2421,7 +2421,7 @@ impl iter::EqIter for @[A] { pub pure fn count(&self, x: &A) -> uint { iter::count(self, x) } } -impl iter::CopyableIter for &self/[A] { +impl iter::CopyableIter for &'self [A] { pure fn filter_to_vec(&self, pred: &fn(&A) -> bool) -> ~[A] { iter::filter_to_vec(self, pred) } @@ -2453,7 +2453,7 @@ impl iter::CopyableIter for @[A] { } } -impl iter::CopyableOrderedIter for &self/[A] { +impl iter::CopyableOrderedIter for &'self [A] { pure fn min(&self) -> A { iter::min(self) } pure fn max(&self) -> A { iter::max(self) } } @@ -2470,7 +2470,7 @@ impl iter::CopyableOrderedIter for @[A] { pure fn max(&self) -> A { iter::max(self) } } -impl iter::CopyableNonstrictIter for &self/[A] { +impl iter::CopyableNonstrictIter for &'self [A] { pure fn each_val(&const self, f: &fn(A) -> bool) { let mut i = 0; while i < self.len() { diff --git a/src/librust/rust.rc b/src/librust/rust.rc index 8fd9fea6bae4..3ca4ef5efbd9 100644 --- a/src/librust/rust.rc +++ b/src/librust/rust.rc @@ -38,23 +38,23 @@ impl ValidUsage { } enum Action { - Exec(&self/str), - Call(&self/fn(args: &[~str]) -> ValidUsage) + Exec(&'self str), + Call(&'self fn(args: &[~str]) -> ValidUsage) } enum UsageSource { - UsgExec(&self/str), - UsgStr(&self/str) + UsgExec(&'self str), + UsgStr(&'self str) } struct Command { - cmd: &self/str, + cmd: &'self str, action: Action/&self, - usage_line: &self/str, + usage_line: &'self str, usage_full: UsageSource/&self } -const commands: &static/[Command/&static] = &[ +const commands: &'static [Command/&static] = &[ Command{ cmd: "build", action: Exec("rustc"), diff --git a/src/librustc/front/core_inject.rs b/src/librustc/front/core_inject.rs index b53303c59835..0766dcd24508 100644 --- a/src/librustc/front/core_inject.rs +++ b/src/librustc/front/core_inject.rs @@ -19,7 +19,7 @@ use syntax::codemap; use syntax::codemap::dummy_sp; use syntax::fold; -const CORE_VERSION: &static/str = "0.6"; +const CORE_VERSION: &'static str = "0.6"; pub fn maybe_inject_libcore_ref(sess: Session, crate: @ast::crate) -> @ast::crate { diff --git a/src/librustc/front/test.rs b/src/librustc/front/test.rs index 48db758ef42e..ddbac4085a7d 100644 --- a/src/librustc/front/test.rs +++ b/src/librustc/front/test.rs @@ -257,7 +257,7 @@ mod __test { std::test::test_main_static(::os::args(), tests) } - const tests : &static/[std::test::TestDescAndFn] = &[ + const tests : &'static [std::test::TestDescAndFn] = &[ ... the list of tests in the crate ... ]; } @@ -352,7 +352,7 @@ fn path_node_global(+ids: ~[ast::ident]) -> @ast::path { types: ~[] } } - +#[cfg(stage0)] fn mk_tests(cx: &TestCtxt) -> @ast::item { let ext_cx = cx.ext_cx; @@ -367,6 +367,22 @@ fn mk_tests(cx: &TestCtxt) -> @ast::item { )).get() } +#[cfg(stage1)] +#[cfg(stage2)] +fn mk_tests(cx: &TestCtxt) -> @ast::item { + + let ext_cx = cx.ext_cx; + + // The vector of test_descs for this crate + let test_descs = mk_test_descs(cx); + + (quote_item!( + pub const tests : &'static [self::std::test::TestDescAndFn] = + $test_descs + ; + )).get() +} + fn is_std(cx: &TestCtxt) -> bool { let is_std = { let items = attr::find_linkage_metas(cx.crate.node.attrs); diff --git a/src/librustc/metadata/decoder.rs b/src/librustc/metadata/decoder.rs index 658b32edf216..1864e1c06ae7 100644 --- a/src/librustc/metadata/decoder.rs +++ b/src/librustc/metadata/decoder.rs @@ -66,7 +66,7 @@ fn lookup_hash(d: ebml::Doc, eq_fn: &fn(x:&[u8]) -> bool, hash: uint) -> None } -pub type GetCrateDataCb = &self/fn(ast::crate_num) -> cmd; +pub type GetCrateDataCb = &'self fn(ast::crate_num) -> cmd; pub fn maybe_find_item(item_id: int, items: ebml::Doc) -> Option { fn eq_item(bytes: &[u8], item_id: int) -> bool { @@ -544,7 +544,7 @@ pub fn get_item_path(intr: @ident_interner, cdata: cmd, id: ast::node_id) item_path(intr, lookup_item(id, cdata.data)) } -pub type decode_inlined_item = &self/fn( +pub type decode_inlined_item = &'self fn( cdata: @cstore::crate_metadata, tcx: ty::ctxt, path: ast_map::path, diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index 4b1260e76d0d..efbde04d68e6 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -1291,7 +1291,7 @@ fn encode_hash(ebml_w: writer::Encoder, hash: &str) { } // NB: Increment this as you change the metadata encoding version. -pub const metadata_encoding_version : &static/[u8] = +pub const metadata_encoding_version : &'static [u8] = &[0x72, //'r' as u8, 0x75, //'u' as u8, 0x73, //'s' as u8, diff --git a/src/librustc/metadata/filesearch.rs b/src/librustc/metadata/filesearch.rs index 02203222e057..ad5b0274c0d5 100644 --- a/src/librustc/metadata/filesearch.rs +++ b/src/librustc/metadata/filesearch.rs @@ -21,7 +21,7 @@ use core::result::Result; use core::result; use core::str; -pub type pick = &self/fn(path: &Path) -> Option; +pub type pick = &'self fn(path: &Path) -> Option; pub fn pick_file(file: Path, path: &Path) -> Option { if path.file_path() == file { option::Some(copy *path) } diff --git a/src/librustc/metadata/tydecode.rs b/src/librustc/metadata/tydecode.rs index e9cbd2685dff..c87b09cde085 100644 --- a/src/librustc/metadata/tydecode.rs +++ b/src/librustc/metadata/tydecode.rs @@ -49,7 +49,7 @@ pub enum DefIdSource { // Identifies a type parameter (`fn foo() { ... }`). TypeParameter } -type conv_did = &self/fn(source: DefIdSource, ast::def_id) -> ast::def_id; +type conv_did = &'self fn(source: DefIdSource, ast::def_id) -> ast::def_id; pub struct PState { data: @~[u8], diff --git a/src/librustc/middle/borrowck/gather_loans.rs b/src/librustc/middle/borrowck/gather_loans.rs index f55fae12b458..2893c460fe26 100644 --- a/src/librustc/middle/borrowck/gather_loans.rs +++ b/src/librustc/middle/borrowck/gather_loans.rs @@ -514,7 +514,7 @@ pub impl GatherLoanCtxt { // consumes one mut pointer and returns a narrower one: // // struct Foo { f: int } - // fn foo(p: &v/mut Foo) -> &v/mut int { &mut p.f } + // fn foo(p: &'v mut Foo) -> &'v mut int { &mut p.f } // // I think this should work fine but there is more subtlety to it than // I at first imagined. Unfortunately it's a very important use case, diff --git a/src/librustc/middle/borrowck/preserve.rs b/src/librustc/middle/borrowck/preserve.rs index 328fe1c4f3e7..962af48a70c8 100644 --- a/src/librustc/middle/borrowck/preserve.rs +++ b/src/librustc/middle/borrowck/preserve.rs @@ -64,7 +64,7 @@ pub impl BorrowckCtxt { } struct PreserveCtxt { - bccx: &self/BorrowckCtxt, + bccx: &'self BorrowckCtxt, // the region scope for which we must preserve the memory scope_region: ty::Region, diff --git a/src/librustc/middle/kind.rs b/src/librustc/middle/kind.rs index 99781a80c62c..4b1b0d0200f6 100644 --- a/src/librustc/middle/kind.rs +++ b/src/librustc/middle/kind.rs @@ -55,7 +55,7 @@ use syntax::{visit, ast_util}; // primitives in the stdlib are explicitly annotated to only take sendable // types. -pub const try_adding: &static/str = "Try adding a move"; +pub const try_adding: &'static str = "Try adding a move"; pub type rval_map = HashMap; diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs index 32567d71cd96..f88be89ad008 100644 --- a/src/librustc/middle/lang_items.rs +++ b/src/librustc/middle/lang_items.rs @@ -96,7 +96,7 @@ pub impl LanguageItems { } } - static pub fn item_name(&self, index: uint) -> &static/str { + static pub fn item_name(&self, index: uint) -> &'static str { match index { 0 => "const", 1 => "copy", @@ -257,7 +257,7 @@ pub impl LanguageItems { fn LanguageItemCollector(crate: @crate, session: Session, - items: &r/mut LanguageItems) + items: &'r mut LanguageItems) -> LanguageItemCollector/&r { let item_refs = HashMap(); @@ -312,7 +312,7 @@ fn LanguageItemCollector(crate: @crate, } struct LanguageItemCollector { - items: &self/mut LanguageItems, + items: &'self mut LanguageItems, crate: @crate, session: Session, diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index 1227f7859d8e..f2e736ac86d1 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -90,7 +90,7 @@ pub enum lint { // dead_assignment } -pub fn level_to_str(lv: level) -> &static/str { +pub fn level_to_str(lv: level) -> &'static str { match lv { allow => "allow", warn => "warn", @@ -106,7 +106,7 @@ pub enum level { struct LintSpec { lint: lint, - desc: &static/str, + desc: &'static str, default: level } @@ -881,14 +881,14 @@ fn check_item_non_camel_case_types(cx: ty::ctxt, it: @ast::item) { !ident.contains_char('_') } - fn ident_without_trailing_underscores(ident: &r/str) -> &r/str { + fn ident_without_trailing_underscores(ident: &'r str) -> &'r str { match str::rfind(ident, |c| c != '_') { Some(idx) => str::view(ident, 0, idx + 1), None => ident, // all underscores } } - fn ident_without_leading_underscores(ident: &r/str) -> &r/str { + fn ident_without_leading_underscores(ident: &'r str) -> &'r str { match str::find(ident, |c| c != '_') { Some(idx) => str::view(ident, idx, ident.len()), None => ident // all underscores diff --git a/src/librustc/middle/region.rs b/src/librustc/middle/region.rs index a96ed9b8fa6d..05a697194c8b 100644 --- a/src/librustc/middle/region.rs +++ b/src/librustc/middle/region.rs @@ -438,7 +438,7 @@ pub fn join_variance(++variance1: region_variance, /// particular site to yield the final variance of the reference. /// /// Example: if we are checking function arguments then the ambient -/// variance is contravariant. If we then find a `&r/T` pointer, `r` +/// variance is contravariant. If we then find a `&'r T` pointer, `r` /// appears in a co-variant position. This implies that this /// occurrence of `r` is contra-variant with respect to the current /// item, and hence the function returns `rv_contravariant`. @@ -517,9 +517,9 @@ pub impl DetermineRpCtxt { // concrete. // // 1. impl foo for &int { ... } - // 2. impl foo for &self/int { ... } - // 3. impl foo for bar { fn m(@self) -> &self/int { ... } } - // 4. impl foo for bar { fn m(&self) -> &self/int { ... } } + // 2. impl foo for &'self int { ... } + // 3. impl foo for bar { fn m(@self) -> &'self int { ... } } + // 4. impl foo for bar { fn m(&self) -> &'self int { ... } } // 5. impl foo for bar { fn m(&self) -> &int { ... } } // // In case 1, the anonymous region is being referenced, @@ -644,9 +644,9 @@ pub fn determine_rp_in_ty(ty: @ast::Ty, // impl etc. So we can ignore it and its components. if cx.item_id == 0 { return; } - // if this type directly references a region pointer like &r/ty, - // add to the worklist/set. Note that &r/ty is contravariant with - // respect to &r, because &r/ty can be used whereever a *smaller* + // if this type directly references a region pointer like &'r ty, + // add to the worklist/set. Note that &'r ty is contravariant with + // respect to &r, because &'r ty can be used whereever a *smaller* // region is expected (and hence is a supertype of those // locations) let sess = cx.sess; diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 16f3db6a00eb..45d64cd864fb 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -212,7 +212,7 @@ pub impl ResolveResult { pub enum TypeParameters/& { NoTypeParameters, //< No type parameters. - HasTypeParameters(&self/Generics, //< Type parameters. + HasTypeParameters(&'self Generics, //< Type parameters. node_id, //< ID of the enclosing item // The index to start numbering the type parameters at. diff --git a/src/librustc/middle/trans/_match.rs b/src/librustc/middle/trans/_match.rs index 80631abaa555..8f0d9eb953f9 100644 --- a/src/librustc/middle/trans/_match.rs +++ b/src/librustc/middle/trans/_match.rs @@ -327,7 +327,7 @@ pub type BindingsMap = HashMap; pub struct ArmData { bodycx: block, - arm: &self/ast::arm, + arm: &'self ast::arm, bindings_map: BindingsMap } @@ -391,7 +391,7 @@ pub fn expand_nested_bindings(bcx: block, m: &[@Match/&r], } } -pub type enter_pat = &self/fn(@ast::pat) -> Option<~[@ast::pat]>; +pub type enter_pat = &'self fn(@ast::pat) -> Option<~[@ast::pat]>; pub fn assert_is_binding_or_wild(bcx: block, p: @ast::pat) { if !pat_is_binding_or_wild(bcx.tcx().def_map, p) { diff --git a/src/librustc/middle/trans/callee.rs b/src/librustc/middle/trans/callee.rs index 15888a64e1e2..81d85773ccb5 100644 --- a/src/librustc/middle/trans/callee.rs +++ b/src/librustc/middle/trans/callee.rs @@ -550,8 +550,8 @@ pub fn trans_call_inner( pub enum CallArgs { - ArgExprs(&self/[@ast::expr]), - ArgVals(&self/[ValueRef]) + ArgExprs(&'self [@ast::expr]), + ArgVals(&'self [ValueRef]) } pub struct Args { diff --git a/src/librustc/middle/trans/datum.rs b/src/librustc/middle/trans/datum.rs index 11d3e1552028..9b3ec5ef842e 100644 --- a/src/librustc/middle/trans/datum.rs +++ b/src/librustc/middle/trans/datum.rs @@ -617,7 +617,7 @@ pub impl Datum { // using `to_ref_llval()`). // Convert to ref, yielding lltype *T. Then create a Rust - // type &static/T (which translates to *T). Construct new + // type &'static T (which translates to *T). Construct new // result (which will be by-value). Note that it is not // significant *which* region we pick here. let llval = self.to_ref_llval(bcx); diff --git a/src/librustc/middle/trans/tvec.rs b/src/librustc/middle/trans/tvec.rs index 3e4486476c0b..9f66bb5b4688 100644 --- a/src/librustc/middle/trans/tvec.rs +++ b/src/librustc/middle/trans/tvec.rs @@ -520,7 +520,7 @@ pub fn get_base_and_len(bcx: block, pub type val_and_ty_fn = @fn(block, ValueRef, ty::t) -> Result; -pub type iter_vec_block = &self/fn(block, ValueRef, ty::t) -> block; +pub type iter_vec_block = &'self fn(block, ValueRef, ty::t) -> block; pub fn iter_vec_raw(bcx: block, data_ptr: ValueRef, vec_ty: ty::t, fill: ValueRef, f: iter_vec_block) -> block { diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index f455e983690f..fcebcaf501ee 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -448,13 +448,13 @@ pub enum Region { #[auto_encode] #[auto_decode] pub enum bound_region { - /// The self region for structs, impls (&T in a type defn or &self/T) + /// The self region for structs, impls (&T in a type defn or &'self T) br_self, /// An anonymous region parameter for a given fn (&T) br_anon(uint), - /// Named region parameters for functions (a in &a/T) + /// Named region parameters for functions (a in &'a T) br_named(ast::ident), /// Fresh bound identifiers created during GLB computations. diff --git a/src/librustc/middle/typeck/astconv.rs b/src/librustc/middle/typeck/astconv.rs index 61603f7b5782..0186ab304641 100644 --- a/src/librustc/middle/typeck/astconv.rs +++ b/src/librustc/middle/typeck/astconv.rs @@ -46,7 +46,7 @@ * type foo/& = ...; * type bar = fn(&foo, &a.foo) * The fully expanded version of type bar is: - * type bar = fn(&foo/&, &a.foo/&a) + * type bar = fn(&'foo &, &a.foo/&a) * Note that the self region for the `foo` defaulted to `&` in the first * case but `&a` in the second. Basically, defaults that appear inside * an rptr (`&r.T`) use the region `r` that appears in the rptr. diff --git a/src/librustc/middle/typeck/check/method.rs b/src/librustc/middle/typeck/check/method.rs index d673cf6a39ad..929555e31480 100644 --- a/src/librustc/middle/typeck/check/method.rs +++ b/src/librustc/middle/typeck/check/method.rs @@ -157,7 +157,7 @@ pub struct LookupContext { self_expr: @ast::expr, callee_id: node_id, m_name: ast::ident, - supplied_tps: &self/[ty::t], + supplied_tps: &'self [ty::t], impl_dups: HashMap, inherent_candidates: @mut ~[Candidate], extension_candidates: @mut ~[Candidate], diff --git a/src/librustc/middle/typeck/check/regionck.rs b/src/librustc/middle/typeck/check/regionck.rs index 4ff8431d88a3..6871496a805c 100644 --- a/src/librustc/middle/typeck/check/regionck.rs +++ b/src/librustc/middle/typeck/check/regionck.rs @@ -18,7 +18,7 @@ know whether a given type will be a region pointer or not until this phase. In particular, we ensure that, if the type of an expression or -variable is `&r/T`, then the expression or variable must occur within +variable is `&'r T`, then the expression or variable must occur within the region scope `r`. Note that in some cases `r` may still be a region variable, so this gives us a chance to influence the value for `r` that we infer to ensure we choose a value large enough to enclose @@ -500,7 +500,7 @@ pub mod guarantor { * * struct Foo { i: int } * struct Bar { foo: Foo } - * fn get_i(x: &a/Bar) -> &a/int { + * fn get_i(x: &'a Bar) -> &'a int { * let foo = &x.foo; // Lifetime L1 * &foo.i // Lifetime L2 * } diff --git a/src/librustc/middle/typeck/coherence.rs b/src/librustc/middle/typeck/coherence.rs index ed26812f44d2..3d2ed867de1f 100644 --- a/src/librustc/middle/typeck/coherence.rs +++ b/src/librustc/middle/typeck/coherence.rs @@ -550,8 +550,8 @@ pub impl CoherenceChecker { } fn can_unify_universally_quantified(&self, - a: &a/UniversalQuantificationResult, - b: &a/UniversalQuantificationResult) + a: &'a UniversalQuantificationResult, + b: &'a UniversalQuantificationResult) -> bool { let mut might_unify = true; let _ = do self.inference_context.probe { diff --git a/src/librustc/middle/typeck/collect.rs b/src/librustc/middle/typeck/collect.rs index 29d1f81cdd60..b9aac4b19ed9 100644 --- a/src/librustc/middle/typeck/collect.rs +++ b/src/librustc/middle/typeck/collect.rs @@ -438,7 +438,7 @@ pub fn compare_impl_method(tcx: ty::ctxt, // Replace any references to the self region in the self type with // a free region. So, for example, if the impl type is - // "&self/str", then this would replace the self type with a free + // "&'self str", then this would replace the self type with a free // region `self`. let dummy_self_r = ty::re_free(cm.body_id, ty::br_self); let self_ty = replace_bound_self(tcx, self_ty, dummy_self_r); @@ -601,7 +601,7 @@ pub fn convert_methods(ccx: &CrateCtxt, pub fn ensure_no_ty_param_bounds(ccx: &CrateCtxt, span: span, generics: &ast::Generics, - thing: &static/str) { + thing: &'static str) { for generics.ty_params.each |ty_param| { if ty_param.bounds.len() > 0 { ccx.tcx.sess.span_err( diff --git a/src/librustc/middle/typeck/infer/lattice.rs b/src/librustc/middle/typeck/infer/lattice.rs index 5c59f1215e49..1ce590647653 100644 --- a/src/librustc/middle/typeck/infer/lattice.rs +++ b/src/librustc/middle/typeck/infer/lattice.rs @@ -58,7 +58,7 @@ pub trait LatticeValue { -> cres; } -pub type LatticeOp = &self/fn(cf: &CombineFields, a: &T, b: &T) -> cres; +pub type LatticeOp = &'self fn(cf: &CombineFields, a: &T, b: &T) -> cres; impl LatticeValue for ty::t { static fn sub(&self, cf: &CombineFields, a: &ty::t, b: &ty::t) -> ures { @@ -378,7 +378,7 @@ pub fn super_lattice_tys( } } -pub type LatticeDirOp = &self/fn(a: &T, b: &T) -> cres; +pub type LatticeDirOp = &'self fn(a: &T, b: &T) -> cres; pub enum LatticeVarResult { VarResult(V), diff --git a/src/librustc/middle/typeck/infer/region_inference.rs b/src/librustc/middle/typeck/infer/region_inference.rs index 33e953b6218d..534e50e115f7 100644 --- a/src/librustc/middle/typeck/infer/region_inference.rs +++ b/src/librustc/middle/typeck/infer/region_inference.rs @@ -153,7 +153,7 @@ The problem we are addressing is that there is a kind of subtyping between functions with bound region parameters. Consider, for example, whether the following relation holds: - fn(&a/int) <: &fn(&b/int)? (Yes, a => b) + fn(&'a int) <: &fn(&'b int)? (Yes, a => b) The answer is that of course it does. These two types are basically the same, except that in one we used the name `a` and one we used @@ -163,14 +163,14 @@ In the examples that follow, it becomes very important to know whether a lifetime is bound in a function type (that is, is a lifetime parameter) or appears free (is defined in some outer scope). Therefore, from now on I will write the bindings explicitly, using a -notation like `fn(&a/int)` to indicate that `a` is a lifetime +notation like `fn(&'a int)` to indicate that `a` is a lifetime parameter. 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/int) <: &fn(&self/int)? (Yes, a => self) + fn(&'a int) <: &fn(&'self 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 @@ -187,7 +187,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) <: &fn(&a/int)? (No) + fn(&'self int) <: &fn(&'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`*, @@ -196,8 +196,8 @@ accepted any lifetime. What about these two examples: - fn(&a/int, &b/int) <: &fn(&a/int, &a/int)? (Yes) - fn(&a/int, &a/int) <: &fn(&a/int, &b/int)? (No) + fn(&'a int, &'b int) <: &fn(&'a int, &'a int)? (Yes) + fn(&'a int, &'a int) <: &fn(&'a int, &'b int)? (No) Here, it is true that functions which take two pointers with any two lifetimes can be treated as if they only accepted two pointers with @@ -221,12 +221,12 @@ Let's walk through some examples and see how this algorithm plays out. We'll start with the first example, which was: - 1. fn(&a/T) <: &fn(&b/T)? Yes: a -> b + 1. fn(&'a T) <: &fn(&'b T)? Yes: a -> b After steps 1 and 2 of the algorithm we will have replaced the types like so: - 1. fn(&A/T) <: &fn(&x/T)? + 1. fn(&'A T) <: &fn(&'x T)? Here the upper case `&A` indicates a *region variable*, that is, a region whose value is being inferred by the system. I also replaced @@ -238,7 +238,7 @@ region names anymore (as indicated by the absence of `<` and `>`). The next step is to check that the parameter types match. Because parameters are contravariant, this means that we check whether: - &x/T <: &A/T + &'x T <: &'A T Region pointers are contravariant so this implies that @@ -255,12 +255,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) <: &fn(&b/T)? No! + 3. fn(&'self T) <: &fn(&'b T)? No! After steps 1 and 2 of the algorithm we will have replaced the types like so: - 3. fn(&self/T) <: &fn(&x/T)? + 3. fn(&'self T) <: &fn(&'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 @@ -275,33 +275,33 @@ You may be wondering about that mysterious last step in the algorithm. So far it has not been relevant. The purpose of that last step is to catch something like *this*: - fn() -> fn(&a/T) <: &fn() -> fn(&b/T)? No. + fn() -> fn(&'a T) <: &fn() -> fn(&'b T)? No. Here the function types are the same but for where the binding occurs. The subtype returns a function that expects a value in precisely one region. The supertype returns a function that expects a value in any region. If we allow an instance of the subtype to be used where the supertype is expected, then, someone could call the fn and think that -the return value has type `fn(&b/T)` when it really has type -`fn(&a/T)` (this is case #3, above). Bad. +the return value has type `fn(&'b T)` when it really has type +`fn(&'a T)` (this is case #3, above). Bad. So let's step through what happens when we perform this subtype check. We first replace the bound regions in the subtype (the supertype has no bound regions). This gives us: - fn() -> fn(&A/T) <: &fn() -> fn(&b/T)? + fn() -> fn(&'A T) <: &fn() -> fn(&'b T)? Now we compare the return types, which are covariant, and hence we have: - fn(&A/T) <: &fn(&b/T)? + fn(&'A T) <: &fn(&'b T)? Here we skolemize the bound region in the supertype to yield: - fn(&A/T) <: &fn(&x/T)? + fn(&'A T) <: &fn(&'x T)? And then proceed to compare the argument types: - &x/T <: &A/T + &'x T <: &'A T &A <= &x Finally, this is where it gets interesting! This is where an error @@ -314,7 +314,7 @@ The difference between this example and the first one is that the variable `A` already existed at the point where the skolemization occurred. In the first example, you had two functions: - fn(&a/T) <: &fn(&b/T) + fn(&'a T) <: &fn(&'b T) and hence `&A` and `&x` were created "together". In general, the intention of the skolemized names is that they are supposed to be diff --git a/src/librustc/middle/typeck/infer/unify.rs b/src/librustc/middle/typeck/infer/unify.rs index d692a66f6991..fe77b62de437 100644 --- a/src/librustc/middle/typeck/infer/unify.rs +++ b/src/librustc/middle/typeck/infer/unify.rs @@ -35,8 +35,8 @@ pub struct Node { } pub trait UnifyVid { - static fn appropriate_vals_and_bindings(&self, infcx: &v/mut InferCtxt) - -> &v/mut ValsAndBindings; + static fn appropriate_vals_and_bindings(&self, infcx: &'v mut InferCtxt) + -> &'v mut ValsAndBindings; } pub impl InferCtxt { @@ -235,15 +235,15 @@ pub impl InferCtxt { // ______________________________________________________________________ impl UnifyVid> for ty::TyVid { - static fn appropriate_vals_and_bindings(&self, infcx: &v/mut InferCtxt) - -> &v/mut ValsAndBindings> { + static fn appropriate_vals_and_bindings(&self, infcx: &'v mut InferCtxt) + -> &'v mut ValsAndBindings> { return &mut infcx.ty_var_bindings; } } impl UnifyVid> for ty::IntVid { - static fn appropriate_vals_and_bindings(&self, infcx: &v/mut InferCtxt) - -> &v/mut ValsAndBindings> { + static fn appropriate_vals_and_bindings(&self, infcx: &'v mut InferCtxt) + -> &'v mut ValsAndBindings> { return &mut infcx.int_var_bindings; } } @@ -256,8 +256,8 @@ impl SimplyUnifiable for IntVarValue { } impl UnifyVid> for ty::FloatVid { - static fn appropriate_vals_and_bindings(&self, infcx: &v/mut InferCtxt) - -> &v/mut ValsAndBindings> { + static fn appropriate_vals_and_bindings(&self, infcx: &'v mut InferCtxt) + -> &'v mut ValsAndBindings> { return &mut infcx.float_var_bindings; } } diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index bd2f641c017f..5a08884777c1 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -27,8 +27,8 @@ use core::task; /// As sync::condvar, a mechanism for unlock-and-descheduling and signalling. pub struct Condvar { is_mutex: bool, - failed: &self/mut bool, - cond: &self/sync::Condvar/&self + failed: &'self mut bool, + cond: &'self sync::Condvar/&self } pub impl Condvar/&self { @@ -95,7 +95,7 @@ pub fn ARC(data: T) -> ARC { * Access the underlying data in an atomically reference counted * wrapper. */ -pub fn get(rc: &a/ARC) -> &a/T { +pub fn get(rc: &'a ARC) -> &'a T { unsafe { get_shared_immutable_state(&rc.x) } } @@ -193,7 +193,7 @@ pub impl MutexARC { #[inline(always)] unsafe fn access_cond( &self, - blk: &fn(x: &x/mut T, c: &c/Condvar) -> U) -> U + blk: &fn(x: &'x mut T, c: &'c Condvar) -> U) -> U { unsafe { let state = get_shared_mutable_state(&self.x); @@ -239,7 +239,7 @@ impl Drop for PoisonOnFail { } } -fn PoisonOnFail(failed: &r/mut bool) -> PoisonOnFail { +fn PoisonOnFail(failed: &'r mut bool) -> PoisonOnFail { PoisonOnFail { failed: ptr::to_mut_unsafe_ptr(failed) } @@ -313,7 +313,7 @@ pub impl RWARC { } /// As write(), but with a condvar, as sync::rwlock.write_cond(). #[inline(always)] - fn write_cond(&self, blk: &fn(x: &x/mut T, c: &c/Condvar) -> U) -> U { + fn write_cond(&self, blk: &fn(x: &'x mut T, c: &'c Condvar) -> U) -> U { unsafe { let state = get_shared_mutable_state(&self.x); do (*borrow_rwlock(state)).write_cond |cond| { @@ -436,7 +436,7 @@ pub impl RWWriteMode/&self { } } /// Access the pre-downgrade RWARC in write mode with a condvar. - fn write_cond(&self, blk: &fn(x: &x/mut T, c: &c/Condvar) -> U) -> U { + fn write_cond(&self, blk: &fn(x: &'x mut T, c: &'c Condvar) -> U) -> U { match *self { RWWriteMode { data: ref data, diff --git a/src/libstd/arena.rs b/src/libstd/arena.rs index 6b5f806f7df3..68132a1c08d0 100644 --- a/src/libstd/arena.rs +++ b/src/libstd/arena.rs @@ -201,7 +201,7 @@ pub impl Arena { } #[inline(always)] - fn alloc_pod(&self, op: &fn() -> T) -> &self/T { + fn alloc_pod(&self, op: &fn() -> T) -> &'self T { unsafe { let tydesc = sys::get_type_desc::(); let ptr = self.alloc_pod_inner((*tydesc).size, (*tydesc).align); @@ -246,7 +246,7 @@ pub impl Arena { } #[inline(always)] - fn alloc_nonpod(&self, op: &fn() -> T) -> &self/T { + fn alloc_nonpod(&self, op: &fn() -> T) -> &'self T { unsafe { let tydesc = sys::get_type_desc::(); let (ty_ptr, ptr) = @@ -268,7 +268,7 @@ pub impl Arena { // The external interface #[inline(always)] - fn alloc(&self, op: &fn() -> T) -> &self/T { + fn alloc(&self, op: &fn() -> T) -> &'self T { unsafe { if !rusti::needs_drop::() { self.alloc_pod(op) diff --git a/src/libstd/base64.rs b/src/libstd/base64.rs index 0bd9e1eac51a..56ce54be44e0 100644 --- a/src/libstd/base64.rs +++ b/src/libstd/base64.rs @@ -16,7 +16,7 @@ pub trait ToBase64 { pure fn to_base64(&self) -> ~str; } -impl ToBase64 for &self/[u8] { +impl ToBase64 for &'self [u8] { pure fn to_base64(&self) -> ~str { let chars = str::chars( ~"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" @@ -69,7 +69,7 @@ impl ToBase64 for &self/[u8] { } } -impl ToBase64 for &self/str { +impl ToBase64 for &'self str { pure fn to_base64(&self) -> ~str { str::to_bytes(*self).to_base64() } diff --git a/src/libstd/bigint.rs b/src/libstd/bigint.rs index 5c3f37faca71..e128859bb7dd 100644 --- a/src/libstd/bigint.rs +++ b/src/libstd/bigint.rs @@ -1045,9 +1045,9 @@ mod biguint_tests { fail_unless!(BigUint::new(~[0, 0, -1]).to_uint() == uint::max_value); } - const sum_triples: &static/[(&static/[BigDigit], - &static/[BigDigit], - &static/[BigDigit])] = &[ + const sum_triples: &'static [(&'static [BigDigit], + &'static [BigDigit], + &'static [BigDigit])] = &[ (&[], &[], &[]), (&[], &[ 1], &[ 1]), (&[ 1], &[ 1], &[ 2]), @@ -1085,9 +1085,9 @@ mod biguint_tests { } } - const mul_triples: &static/[(&static/[BigDigit], - &static/[BigDigit], - &static/[BigDigit])] = &[ + const mul_triples: &'static [(&'static [BigDigit], + &'static [BigDigit], + &'static [BigDigit])] = &[ (&[], &[], &[]), (&[], &[ 1], &[]), (&[ 2], &[], &[]), @@ -1111,10 +1111,10 @@ mod biguint_tests { (&[ 0, 0, 1], &[ 0, 0, 0, 1], &[0, 0, 0, 0, 0, 1]) ]; - const divmod_quadruples: &static/[(&static/[BigDigit], - &static/[BigDigit], - &static/[BigDigit], - &static/[BigDigit])] + const divmod_quadruples: &'static [(&'static [BigDigit], + &'static [BigDigit], + &'static [BigDigit], + &'static [BigDigit])] = &[ (&[ 1], &[ 2], &[], &[1]), (&[ 1, 1], &[ 2], &[-1/2+1], &[1]), @@ -1399,9 +1399,9 @@ mod bigint_tests { ).to_uint() == 0); } - const sum_triples: &static/[(&static/[BigDigit], - &static/[BigDigit], - &static/[BigDigit])] = &[ + const sum_triples: &'static [(&'static [BigDigit], + &'static [BigDigit], + &'static [BigDigit])] = &[ (&[], &[], &[]), (&[], &[ 1], &[ 1]), (&[ 1], &[ 1], &[ 2]), @@ -1451,9 +1451,9 @@ mod bigint_tests { } } - const mul_triples: &static/[(&static/[BigDigit], - &static/[BigDigit], - &static/[BigDigit])] = &[ + const mul_triples: &'static [(&'static [BigDigit], + &'static [BigDigit], + &'static [BigDigit])] = &[ (&[], &[], &[]), (&[], &[ 1], &[]), (&[ 2], &[], &[]), @@ -1477,10 +1477,10 @@ mod bigint_tests { (&[ 0, 0, 1], &[ 0, 0, 0, 1], &[0, 0, 0, 0, 0, 1]) ]; - const divmod_quadruples: &static/[(&static/[BigDigit], - &static/[BigDigit], - &static/[BigDigit], - &static/[BigDigit])] + const divmod_quadruples: &'static [(&'static [BigDigit], + &'static [BigDigit], + &'static [BigDigit], + &'static [BigDigit])] = &[ (&[ 1], &[ 2], &[], &[1]), (&[ 1, 1], &[ 2], &[-1/2+1], &[1]), diff --git a/src/libstd/deque.rs b/src/libstd/deque.rs index 15131093acb0..90269e28b8a4 100644 --- a/src/libstd/deque.rs +++ b/src/libstd/deque.rs @@ -49,17 +49,17 @@ pub impl Deque { /// Return a reference to the first element in the deque /// /// Fails if the deque is empty - fn peek_front(&self) -> &self/T { get(self.elts, self.lo) } + fn peek_front(&self) -> &'self T { get(self.elts, self.lo) } /// Return a reference to the last element in the deque /// /// Fails if the deque is empty - fn peek_back(&self) -> &self/T { get(self.elts, self.hi - 1u) } + fn peek_back(&self) -> &'self T { get(self.elts, self.hi - 1u) } /// Retrieve an element in the deque by index /// /// Fails if there is no element with the given index - fn get(&self, i: int) -> &self/T { + fn get(&self, i: int) -> &'self T { let idx = (self.lo + (i as uint)) % self.elts.len(); get(self.elts, idx) } @@ -130,7 +130,7 @@ fn grow(nelts: uint, lo: uint, elts: &mut [Option]) -> ~[Option] { rv } -fn get(elts: &r/[Option], i: uint) -> &r/T { +fn get(elts: &'r [Option], i: uint) -> &'r T { match elts[i] { Some(ref t) => t, _ => fail!() } } diff --git a/src/libstd/future.rs b/src/libstd/future.rs index 5dc264cb8784..4867204ea39a 100644 --- a/src/libstd/future.rs +++ b/src/libstd/future.rs @@ -55,7 +55,7 @@ pub impl Future { pub impl Future { - pure fn get_ref(&self) -> &self/A { + pure fn get_ref(&self) -> &'self A { /*! * Executes the future's closure and then returns a borrowed * pointer to the result. The borrowed pointer lasts as long as diff --git a/src/libstd/json.rs b/src/libstd/json.rs index 56f2611c9144..e52d08c40fe3 100644 --- a/src/libstd/json.rs +++ b/src/libstd/json.rs @@ -748,7 +748,7 @@ pub fn from_str(s: &str) -> Result { pub struct Decoder { priv json: Json, - priv mut stack: ~[&self/Json], + priv mut stack: ~[&'self Json], } pub fn Decoder(json: Json) -> Decoder { @@ -756,12 +756,12 @@ pub fn Decoder(json: Json) -> Decoder { } priv impl Decoder/&self { - fn peek(&self) -> &self/Json { + fn peek(&self) -> &'self Json { if self.stack.len() == 0 { self.stack.push(&self.json); } self.stack[self.stack.len() - 1] } - fn pop(&self) -> &self/Json { + fn pop(&self) -> &'self Json { if self.stack.len() == 0 { self.stack.push(&self.json); } self.stack.pop() } diff --git a/src/libstd/priority_queue.rs b/src/libstd/priority_queue.rs index 99d19c4839c4..b9b5075c4349 100644 --- a/src/libstd/priority_queue.rs +++ b/src/libstd/priority_queue.rs @@ -50,10 +50,10 @@ impl Mutable for PriorityQueue { pub impl PriorityQueue { /// Returns the greatest item in the queue - fails if empty - pure fn top(&self) -> &self/T { &self.data[0] } + pure fn top(&self) -> &'self T { &self.data[0] } /// Returns the greatest item in the queue - None if empty - pure fn maybe_top(&self) -> Option<&self/T> { + pure fn maybe_top(&self) -> Option<&'self T> { if self.is_empty() { None } else { Some(self.top()) } } diff --git a/src/libstd/serialize.rs b/src/libstd/serialize.rs index 0288155d29eb..2c927b5db16c 100644 --- a/src/libstd/serialize.rs +++ b/src/libstd/serialize.rs @@ -213,7 +213,7 @@ impl Decodable for i64 { } } -impl Encodable for &self/str { +impl Encodable for &'self str { fn encode(&self, s: &S) { s.emit_borrowed_str(*self) } } @@ -286,7 +286,7 @@ impl Decodable for () { } } -impl> Encodable for &self/T { +impl> Encodable for &'self T { fn encode(&self, s: &S) { s.emit_borrowed(|| (**self).encode(s)) } @@ -316,7 +316,7 @@ impl> Decodable for @T { } } -impl> Encodable for &self/[T] { +impl> Encodable for &'self [T] { fn encode(&self, s: &S) { do s.emit_borrowed_vec(self.len()) { for self.eachi |i, e| { diff --git a/src/libstd/smallintmap.rs b/src/libstd/smallintmap.rs index bdce257e347d..c63ef9b72584 100644 --- a/src/libstd/smallintmap.rs +++ b/src/libstd/smallintmap.rs @@ -22,9 +22,9 @@ pub struct SmallIntMap { priv v: ~[Option], } -impl BaseIter<(uint, &self/V)> for SmallIntMap { +impl BaseIter<(uint, &'self V)> for SmallIntMap { /// Visit all key-value pairs in order - pure fn each(&self, it: &fn(&(uint, &self/V)) -> bool) { + pure fn each(&self, it: &fn(&(uint, &'self V)) -> bool) { for uint::range(0, self.v.len()) |i| { match self.v[i] { Some(ref elt) => if !it(&(i, elt)) { break }, @@ -36,9 +36,9 @@ impl BaseIter<(uint, &self/V)> for SmallIntMap { pure fn size_hint(&self) -> Option { Some(self.len()) } } -impl ReverseIter<(uint, &self/V)> for SmallIntMap { +impl ReverseIter<(uint, &'self V)> for SmallIntMap { /// Visit all key-value pairs in reverse order - pure fn each_reverse(&self, it: &fn(&(uint, &self/V)) -> bool) { + pure fn each_reverse(&self, it: &fn(&(uint, &'self V)) -> bool) { for uint::range_rev(self.v.len(), 0) |i| { match self.v[i - 1] { Some(ref elt) => if !it(&(i - 1, elt)) { break }, @@ -96,7 +96,7 @@ impl Map for SmallIntMap { } /// Iterate over the map and mutate the contained values - pure fn find(&self, key: &uint) -> Option<&self/V> { + pure fn find(&self, key: &uint) -> Option<&'self V> { if *key < self.v.len() { match self.v[*key] { Some(ref value) => Some(value), @@ -136,7 +136,7 @@ pub impl SmallIntMap { /// Create an empty SmallIntMap static pure fn new() -> SmallIntMap { SmallIntMap{v: ~[]} } - pure fn get(&self, key: &uint) -> &self/V { + pure fn get(&self, key: &uint) -> &'self V { self.find(key).expect("key not present") } } diff --git a/src/libstd/sort.rs b/src/libstd/sort.rs index e0828d981d72..43c68196eb82 100644 --- a/src/libstd/sort.rs +++ b/src/libstd/sort.rs @@ -16,7 +16,7 @@ use core::util; use core::vec::{len, push}; use core::vec; -type Le = &self/pure fn(v1: &T, v2: &T) -> bool; +type Le = &'self pure fn(v1: &T, v2: &T) -> bool; /** * Merge sort. Returns a new vector containing the sorted list. @@ -168,7 +168,7 @@ pub trait Sort { fn qsort(self); } -impl Sort for &self/mut [T] { +impl Sort for &'self mut [T] { fn qsort(self) { quick_sort3(self); } } @@ -868,7 +868,7 @@ mod tests { #[test] pub fn test_merge_sort_stability() { // tjc: funny that we have to use parens - pure fn ile(x: &(&static/str), y: &(&static/str)) -> bool + pure fn ile(x: &(&'static str), y: &(&'static str)) -> bool { unsafe // to_lower is not pure... { @@ -1172,7 +1172,7 @@ mod big_tests { struct LVal { val: uint, - key: &self/fn(@uint), + key: &'self fn(@uint), } impl Drop for LVal/&self { @@ -1190,16 +1190,16 @@ mod big_tests { } impl Ord for LVal/&self { - pure fn lt(&self, other: &a/LVal/&self) -> bool { + pure fn lt(&self, other: &'a LVal/&self) -> bool { (*self).val < other.val } - pure fn le(&self, other: &a/LVal/&self) -> bool { + pure fn le(&self, other: &'a LVal/&self) -> bool { (*self).val <= other.val } - pure fn gt(&self, other: &a/LVal/&self) -> bool { + pure fn gt(&self, other: &'a LVal/&self) -> bool { (*self).val > other.val } - pure fn ge(&self, other: &a/LVal/&self) -> bool { + pure fn ge(&self, other: &'a LVal/&self) -> bool { (*self).val >= other.val } } diff --git a/src/libstd/stats.rs b/src/libstd/stats.rs index 2a62ebadd2b7..cecf9686327d 100644 --- a/src/libstd/stats.rs +++ b/src/libstd/stats.rs @@ -30,7 +30,7 @@ pub trait Stats { fn median_abs_dev_pct(self) -> f64; } -impl Stats for &self/[f64] { +impl Stats for &'self [f64] { fn sum(self) -> f64 { vec::foldl(0.0, self, |p,q| p + *q) } diff --git a/src/libstd/sync.rs b/src/libstd/sync.rs index 1d1ec0e11f7f..d556be6b85bd 100644 --- a/src/libstd/sync.rs +++ b/src/libstd/sync.rs @@ -165,7 +165,7 @@ pub impl Sem<~[Waitqueue]> { #[doc(hidden)] type SemRelease = SemReleaseGeneric/&self<()>; type SemAndSignalRelease = SemReleaseGeneric/&self<~[Waitqueue]>; -struct SemReleaseGeneric { sem: &self/Sem } +struct SemReleaseGeneric { sem: &'self Sem } impl Drop for SemReleaseGeneric/&self { fn finalize(&self) { @@ -173,13 +173,13 @@ impl Drop for SemReleaseGeneric/&self { } } -fn SemRelease(sem: &r/Sem<()>) -> SemRelease/&r { +fn SemRelease(sem: &'r Sem<()>) -> SemRelease/&r { SemReleaseGeneric { sem: sem } } -fn SemAndSignalRelease(sem: &r/Sem<~[Waitqueue]>) +fn SemAndSignalRelease(sem: &'r Sem<~[Waitqueue]>) -> SemAndSignalRelease/&r { SemReleaseGeneric { sem: sem @@ -187,7 +187,7 @@ fn SemAndSignalRelease(sem: &r/Sem<~[Waitqueue]>) } /// A mechanism for atomic-unlock-and-deschedule blocking and signalling. -pub struct Condvar { priv sem: &self/Sem<~[Waitqueue]> } +pub struct Condvar { priv sem: &'self Sem<~[Waitqueue]> } impl Drop for Condvar/&self { fn finalize(&self) {} } @@ -258,7 +258,7 @@ pub impl Condvar/&self { // mutex during unwinding. As long as the wrapper (mutex, etc) is // bounded in when it gets released, this shouldn't hang forever. struct SemAndSignalReacquire { - sem: &self/Sem<~[Waitqueue]>, + sem: &'self Sem<~[Waitqueue]>, } impl Drop for SemAndSignalReacquire/&self { @@ -272,7 +272,7 @@ pub impl Condvar/&self { } } - fn SemAndSignalReacquire(sem: &r/Sem<~[Waitqueue]>) + fn SemAndSignalReacquire(sem: &'r Sem<~[Waitqueue]>) -> SemAndSignalReacquire/&r { SemAndSignalReacquire { sem: sem @@ -610,7 +610,7 @@ pub impl RWlock { // FIXME(#3588) should go inside of read() #[doc(hidden)] struct RWlockReleaseRead { - lock: &self/RWlock, + lock: &'self RWlock, } impl Drop for RWlockReleaseRead/&self { @@ -635,7 +635,7 @@ impl Drop for RWlockReleaseRead/&self { } } -fn RWlockReleaseRead(lock: &r/RWlock) -> RWlockReleaseRead/&r { +fn RWlockReleaseRead(lock: &'r RWlock) -> RWlockReleaseRead/&r { RWlockReleaseRead { lock: lock } @@ -644,7 +644,7 @@ fn RWlockReleaseRead(lock: &r/RWlock) -> RWlockReleaseRead/&r { // FIXME(#3588) should go inside of downgrade() #[doc(hidden)] struct RWlockReleaseDowngrade { - lock: &self/RWlock, + lock: &'self RWlock, } impl Drop for RWlockReleaseDowngrade/&self { @@ -677,18 +677,18 @@ impl Drop for RWlockReleaseDowngrade/&self { } } -fn RWlockReleaseDowngrade(lock: &r/RWlock) -> RWlockReleaseDowngrade/&r { +fn RWlockReleaseDowngrade(lock: &'r RWlock) -> RWlockReleaseDowngrade/&r { RWlockReleaseDowngrade { lock: lock } } /// The "write permission" token used for rwlock.write_downgrade(). -pub struct RWlockWriteMode { priv lock: &self/RWlock } +pub struct RWlockWriteMode { priv lock: &'self RWlock } impl Drop for RWlockWriteMode/&self { fn finalize(&self) {} } /// The "read permission" token used for rwlock.write_downgrade(). -pub struct RWlockReadMode { priv lock: &self/RWlock } +pub struct RWlockReadMode { priv lock: &'self RWlock } impl Drop for RWlockReadMode/&self { fn finalize(&self) {} } pub impl RWlockWriteMode/&self { diff --git a/src/libstd/test.rs b/src/libstd/test.rs index cec9f56708f3..63cf4c998df7 100644 --- a/src/libstd/test.rs +++ b/src/libstd/test.rs @@ -49,7 +49,7 @@ pub mod rustrt { // hierarchically it may. pub enum TestName { - StaticTestName(&static/str), + StaticTestName(&'static str), DynTestName(~str) } impl ToStr for TestName { diff --git a/src/libstd/treemap.rs b/src/libstd/treemap.rs index 8e204014975b..7192da7b88e1 100644 --- a/src/libstd/treemap.rs +++ b/src/libstd/treemap.rs @@ -88,7 +88,7 @@ impl Ord for TreeMap { impl<'self, K: TotalOrd, V> BaseIter<(&'self K, &'self V)> for TreeMap { /// Visit all key-value pairs in order - pure fn each(&self, f: &fn(&(&self/K, &self/V)) -> bool) { + pure fn each(&self, f: &fn(&(&'self K, &'self V)) -> bool) { each(&self.root, f) } pure fn size_hint(&self) -> Option { Some(self.len()) } @@ -99,7 +99,7 @@ impl<'self, K: TotalOrd, V> for TreeMap { /// Visit all key-value pairs in reverse order - pure fn each_reverse(&self, f: &fn(&(&self/K, &self/V)) -> bool) { + pure fn each_reverse(&self, f: &fn(&(&'self K, &'self V)) -> bool) { each_reverse(&self.root, f); } } @@ -140,8 +140,8 @@ impl Map for TreeMap { } /// Return the value corresponding to the key in the map - pure fn find(&self, key: &K) -> Option<&self/V> { - let mut current: &self/Option<~TreeNode> = &self.root; + pure fn find(&self, key: &K) -> Option<&'self V> { + let mut current: &'self Option<~TreeNode> = &self.root; loop { match *current { Some(ref r) => { @@ -197,15 +197,15 @@ pub impl TreeMap { /// Lazy forward iterator over a map pub struct TreeMapIterator { - priv stack: ~[&self/~TreeNode], - priv node: &self/Option<~TreeNode> + priv stack: ~[&'self ~TreeNode], + priv node: &'self Option<~TreeNode> } /// 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`. pub fn map_next(iter: &mut TreeMapIterator/&r) - -> Option<(&r/K, &r/V)> { + -> Option<(&'r K, &'r V)> { while !iter.stack.is_empty() || iter.node.is_some() { match *iter.node { Some(ref x) => { @@ -224,7 +224,7 @@ pub fn map_next(iter: &mut TreeMapIterator/&r) /// Advance the iterator through the map pub fn map_advance(iter: &mut TreeMapIterator/&r, - f: &fn((&r/K, &r/V)) -> bool) { + f: &fn((&'r K, &'r V)) -> bool) { loop { match map_next(iter) { Some(x) => { @@ -519,14 +519,14 @@ pub struct TreeSetIterator { /// Advance the iterator to the next node (in order). If this iterator is /// finished, does nothing. #[inline(always)] -pub fn set_next(iter: &mut TreeSetIterator/&r) -> Option<&r/T> { +pub fn set_next(iter: &mut TreeSetIterator/&r) -> Option<&'r T> { do map_next(&mut iter.iter).map |&(value, _)| { value } } /// Advance the iterator through the set #[inline(always)] pub fn set_advance(iter: &mut TreeSetIterator/&r, - f: &fn(&r/T) -> bool) { + f: &fn(&'r T) -> bool) { do map_advance(&mut iter.iter) |(k, _)| { f(k) } } @@ -547,16 +547,16 @@ pub impl TreeNode { } } -pure fn each(node: &r/Option<~TreeNode>, - f: &fn(&(&r/K, &r/V)) -> bool) { +pure fn each(node: &'r Option<~TreeNode>, + f: &fn(&(&'r K, &'r V)) -> bool) { for node.each |x| { each(&x.left, f); if f(&(&x.key, &x.value)) { each(&x.right, f) } } } -pure fn each_reverse(node: &r/Option<~TreeNode>, - f: &fn(&(&r/K, &r/V)) -> bool) { +pure fn each_reverse(node: &'r Option<~TreeNode>, + f: &fn(&(&'r K, &'r V)) -> bool) { for node.each |x| { each_reverse(&x.right, f); if f(&(&x.key, &x.value)) { each_reverse(&x.left, f) } diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index f0822ea4d256..652bc541a1f2 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -421,7 +421,7 @@ pub fn get_exprs_from_tts(cx: @ext_ctxt, tts: &[ast::token_tree]) // use a top-level managed pointer by some difficulties // with pushing and popping functionally, and the ownership // issues. As a result, the values returned by the table -// also need to be managed; the &self/... type that Maps +// also need to be managed; the &'self ... type that Maps // return won't work for things that need to get outside // of that managed pointer. The easiest way to do this // is just to insist that the values in the tables are @@ -454,7 +454,7 @@ impl MapChain{ // ugh: can't get this to compile with mut because of the // lack of flow sensitivity. - fn get_map(&self) -> &self/LinearMap { + fn get_map(&self) -> &'self LinearMap { match *self { BaseMapChain (~ref map) => map, ConsMapChain (~ref map,_) => map diff --git a/src/libsyntax/ext/deriving.rs b/src/libsyntax/ext/deriving.rs index 26b5b4566b7f..54b123bff2ff 100644 --- a/src/libsyntax/ext/deriving.rs +++ b/src/libsyntax/ext/deriving.rs @@ -45,12 +45,12 @@ pub impl Junction { } } -type ExpandDerivingStructDefFn = &self/fn(@ext_ctxt, +type ExpandDerivingStructDefFn = &'self fn(@ext_ctxt, span, x: &struct_def, ident, y: &Generics) -> @item; -type ExpandDerivingEnumDefFn = &self/fn(@ext_ctxt, +type ExpandDerivingEnumDefFn = &'self fn(@ext_ctxt, span, x: &enum_def, ident, diff --git a/src/libsyntax/ext/quote.rs b/src/libsyntax/ext/quote.rs index 6deffbe0ae14..2cf52c47959b 100644 --- a/src/libsyntax/ext/quote.rs +++ b/src/libsyntax/ext/quote.rs @@ -392,6 +392,12 @@ fn mk_token(cx: @ext_ctxt, sp: span, tok: token::Token) -> @ast::expr { build::mk_lit(cx, sp, ast::lit_bool(b))]); } + LIFETIME(ident) => { + return build::mk_call(cx, sp, + ids_ext(cx, ~[~"LIFETIME"]), + ~[mk_ident(cx, sp, ident)]); + } + DOC_COMMENT(ident) => { return build::mk_call(cx, sp, ids_ext(cx, ~[~"DOC_COMMENT"]), diff --git a/src/libsyntax/opt_vec.rs b/src/libsyntax/opt_vec.rs index ba0c7a71b7c1..dbabca55a11f 100644 --- a/src/libsyntax/opt_vec.rs +++ b/src/libsyntax/opt_vec.rs @@ -61,7 +61,7 @@ impl OptVec { } } - pure fn get(&self, i: uint) -> &self/T { + pure fn get(&self, i: uint) -> &'self T { match *self { Empty => fail!(fmt!("Invalid index %u", i)), Vec(ref v) => &v[i] diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index a30b910b347e..7b7d246c324d 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -708,7 +708,7 @@ pub impl Parser { } fn parse_borrowed_pointee(&self) -> ty_ { - // look for `&'lt` or `&foo/` and interpret `foo` as the region name: + // look for `&'lt` or `&'foo ` and interpret `foo` as the region name: let opt_lifetime = self.parse_opt_lifetime(); if self.token_is_closure_keyword(© *self.token) { diff --git a/src/test/auxiliary/cci_const.rs b/src/test/auxiliary/cci_const.rs index b2dd0cc8e586..945004ede6de 100644 --- a/src/test/auxiliary/cci_const.rs +++ b/src/test/auxiliary/cci_const.rs @@ -11,6 +11,6 @@ pub extern fn bar() { } -pub const foopy: &static/str = "hi there"; +pub const foopy: &'static str = "hi there"; pub const uint_val: uint = 12; pub const uint_expr: uint = (1 << uint_val) - 1; diff --git a/src/test/compile-fail/borrowck-addr-of-upvar.rs b/src/test/compile-fail/borrowck-addr-of-upvar.rs index 4e8af4f04210..640bc887731f 100644 --- a/src/test/compile-fail/borrowck-addr-of-upvar.rs +++ b/src/test/compile-fail/borrowck-addr-of-upvar.rs @@ -8,8 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn foo(x: @int) -> @fn() -> &static/int { - let result: @fn() -> &static/int = || &*x; //~ ERROR illegal borrow +fn foo(x: @int) -> @fn() -> &'static int { + let result: @fn() -> &'static int = || &*x; //~ ERROR illegal borrow result } diff --git a/src/test/compile-fail/const-cast-different-types.rs b/src/test/compile-fail/const-cast-different-types.rs index 08fa6915106f..45e39b47d237 100644 --- a/src/test/compile-fail/const-cast-different-types.rs +++ b/src/test/compile-fail/const-cast-different-types.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -const a: &static/str = &"foo"; +const a: &'static str = &"foo"; const b: *u8 = a as *u8; //~ ERROR non-scalar cast const c: *u8 = &a as *u8; //~ ERROR mismatched types diff --git a/src/test/compile-fail/issue-2149.rs b/src/test/compile-fail/issue-2149.rs index def1fa30f3b0..da3728ff3ae1 100644 --- a/src/test/compile-fail/issue-2149.rs +++ b/src/test/compile-fail/issue-2149.rs @@ -22,6 +22,6 @@ impl vec_monad for ~[A] { } fn main() { ["hi"].bind(|x| [x] ); - //~^ ERROR type `[&static/str * 1]` does not implement any method in scope named `bind` + //~^ ERROR type `[&'static str * 1]` does not implement any method in scope named `bind` //~^^ ERROR Unconstrained region variable } diff --git a/src/test/compile-fail/issue-2478.rs b/src/test/compile-fail/issue-2478.rs index 5bde7c67935a..2b52cab7fe79 100644 --- a/src/test/compile-fail/issue-2478.rs +++ b/src/test/compile-fail/issue-2478.rs @@ -9,7 +9,7 @@ // except according to those terms. // xfail-test -fn foo() -> &a/int { +fn foo() -> &'a int { return &x; } const x: int = 5; diff --git a/src/test/compile-fail/issue-3243.rs b/src/test/compile-fail/issue-3243.rs index 443fae619ba7..f235c4bc97c4 100644 --- a/src/test/compile-fail/issue-3243.rs +++ b/src/test/compile-fail/issue-3243.rs @@ -10,7 +10,7 @@ // xfail-test fn function() -> &mut [int] { - let mut x: &static/mut [int] = &[1,2,3]; + let mut x: &'static mut [int] = &[1,2,3]; x[0] = 12345; x //~ ERROR bad } diff --git a/src/test/compile-fail/issue-3311.rs b/src/test/compile-fail/issue-3311.rs index 8872357a8d44..1b83cefbf339 100644 --- a/src/test/compile-fail/issue-3311.rs +++ b/src/test/compile-fail/issue-3311.rs @@ -15,7 +15,7 @@ struct Foo { } pub impl Foo<'self> { - fn get_s(&self) -> &self/str { + fn get_s(&self) -> &'self str { self.s } } diff --git a/src/test/compile-fail/issue-3563.rs b/src/test/compile-fail/issue-3563.rs index 9f7a0745c3b1..0388f0fd2908 100644 --- a/src/test/compile-fail/issue-3563.rs +++ b/src/test/compile-fail/issue-3563.rs @@ -10,7 +10,7 @@ trait A { fn a(&self) { - || self.b() //~ ERROR type `&self/self` does not implement any method in scope named `b` + || self.b() //~ ERROR type `&'self self` does not implement any method in scope named `b` } } fn main() {} diff --git a/src/test/compile-fail/issue-3888.rs b/src/test/compile-fail/issue-3888.rs index 779265e5a292..482d1e9fe8a4 100644 --- a/src/test/compile-fail/issue-3888.rs +++ b/src/test/compile-fail/issue-3888.rs @@ -10,7 +10,7 @@ // n.b. This should be a run-pass test, but for now I'm testing // that we don't see an "unknown scope" error. -fn vec_peek(v: &r/[T]) -> Option< (&r/T, &r/[T]) > { +fn vec_peek(v: &'r [T]) -> Option< (&'r T, &'r [T]) > { if v.len() == 0 { None } else { diff --git a/src/test/compile-fail/issue-4335.rs b/src/test/compile-fail/issue-4335.rs index 7242d993f33f..ae147e628e43 100644 --- a/src/test/compile-fail/issue-4335.rs +++ b/src/test/compile-fail/issue-4335.rs @@ -11,7 +11,7 @@ // xfail-test fn id(t: T) -> T { t } -fn f(v: &r/T) -> &r/fn()->T { id::<&r/fn()->T>(|| *v) } //~ ERROR ??? +fn f(v: &'r T) -> &'r fn()->T { id::<&'r fn()->T>(|| *v) } //~ ERROR ??? fn main() { let v = &5; diff --git a/src/test/compile-fail/issue-4523.rs b/src/test/compile-fail/issue-4523.rs index 6045ac6cba35..e8e270293711 100644 --- a/src/test/compile-fail/issue-4523.rs +++ b/src/test/compile-fail/issue-4523.rs @@ -10,7 +10,7 @@ fn foopy() {} -const f: &'static fn() = foopy; //~ ERROR mismatched types: expected `&static/fn()` +const f: &'static fn() = foopy; //~ ERROR mismatched types: expected `&'static fn()` fn main () { f(); diff --git a/src/test/compile-fail/kindck-owned-trait-contains.rs b/src/test/compile-fail/kindck-owned-trait-contains.rs index 305f4bd6befa..dadc66b5029c 100644 --- a/src/test/compile-fail/kindck-owned-trait-contains.rs +++ b/src/test/compile-fail/kindck-owned-trait-contains.rs @@ -21,10 +21,10 @@ fn repeater(v: @A) -> @repeat { fn main() { // Error results because the type of is inferred to be - // @repeat<&blk/int> where blk is the lifetime of the block below. + // @repeat<&'blk int> where blk is the lifetime of the block below. let y = { //~ ERROR reference is not valid - let x: &blk/int = &3; + let x: &'blk int = &3; repeater(@x) }; fail_unless!(3 == *(y.get())); //~ ERROR reference is not valid diff --git a/src/test/compile-fail/kindck-owned-trait-scoped.rs b/src/test/compile-fail/kindck-owned-trait-scoped.rs index 0ccc5ac8bf07..63690f030934 100644 --- a/src/test/compile-fail/kindck-owned-trait-scoped.rs +++ b/src/test/compile-fail/kindck-owned-trait-scoped.rs @@ -12,7 +12,7 @@ // except according to those terms. // A dummy trait/impl that work close over any type. The trait will -// be parameterized by a region due to the &self/int constraint. +// be parameterized by a region due to the &'self int constraint. trait foo { fn foo(&self, i: &'self int) -> int; diff --git a/src/test/compile-fail/regions-addr-of-self.rs b/src/test/compile-fail/regions-addr-of-self.rs index 96657edb5b1a..732d946bf9ee 100644 --- a/src/test/compile-fail/regions-addr-of-self.rs +++ b/src/test/compile-fail/regions-addr-of-self.rs @@ -14,12 +14,12 @@ struct dog { pub impl dog { fn chase_cat(&mut self) { - let p: &static/mut uint = &mut self.cats_chased; //~ ERROR cannot infer an appropriate lifetime due to conflicting requirements + let p: &'static mut uint = &mut self.cats_chased; //~ ERROR cannot infer an appropriate lifetime due to conflicting requirements *p += 1u; } fn chase_cat_2(&mut self) { - let p: &blk/mut uint = &mut self.cats_chased; + let p: &'blk mut uint = &mut self.cats_chased; *p += 1u; } } diff --git a/src/test/compile-fail/regions-blk.rs b/src/test/compile-fail/regions-blk.rs index 9b1895ba4bd5..893e4c411780 100644 --- a/src/test/compile-fail/regions-blk.rs +++ b/src/test/compile-fail/regions-blk.rs @@ -10,13 +10,13 @@ fn foo(cond: bool) { let x = 5; - let mut y: &blk/int = &x; + let mut y: &'blk int = &x; - let mut z: &blk/int; + let mut z: &'blk int; if cond { z = &x; //~ ERROR cannot infer an appropriate lifetime due to conflicting requirements } else { - let w: &blk/int = &x; + let w: &'blk int = &x; z = w; } } diff --git a/src/test/compile-fail/regions-fn-bound.rs b/src/test/compile-fail/regions-fn-bound.rs index 6deef8cee9e4..df078bbb54b6 100644 --- a/src/test/compile-fail/regions-fn-bound.rs +++ b/src/test/compile-fail/regions-fn-bound.rs @@ -11,7 +11,7 @@ fn of() -> @fn(T) { fail!(); } fn subtype(x: @fn(T)) { fail!(); } -fn test_fn(_x: &x/T, _y: &y/T, _z: &z/T) { +fn test_fn(_x: &'x T, _y: &'y T, _z: &'z T) { // Here, x, y, and z are free. Other letters // are bound. Note that the arrangement // subtype::(of::()) will typecheck diff --git a/src/test/compile-fail/regions-fn-subtyping.rs b/src/test/compile-fail/regions-fn-subtyping.rs index 50674ac81fec..a90b3d0f4297 100644 --- a/src/test/compile-fail/regions-fn-subtyping.rs +++ b/src/test/compile-fail/regions-fn-subtyping.rs @@ -11,47 +11,47 @@ fn of() -> @fn(T) { fail!(); } fn subtype(x: @fn(T)) { fail!(); } -fn test_fn(_x: &x/T, _y: &y/T, _z: &z/T) { +fn test_fn(_x: &'x T, _y: &'y T, _z: &'z T) { // Here, x, y, and z are free. Other letters // are bound. Note that the arrangement // subtype::(of::()) will typecheck // iff T1 <: T2. - subtype::<&fn(&a/T)>( - of::<&fn(&a/T)>()); + subtype::<&fn(&'a T)>( + of::<&fn(&'a T)>()); - subtype::<&fn(&a/T)>( - of::<&fn(&b/T)>()); + subtype::<&fn(&'a T)>( + of::<&fn(&'b T)>()); - subtype::<&fn(&b/T)>( - of::<&fn(&x/T)>()); + subtype::<&fn(&'b T)>( + of::<&fn(&'x T)>()); - subtype::<&fn(&x/T)>( - of::<&fn(&b/T)>()); //~ ERROR mismatched types + subtype::<&fn(&'x T)>( + of::<&fn(&'b T)>()); //~ ERROR mismatched types - subtype::<&fn(&a/T, &b/T)>( - of::<&fn(&a/T, &a/T)>()); + subtype::<&fn(&'a T, &'b T)>( + of::<&fn(&'a T, &'a T)>()); - subtype::<&fn(&a/T, &a/T)>( - of::<&fn(&a/T, &b/T)>()); //~ ERROR mismatched types + subtype::<&fn(&'a T, &'a T)>( + of::<&fn(&'a T, &'b T)>()); //~ ERROR mismatched types - subtype::<&fn(&a/T, &b/T)>( - of::<&fn(&x/T, &y/T)>()); + subtype::<&fn(&'a T, &'b T)>( + of::<&fn(&'x T, &'y T)>()); - subtype::<&fn(&x/T, &y/T)>( - of::<&fn(&a/T, &b/T)>()); //~ ERROR mismatched types + subtype::<&fn(&'x T, &'y T)>( + of::<&fn(&'a T, &'b T)>()); //~ ERROR mismatched types - subtype::<&fn(&x/T) -> @fn(&a/T)>( - of::<&fn(&x/T) -> @fn(&a/T)>()); + subtype::<&fn(&'x T) -> @fn(&'a T)>( + of::<&fn(&'x T) -> @fn(&'a T)>()); - subtype::<&fn(&a/T) -> @fn(&a/T)>( - of::<&fn(&a/T) -> @fn(&b/T)>()); //~ ERROR mismatched types + subtype::<&fn(&'a T) -> @fn(&'a T)>( + of::<&fn(&'a T) -> @fn(&'b T)>()); //~ ERROR mismatched types - subtype::<&fn(&a/T) -> @fn(&a/T)>( - of::<&fn(&x/T) -> @fn(&b/T)>()); //~ ERROR mismatched types + subtype::<&fn(&'a T) -> @fn(&'a T)>( + of::<&fn(&'x T) -> @fn(&'b T)>()); //~ ERROR mismatched types - subtype::<&fn(&a/T) -> @fn(&b/T)>( - of::<&fn(&a/T) -> @fn(&a/T)>()); + subtype::<&fn(&'a T) -> @fn(&'b T)>( + of::<&fn(&'a T) -> @fn(&'a T)>()); } fn main() {} diff --git a/src/test/compile-fail/regions-fns.rs b/src/test/compile-fail/regions-fns.rs index a4f1825fcaee..50eba71ac564 100644 --- a/src/test/compile-fail/regions-fns.rs +++ b/src/test/compile-fail/regions-fns.rs @@ -11,8 +11,8 @@ // Before fn subtyping was properly implemented, // we reported errors in this case: -fn not_ok(a: &uint, b: &b/uint) { - let mut g: @fn(x: &uint) = |x: &b/uint| {}; +fn not_ok(a: &uint, b: &'b uint) { + let mut g: @fn(x: &uint) = |x: &'b uint| {}; //~^ ERROR mismatched types g(a); } diff --git a/src/test/compile-fail/regions-freevar.rs b/src/test/compile-fail/regions-freevar.rs index 6545892d0bb7..f89c5eaa9c1f 100644 --- a/src/test/compile-fail/regions-freevar.rs +++ b/src/test/compile-fail/regions-freevar.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn wants_static_fn(_x: &static/fn()) {} +fn wants_static_fn(_x: &'static fn()) {} fn main() { let i = 3; diff --git a/src/test/compile-fail/regions-infer-borrow-scope-too-big.rs b/src/test/compile-fail/regions-infer-borrow-scope-too-big.rs index 82d75bcf5db7..6402982a9e15 100644 --- a/src/test/compile-fail/regions-infer-borrow-scope-too-big.rs +++ b/src/test/compile-fail/regions-infer-borrow-scope-too-big.rs @@ -13,7 +13,7 @@ struct point { y: int, } -fn x_coord(p: &r/point) -> &r/int { +fn x_coord(p: &'r point) -> &'r int { return &p.x; } diff --git a/src/test/compile-fail/regions-infer-borrow-scope-within-loop.rs b/src/test/compile-fail/regions-infer-borrow-scope-within-loop.rs index ef8f6748d36a..c873e2519bd0 100644 --- a/src/test/compile-fail/regions-infer-borrow-scope-within-loop.rs +++ b/src/test/compile-fail/regions-infer-borrow-scope-within-loop.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn borrow(x: &r/T) -> &r/T {x} +fn borrow(x: &'r T) -> &'r T {x} fn foo(cond: &fn() -> bool, box: &fn() -> @int) { let mut y: ∫ diff --git a/src/test/compile-fail/regions-infer-call-3.rs b/src/test/compile-fail/regions-infer-call-3.rs index 49d3f6aee65c..a3bc55228d85 100644 --- a/src/test/compile-fail/regions-infer-call-3.rs +++ b/src/test/compile-fail/regions-infer-call-3.rs @@ -8,13 +8,13 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn select(x: &r/int, y: &r/int) -> &r/int { x } +fn select(x: &'r int, y: &'r int) -> &'r int { x } fn with(f: &fn(x: &int) -> T) -> T { f(&20) } -fn manip(x: &a/int) -> int { +fn manip(x: &'a int) -> int { let z = do with |y| { select(x, y) }; //~^ ERROR cannot infer an appropriate lifetime *z diff --git a/src/test/compile-fail/regions-infer-contravariance-due-to-ret.rs b/src/test/compile-fail/regions-infer-contravariance-due-to-ret.rs index 936aa79d0328..d93713f3f233 100644 --- a/src/test/compile-fail/regions-infer-contravariance-due-to-ret.rs +++ b/src/test/compile-fail/regions-infer-contravariance-due-to-ret.rs @@ -14,7 +14,7 @@ // the normal case. struct contravariant { - f: @fn() -> &self/int + f: @fn() -> &'self int } fn to_same_lifetime(bi: contravariant/&r) { diff --git a/src/test/compile-fail/regions-infer-covariance-due-to-arg.rs b/src/test/compile-fail/regions-infer-covariance-due-to-arg.rs index 27e1452d9572..c527cdf233d6 100644 --- a/src/test/compile-fail/regions-infer-covariance-due-to-arg.rs +++ b/src/test/compile-fail/regions-infer-covariance-due-to-arg.rs @@ -13,7 +13,7 @@ // You can upcast to a *larger region* but not a smaller one. struct covariant { - f: @fn(x: &self/int) -> int + f: @fn(x: &'self int) -> int } fn to_same_lifetime(bi: covariant/&r) { diff --git a/src/test/compile-fail/regions-infer-invariance-due-to-mutability-3.rs b/src/test/compile-fail/regions-infer-invariance-due-to-mutability-3.rs index c84afc6ca64f..15b39d772f08 100644 --- a/src/test/compile-fail/regions-infer-invariance-due-to-mutability-3.rs +++ b/src/test/compile-fail/regions-infer-invariance-due-to-mutability-3.rs @@ -9,7 +9,7 @@ // except according to those terms. struct invariant { - f: @fn(x: @mut &self/int) + f: @fn(x: @mut &'self int) } fn to_same_lifetime(bi: invariant/&r) { diff --git a/src/test/compile-fail/regions-infer-invariance-due-to-mutability-4.rs b/src/test/compile-fail/regions-infer-invariance-due-to-mutability-4.rs index b958aa70aa40..ff2b4246f01b 100644 --- a/src/test/compile-fail/regions-infer-invariance-due-to-mutability-4.rs +++ b/src/test/compile-fail/regions-infer-invariance-due-to-mutability-4.rs @@ -9,7 +9,7 @@ // except according to those terms. struct invariant { - f: @fn() -> @mut &self/int + f: @fn() -> @mut &'self int } fn to_same_lifetime(bi: invariant/&r) { diff --git a/src/test/compile-fail/regions-infer-paramd-indirect.rs b/src/test/compile-fail/regions-infer-paramd-indirect.rs index 99a3cc0ab6f1..e4ad93bde17e 100644 --- a/src/test/compile-fail/regions-infer-paramd-indirect.rs +++ b/src/test/compile-fail/regions-infer-paramd-indirect.rs @@ -29,7 +29,7 @@ impl<'self> set_f for c<'self> { } fn set_f_bad(&self, b: @b) { - self.f = b; //~ ERROR mismatched types: expected `@@&self/int` but found `@@&int` + self.f = b; //~ ERROR mismatched types: expected `@@&'self int` but found `@@&int` } } diff --git a/src/test/compile-fail/regions-nested-fns-2.rs b/src/test/compile-fail/regions-nested-fns-2.rs index b4cbbacea3f0..26d6bbd53031 100644 --- a/src/test/compile-fail/regions-nested-fns-2.rs +++ b/src/test/compile-fail/regions-nested-fns-2.rs @@ -12,7 +12,7 @@ fn ignore(_t: T) {} fn nested() { let y = 3; - ignore(|z: &z/int| -> &z/int { + ignore(|z: &'z int| -> &'z int { if false { &y } else { z } //~ ERROR illegal borrow }); } diff --git a/src/test/compile-fail/regions-nested-fns.rs b/src/test/compile-fail/regions-nested-fns.rs index 714b863ca1d3..6ef37efeb418 100644 --- a/src/test/compile-fail/regions-nested-fns.rs +++ b/src/test/compile-fail/regions-nested-fns.rs @@ -10,17 +10,17 @@ fn ignore(t: T) {} -fn nested(x: &x/int) { +fn nested(x: &'x int) { let y = 3; let mut ay = &y; //~ ERROR cannot infer an appropriate lifetime - ignore(|z: &z/int| { + ignore(|z: &'z int| { ay = x; ay = &y; //~ ERROR cannot infer an appropriate lifetime ay = z; }); - ignore(|z: &z/int| -> &z/int { + ignore(|z: &'z int| -> &'z int { if false { return x; } //~ ERROR mismatched types if false { return ay; } return z; diff --git a/src/test/compile-fail/regions-out-of-scope-slice.rs b/src/test/compile-fail/regions-out-of-scope-slice.rs index 102ff8b3998b..b3db225700aa 100644 --- a/src/test/compile-fail/regions-out-of-scope-slice.rs +++ b/src/test/compile-fail/regions-out-of-scope-slice.rs @@ -15,7 +15,7 @@ fn foo(cond: bool) { let mut x; //~ ERROR foo if cond { - x = &blk/[1,2,3]; + x = &'blk [1,2,3]; } } diff --git a/src/test/compile-fail/regions-ret-borrowed-1.rs b/src/test/compile-fail/regions-ret-borrowed-1.rs index ab6a37b58de6..7218dcf379b9 100644 --- a/src/test/compile-fail/regions-ret-borrowed-1.rs +++ b/src/test/compile-fail/regions-ret-borrowed-1.rs @@ -12,11 +12,11 @@ // some point regions-ret-borrowed reported an error but this file did // not, due to special hardcoding around the anonymous region. -fn with(f: &fn(x: &a/int) -> R) -> R { +fn with(f: &fn(x: &'a int) -> R) -> R { f(&3) } -fn return_it() -> &a/int { +fn return_it() -> &'a int { with(|o| o) //~ ERROR mismatched types //~^ ERROR reference is not valid outside of its lifetime } diff --git a/src/test/compile-fail/regions-ret.rs b/src/test/compile-fail/regions-ret.rs index d43065e12fb5..cecd847843ca 100644 --- a/src/test/compile-fail/regions-ret.rs +++ b/src/test/compile-fail/regions-ret.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn f(_x : &a/int) -> &a/int { +fn f(_x : &'a int) -> &'a int { return &3; //~ ERROR illegal borrow } diff --git a/src/test/compile-fail/regions-scoping.rs b/src/test/compile-fail/regions-scoping.rs index e675d4d455f2..f0c81d16b03c 100644 --- a/src/test/compile-fail/regions-scoping.rs +++ b/src/test/compile-fail/regions-scoping.rs @@ -17,7 +17,7 @@ fn nested<'x>(x: &'x int) { // (1) z: &fn<'z>(x: &'x int, // Refers to `x` at (1) y: &'y int, // Refers to `y` at (2) z: &'z int) -> &'z int| // A fresh region `z` (3) - -> &x/int { + -> &'x int { if false { return z(x, y, x); } if false { return z(x, y, y); } @@ -40,9 +40,9 @@ fn nested<'x>(x: &'x int) { // (1) // anymore but rather borrowck. Therefore, it doesn't end up // getting printed out since compilation fails after typeck. // - // let f: &x/int = foo(&z, &z, |_x, _y, z| z ); // ERROR mismatched types: expected `&x/int` but found + // let f: &'x int = foo(&z, &z, |_x, _y, z| z ); // ERROR mismatched types: expected `&'x int` but found - foo(x, &z, |x, _y, _z| x); //~ ERROR mismatched types: expected `&z/int` but found `&x/int` + foo(x, &z, |x, _y, _z| x); //~ ERROR mismatched types: expected `&'z int` but found `&'x int` // Note: originally I had foo(x, &z, ...) here, but in that // case the region inferencer deduced that this was valid if diff --git a/src/test/compile-fail/regions-trait-2.rs b/src/test/compile-fail/regions-trait-2.rs index bbaed2ab6009..5811496cab45 100644 --- a/src/test/compile-fail/regions-trait-2.rs +++ b/src/test/compile-fail/regions-trait-2.rs @@ -17,7 +17,7 @@ trait get_ctxt { struct has_ctxt<'self> { c: &'self ctxt } impl<'self> get_ctxt for has_ctxt<'self> { - fn get_ctxt(&self) -> &self/ctxt { self.c } + fn get_ctxt(&self) -> &'self ctxt { self.c } } fn make_gc() -> @get_ctxt { diff --git a/src/test/compile-fail/regions-trait-3.rs b/src/test/compile-fail/regions-trait-3.rs index 10b7b1058d8b..e947dbf93083 100644 --- a/src/test/compile-fail/regions-trait-3.rs +++ b/src/test/compile-fail/regions-trait-3.rs @@ -12,7 +12,7 @@ // except according to those terms. trait get_ctxt { - fn get_ctxt(self) -> &self/uint; + fn get_ctxt(self) -> &'self uint; } fn make_gc1(gc: @get_ctxt/&a) -> @get_ctxt/&b { diff --git a/src/test/run-pass/assignability-trait.rs b/src/test/run-pass/assignability-trait.rs index 16cd51c8f275..78bdee1430c6 100644 --- a/src/test/run-pass/assignability-trait.rs +++ b/src/test/run-pass/assignability-trait.rs @@ -16,7 +16,7 @@ trait iterable { fn iterate(&self, blk: &fn(x: &A) -> bool); } -impl iterable for &self/[A] { +impl iterable for &'self [A] { fn iterate(&self, f: &fn(x: &A) -> bool) { for vec::each(*self) |e| { if !f(e) { break; } diff --git a/src/test/run-pass/bare-static-string.rs b/src/test/run-pass/bare-static-string.rs index ceae1392d3b7..d8015f0b92c7 100644 --- a/src/test/run-pass/bare-static-string.rs +++ b/src/test/run-pass/bare-static-string.rs @@ -9,7 +9,7 @@ // except according to those terms. pub fn main() { - let x: &static/str = "foo"; + let x: &'static str = "foo"; io::println(x); } diff --git a/src/test/run-pass/borrowck-root-while-cond.rs b/src/test/run-pass/borrowck-root-while-cond.rs index 285796db20e6..a8823c477aa3 100644 --- a/src/test/run-pass/borrowck-root-while-cond.rs +++ b/src/test/run-pass/borrowck-root-while-cond.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn borrow(x: &r/T) -> &r/T {x} +fn borrow(x: &'r T) -> &'r T {x} struct Rec { f: @int } diff --git a/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-3.rs b/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-3.rs index d8612155f6cd..0699df703c6a 100644 --- a/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-3.rs +++ b/src/test/run-pass/borrowck-wg-borrow-mut-to-imm-3.rs @@ -1,5 +1,5 @@ struct Wizard { - spells: ~[&static/str] + spells: ~[&'static str] } pub impl Wizard { diff --git a/src/test/run-pass/borrowed-ptr-pattern-3.rs b/src/test/run-pass/borrowed-ptr-pattern-3.rs index 9043018b816c..1e9175ac1963 100644 --- a/src/test/run-pass/borrowed-ptr-pattern-3.rs +++ b/src/test/run-pass/borrowed-ptr-pattern-3.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn foo(s: &r/uint) -> bool { +fn foo(s: &'r uint) -> bool { match s { &3 => true, _ => false diff --git a/src/test/run-pass/borrowed-ptr-pattern-option.rs b/src/test/run-pass/borrowed-ptr-pattern-option.rs index d0d276a8c8c6..42c0795b3dd2 100644 --- a/src/test/run-pass/borrowed-ptr-pattern-option.rs +++ b/src/test/run-pass/borrowed-ptr-pattern-option.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn select(x: &r/Option, y: &r/Option) -> &r/Option { +fn select(x: &'r Option, y: &'r Option) -> &'r Option { match (x, y) { (&None, &None) => x, (&Some(_), _) => x, diff --git a/src/test/run-pass/const-cast.rs b/src/test/run-pass/const-cast.rs index dca68b4c2a38..64c6f368f2bf 100644 --- a/src/test/run-pass/const-cast.rs +++ b/src/test/run-pass/const-cast.rs @@ -12,7 +12,7 @@ extern fn foo() {} const x: *u8 = foo; const y: *libc::c_void = x as *libc::c_void; -const a: &static/int = &10; +const a: &'static int = &10; const b: *int = a as *int; fn main() { diff --git a/src/test/run-pass/const-cross-crate-const.rs b/src/test/run-pass/const-cross-crate-const.rs index a7c30593ecbb..e01519ae8a54 100644 --- a/src/test/run-pass/const-cross-crate-const.rs +++ b/src/test/run-pass/const-cross-crate-const.rs @@ -12,7 +12,7 @@ // aux-build:cci_const.rs extern mod cci_const; -const foo: &static/str = cci_const::foopy; +const foo: &'static str = cci_const::foopy; const a: uint = cci_const::uint_val; const b: uint = cci_const::uint_expr + 5; diff --git a/src/test/run-pass/const-enum-ptr.rs b/src/test/run-pass/const-enum-ptr.rs index 6004f9b9001c..594350d29885 100644 --- a/src/test/run-pass/const-enum-ptr.rs +++ b/src/test/run-pass/const-enum-ptr.rs @@ -9,7 +9,7 @@ // except according to those terms. enum E { V0, V1(int) } -const C: &static/E = &V0; +const C: &'static E = &V0; pub fn main() { match *C { diff --git a/src/test/run-pass/const-enum-vec-ptr.rs b/src/test/run-pass/const-enum-vec-ptr.rs index c4017b549e64..b398bfbf0d5c 100644 --- a/src/test/run-pass/const-enum-vec-ptr.rs +++ b/src/test/run-pass/const-enum-vec-ptr.rs @@ -9,7 +9,7 @@ // except according to those terms. enum E { V1(int), V0 } -const C: &static/[E] = &[V0, V1(0xDEADBEE), V0]; +const C: &'static [E] = &[V0, V1(0xDEADBEE), V0]; pub fn main() { match C[1] { diff --git a/src/test/run-pass/const-str-ptr.rs b/src/test/run-pass/const-str-ptr.rs index d0773a739237..a1637f6ebb83 100644 --- a/src/test/run-pass/const-str-ptr.rs +++ b/src/test/run-pass/const-str-ptr.rs @@ -9,7 +9,7 @@ // except according to those terms. const a: [u8 * 3] = ['h' as u8, 'i' as u8, 0 as u8]; -const c: &static/[u8 * 3] = &a; +const c: &'static [u8 * 3] = &a; const b: *u8 = c as *u8; fn main() { diff --git a/src/test/run-pass/explicit-self.rs b/src/test/run-pass/explicit-self.rs index 44edbd44bd37..1a21fa0a5d75 100644 --- a/src/test/run-pass/explicit-self.rs +++ b/src/test/run-pass/explicit-self.rs @@ -29,13 +29,13 @@ fn compute_area(shape: &shape) -> float { pub impl shape { // self is in the implicit self region fn select(&self, threshold: float, - a: &r/T, b: &r/T) -> &r/T { + a: &'r T, b: &'r T) -> &'r T { if compute_area(self) > threshold {a} else {b} } } fn select_based_on_unit_circle( - threshold: float, a: &r/T, b: &r/T) -> &r/T { + threshold: float, a: &'r T, b: &'r T) -> &'r T { let shape = &circle(Point{x: 0.0, y: 0.0}, 1.0); shape.select(threshold, a, b) @@ -58,7 +58,7 @@ pub impl thing { fn foo(@self) -> int { *self.x.a } fn bar(~self) -> int { *self.x.a } fn quux(&self) -> int { *self.x.a } - fn baz(&self) -> &self/A { &self.x } + fn baz(&self) -> &'self A { &self.x } fn spam(self) -> int { *self.x.a } } diff --git a/src/test/run-pass/issue-2502.rs b/src/test/run-pass/issue-2502.rs index 9af41e48aa28..cfae757aee82 100644 --- a/src/test/run-pass/issue-2502.rs +++ b/src/test/run-pass/issue-2502.rs @@ -13,12 +13,12 @@ struct font { } pub impl font/&self { - fn buf(&self) -> &self/~[u8] { + fn buf(&self) -> &'self ~[u8] { self.fontbuf } } -fn font(fontbuf: &r/~[u8]) -> font/&r { +fn font(fontbuf: &'r ~[u8]) -> font/&r { font { fontbuf: fontbuf } diff --git a/src/test/run-pass/issue-2748-b.rs b/src/test/run-pass/issue-2748-b.rs index 7e5730a3db18..62016abf74b3 100644 --- a/src/test/run-pass/issue-2748-b.rs +++ b/src/test/run-pass/issue-2748-b.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn thing(x: &r/[int]) -> &r/[int] { x } +fn thing(x: &'r [int]) -> &'r [int] { x } pub fn main() { let x = &[1,2,3]; let y = x; diff --git a/src/test/run-pass/issue-3860.rs b/src/test/run-pass/issue-3860.rs index b113e902963b..18839fa3c7fc 100644 --- a/src/test/run-pass/issue-3860.rs +++ b/src/test/run-pass/issue-3860.rs @@ -11,7 +11,7 @@ struct Foo { x: int } pub impl Foo { - fn stuff(&mut self) -> &self/mut Foo { + fn stuff(&mut self) -> &'self mut Foo { return self; } } diff --git a/src/test/run-pass/issue-3888-2.rs b/src/test/run-pass/issue-3888-2.rs index 06e652cc7cd5..38aeab0888c6 100644 --- a/src/test/run-pass/issue-3888-2.rs +++ b/src/test/run-pass/issue-3888-2.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn vec_peek(v: &r/[T]) -> &r/[T] { +fn vec_peek(v: &'r [T]) -> &'r [T] { // This doesn't work, and should. // v.slice(1, 5) vec::slice(v, 1, 5) diff --git a/src/test/run-pass/issue-4448.rs b/src/test/run-pass/issue-4448.rs index 80cc9a72c33d..0a9c731e9b82 100644 --- a/src/test/run-pass/issue-4448.rs +++ b/src/test/run-pass/issue-4448.rs @@ -9,7 +9,7 @@ // except according to those terms. fn main() { - let (port, chan) = comm::stream::<&static/str>(); + let (port, chan) = comm::stream::<&'static str>(); do task::spawn { fail_unless!(port.recv() == "hello, world"); diff --git a/src/test/run-pass/reflect-visit-data.rs b/src/test/run-pass/reflect-visit-data.rs index 9f093812d8a7..8e363c3d5db5 100644 --- a/src/test/run-pass/reflect-visit-data.rs +++ b/src/test/run-pass/reflect-visit-data.rs @@ -201,9 +201,9 @@ impl TyVisitor for ptr_visit_adaptor { } fn visit_estr_slice(&self) -> bool { - self.align_to::<&static/str>(); + self.align_to::<&'static str>(); if ! self.inner.visit_estr_slice() { return false; } - self.bump_past::<&static/str>(); + self.bump_past::<&'static str>(); true } @@ -238,9 +238,9 @@ impl TyVisitor for ptr_visit_adaptor { } fn visit_rptr(&self, mtbl: uint, inner: *TyDesc) -> bool { - self.align_to::<&static/u8>(); + self.align_to::<&'static u8>(); if ! self.inner.visit_rptr(mtbl, inner) { return false; } - self.bump_past::<&static/u8>(); + self.bump_past::<&'static u8>(); true } @@ -276,9 +276,9 @@ impl TyVisitor for ptr_visit_adaptor { } fn visit_evec_slice(&self, mtbl: uint, inner: *TyDesc) -> bool { - self.align_to::<&static/[u8]>(); + self.align_to::<&'static [u8]>(); if ! self.inner.visit_evec_slice(mtbl, inner) { return false; } - self.bump_past::<&static/[u8]>(); + self.bump_past::<&'static [u8]>(); true } @@ -439,9 +439,9 @@ impl TyVisitor for ptr_visit_adaptor { } fn visit_self(&self) -> bool { - self.align_to::<&static/u8>(); + self.align_to::<&'static u8>(); if ! self.inner.visit_self() { return false; } - self.align_to::<&static/u8>(); + self.align_to::<&'static u8>(); true } diff --git a/src/test/run-pass/region-dependent-addr-of.rs b/src/test/run-pass/region-dependent-addr-of.rs index a3f5c41e1ac0..6cad8c74592e 100644 --- a/src/test/run-pass/region-dependent-addr-of.rs +++ b/src/test/run-pass/region-dependent-addr-of.rs @@ -25,54 +25,54 @@ struct C { f: int } -fn get_v1(a: &v/A) -> &v/int { +fn get_v1(a: &'v A) -> &'v int { // Region inferencer must deduce that &v < L2 < L1 let foo = &a.value; // L1 &foo.v1 // L2 } -fn get_v2(a: &v/A, i: uint) -> &v/int { +fn get_v2(a: &'v A, i: uint) -> &'v int { let foo = &a.value; &foo.v2[i] } -fn get_v3(a: &v/A, i: uint) -> &v/int { +fn get_v3(a: &'v A, i: uint) -> &'v int { let foo = &a.value; &foo.v3[i] } -fn get_v4(a: &v/A, i: uint) -> &v/int { +fn get_v4(a: &'v A, i: uint) -> &'v int { let foo = &a.value; &foo.v4.f } -fn get_v5(a: &v/A, i: uint) -> &v/int { +fn get_v5(a: &'v A, i: uint) -> &'v int { let foo = &a.value; &foo.v5.f } -fn get_v6_a(a: &v/A, i: uint) -> &v/int { +fn get_v6_a(a: &'v A, i: uint) -> &'v int { match a.value.v6 { Some(ref v) => &v.f, None => fail!() } } -fn get_v6_b(a: &v/A, i: uint) -> &v/int { +fn get_v6_b(a: &'v A, i: uint) -> &'v int { match *a { A { value: B { v6: Some(ref v), _ } } => &v.f, _ => fail!() } } -fn get_v6_c(a: &v/A, i: uint) -> &v/int { +fn get_v6_c(a: &'v A, i: uint) -> &'v int { match a { &A { value: B { v6: Some(ref v), _ } } => &v.f, _ => fail!() } } -fn get_v5_ref(a: &v/A, i: uint) -> &v/int { +fn get_v5_ref(a: &'v A, i: uint) -> &'v int { match &a.value { &B {v5: ~C {f: ref v}, _} => v } diff --git a/src/test/run-pass/region-return-interior-of-option.rs b/src/test/run-pass/region-return-interior-of-option.rs index 59dbbde7b777..ced2948545f4 100644 --- a/src/test/run-pass/region-return-interior-of-option.rs +++ b/src/test/run-pass/region-return-interior-of-option.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn get(opt: &r/Option) -> &r/T { +fn get(opt: &'r Option) -> &'r T { match *opt { Some(ref v) => v, None => fail!(~"none") diff --git a/src/test/run-pass/regions-addr-of-ret.rs b/src/test/run-pass/regions-addr-of-ret.rs index 38e0ac021391..622a1eb9954c 100644 --- a/src/test/run-pass/regions-addr-of-ret.rs +++ b/src/test/run-pass/regions-addr-of-ret.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn f(x : &a/int) -> &a/int { +fn f(x : &'a int) -> &'a int { return &*x; } diff --git a/src/test/run-pass/regions-bot.rs b/src/test/run-pass/regions-bot.rs index 3be9d72c690a..96ae71f0ff3e 100644 --- a/src/test/run-pass/regions-bot.rs +++ b/src/test/run-pass/regions-bot.rs @@ -10,7 +10,7 @@ // A very limited test of the "bottom" region -fn produce_static() -> &static/T { fail!(); } +fn produce_static() -> &'static T { fail!(); } fn foo(x: &T) -> &uint { produce_static() } diff --git a/src/test/run-pass/regions-equiv-fns.rs b/src/test/run-pass/regions-equiv-fns.rs index e78a6e69bddb..86b997a6008a 100644 --- a/src/test/run-pass/regions-equiv-fns.rs +++ b/src/test/run-pass/regions-equiv-fns.rs @@ -13,7 +13,7 @@ fn ok(a: &uint) { // Here &r is an alias for &: - let mut g: @fn(x: &uint) = |x: &r/uint| {}; + let mut g: @fn(x: &uint) = |x: &'r uint| {}; g(a); } diff --git a/src/test/run-pass/regions-escape-into-other-fn.rs b/src/test/run-pass/regions-escape-into-other-fn.rs index 6a03b4f910ba..e38bd64da64f 100644 --- a/src/test/run-pass/regions-escape-into-other-fn.rs +++ b/src/test/run-pass/regions-escape-into-other-fn.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn foo(x: &r/uint) -> &r/uint { x } +fn foo(x: &'r uint) -> &'r uint { x } fn bar(x: &uint) -> uint { *x } pub fn main() { diff --git a/src/test/run-pass/regions-fn-subtyping.rs b/src/test/run-pass/regions-fn-subtyping.rs index b28d8534feca..981eace67549 100644 --- a/src/test/run-pass/regions-fn-subtyping.rs +++ b/src/test/run-pass/regions-fn-subtyping.rs @@ -18,14 +18,14 @@ fn ok(f: @fn(x: &uint)) { // f's type should be a subtype of g's type), because f can be // used in any context that expects g's type. But this currently // fails. - let mut g: @fn(y: &r/uint) = |x: &r/uint| { }; + let mut g: @fn(y: &'r uint) = |x: &'r uint| { }; g = f; } // This version is the same as above, except that here, g's type is // inferred. fn ok_inferred(f: @fn(x: &uint)) { - let mut g: @fn(x: &r/uint) = |_| {}; + let mut g: @fn(x: &'r uint) = |_| {}; g = f; } diff --git a/src/test/run-pass/regions-infer-borrow-scope-view.rs b/src/test/run-pass/regions-infer-borrow-scope-view.rs index e5e24a558437..5aff0274dc47 100644 --- a/src/test/run-pass/regions-infer-borrow-scope-view.rs +++ b/src/test/run-pass/regions-infer-borrow-scope-view.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn view(x: &r/[T]) -> &r/[T] {x} +fn view(x: &'r [T]) -> &'r [T] {x} pub fn main() { let v = ~[1, 2, 3]; diff --git a/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs b/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs index 69945a31f6de..fd48402dd10a 100644 --- a/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs +++ b/src/test/run-pass/regions-infer-borrow-scope-within-loop-ok.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -fn borrow(x: &r/T) -> &r/T {x} +fn borrow(x: &'r T) -> &'r T {x} pub fn main() { let x = @3; diff --git a/src/test/run-pass/regions-infer-borrow-scope.rs b/src/test/run-pass/regions-infer-borrow-scope.rs index 9c4cb0d436d0..b5dbf0fde5cd 100644 --- a/src/test/run-pass/regions-infer-borrow-scope.rs +++ b/src/test/run-pass/regions-infer-borrow-scope.rs @@ -10,7 +10,7 @@ struct Point {x: int, y: int} -fn x_coord(p: &r/Point) -> &r/int { +fn x_coord(p: &'r Point) -> &'r int { return &p.x; } diff --git a/src/test/run-pass/regions-infer-call-2.rs b/src/test/run-pass/regions-infer-call-2.rs index dc38a7baacd2..74c4c4260fc1 100644 --- a/src/test/run-pass/regions-infer-call-2.rs +++ b/src/test/run-pass/regions-infer-call-2.rs @@ -14,7 +14,7 @@ fn with(f: &fn(x: &int) -> T) -> T { f(&20) } -fn has_one(x: &a/int) -> int { +fn has_one(x: &'a int) -> int { do with |y| { takes_two(x, y) } } diff --git a/src/test/run-pass/regions-infer-call.rs b/src/test/run-pass/regions-infer-call.rs index 0477bd2d1964..66baaf401089 100644 --- a/src/test/run-pass/regions-infer-call.rs +++ b/src/test/run-pass/regions-infer-call.rs @@ -10,7 +10,7 @@ fn takes_two(x: &int, y: &int) -> int { *x + *y } -fn has_two(x: &a/int, y: &b/int) -> int { +fn has_two(x: &'a int, y: &'b int) -> int { takes_two(x, y) } diff --git a/src/test/run-pass/regions-infer-contravariance-due-to-ret.rs b/src/test/run-pass/regions-infer-contravariance-due-to-ret.rs index b1fa7287fdb1..c45212eaa626 100644 --- a/src/test/run-pass/regions-infer-contravariance-due-to-ret.rs +++ b/src/test/run-pass/regions-infer-contravariance-due-to-ret.rs @@ -12,7 +12,7 @@ struct boxed_int { f: &'self int, } -fn max(bi: &r/boxed_int, f: &r/int) -> int { +fn max(bi: &'r boxed_int, f: &'r int) -> int { if *bi.f > *f {*bi.f} else {*f} } diff --git a/src/test/run-pass/regions-infer-contravariance.rs b/src/test/run-pass/regions-infer-contravariance.rs index 1c263a6f0c62..7d966b06e353 100644 --- a/src/test/run-pass/regions-infer-contravariance.rs +++ b/src/test/run-pass/regions-infer-contravariance.rs @@ -16,11 +16,11 @@ fn get(bi: &'r boxed_int<'r>) -> &'r int { bi.f } -fn with(bi: &r/boxed_int) { +fn with(bi: &'r boxed_int) { // Here, the upcast is allowed because the `boxed_int` type is // contravariant with respect to `&r`. See also // compile-fail/regions-infer-invariance-due-to-mutability.rs - let bi: &blk/boxed_int/&blk = bi; + let bi: &'blk boxed_int/&blk = bi; fail_unless!(*get(bi) == 22); } diff --git a/src/test/run-pass/regions-params.rs b/src/test/run-pass/regions-params.rs index 0049653dea9d..1066c5fd4ca7 100644 --- a/src/test/run-pass/regions-params.rs +++ b/src/test/run-pass/regions-params.rs @@ -10,7 +10,7 @@ // xfail-fast -fn region_identity(x: &r/uint) -> &r/uint { x } +fn region_identity(x: &'r uint) -> &'r uint { x } fn apply(t: T, f: &fn(T) -> T) -> T { f(t) } diff --git a/src/test/run-pass/regions-trait.rs b/src/test/run-pass/regions-trait.rs index 5ca4af37737f..481f25745cd4 100644 --- a/src/test/run-pass/regions-trait.rs +++ b/src/test/run-pass/regions-trait.rs @@ -11,13 +11,13 @@ struct Ctxt { v: uint } trait get_ctxt { - fn get_ctxt(&self) -> &self/Ctxt; + fn get_ctxt(&self) -> &'self Ctxt; } struct HasCtxt { c: &'self Ctxt } impl get_ctxt for HasCtxt<'self> { - fn get_ctxt(&self) -> &self/Ctxt { + fn get_ctxt(&self) -> &'self Ctxt { self.c } }