From e844e1db6e9cab339edd0ff83e324cc42ec96af0 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 26 Sep 2012 21:19:57 -0700 Subject: [PATCH] change vec::view sig to be sound (good catch @bblum) --- src/libcore/io.rs | 6 ++++-- src/libcore/vec.rs | 11 ++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/libcore/io.rs b/src/libcore/io.rs index 385df30e824f..47ea01af6770 100644 --- a/src/libcore/io.rs +++ b/src/libcore/io.rs @@ -697,8 +697,10 @@ impl BytesWriter: Writer { vec::reserve(&mut buf, count); unsafe { vec::raw::set_len(buf, count); } - let view = vec::mut_view(buf, self.pos, count); - vec::bytes::memcpy(view, v, v_len); + { + let view = vec::mut_view(buf, self.pos, count); + vec::bytes::memcpy(view, v, v_len); + } self.pos += v_len; diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 4bc445943cc2..77ac4b171ff6 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -338,7 +338,7 @@ pure fn slice(v: &[const T], start: uint, end: uint) -> ~[T] { } /// Return a slice that points into another slice. -pure fn view(v: &[T], start: uint, end: uint) -> &[T] { +pure fn view(v: &r/[T], start: uint, end: uint) -> &r/[T] { assert (start <= end); assert (end <= len(v)); do as_imm_buf(v) |p, _len| { @@ -351,7 +351,7 @@ pure fn view(v: &[T], start: uint, end: uint) -> &[T] { } /// Return a slice that points into another slice. -pure fn mut_view(v: &[mut T], start: uint, end: uint) -> &[mut T] { +pure fn mut_view(v: &r/[mut T], start: uint, end: uint) -> &r/[mut T] { assert (start <= end); assert (end <= len(v)); do as_mut_buf(v) |p, _len| { @@ -364,7 +364,8 @@ pure fn mut_view(v: &[mut T], start: uint, end: uint) -> &[mut T] { } /// Return a slice that points into another slice. -pure fn const_view(v: &[const T], start: uint, end: uint) -> &[const T] { +pure fn const_view(v: &r/[const T], start: uint, + end: uint) -> &r/[const T] { assert (start <= end); assert (end <= len(v)); do as_const_buf(v) |p, _len| { @@ -1526,7 +1527,7 @@ impl &[const T]: CopyableVector { } trait ImmutableVector { - pure fn view(start: uint, end: uint) -> &[T]; + pure fn view(start: uint, end: uint) -> &self/[T]; pure fn foldr(z: U, p: fn(T, U) -> U) -> U; pure fn map(f: fn(v: &T) -> U) -> ~[U]; pure fn mapi(f: fn(uint, v: &T) -> U) -> ~[U]; @@ -1546,7 +1547,7 @@ trait ImmutableEqVector { /// Extension methods for vectors impl &[T]: ImmutableVector { /// Return a slice that points into another slice. - pure fn view(start: uint, end: uint) -> &[T] { + pure fn view(start: uint, end: uint) -> &self/[T] { view(self, start, end) } /// Reduce a vector from right to left