Skip to content

Commit c06ce9d

Browse files
committed
---
yaml --- r: 138579 b: refs/heads/try2 c: c623d21 h: refs/heads/master i: 138577: 84bcf14 138575: 61869fd v: v3
1 parent 2e3f17d commit c06ce9d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+1473
-1194
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 269409f91231c4b1ea896844b820781d2cfab053
8+
refs/heads/try2: c623d21e388315df672951fcb8efb5000923ab3d
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/doc/tutorial.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1126,7 +1126,7 @@ points to.
11261126
11271127
~~~
11281128
let managed = @mut 10;
1129-
let mut owned = ~20;
1129+
let owned = ~mut 20;
11301130

11311131
let mut value = 30;
11321132
let borrowed = &mut value;

branches/try2/src/libcore/at_vec.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ pub mod traits {
168168
use kinds::Copy;
169169
use ops::Add;
170170

171-
impl<T:Copy> Add<&[const T],@[T]> for @[T] {
171+
pub impl<T:Copy> Add<&[const T],@[T]> for @[T] {
172172
#[inline(always)]
173173
pure fn add(&self, rhs: & &self/[const T]) -> @[T] {
174174
append(*self, (*rhs))

branches/try2/src/libcore/dvec.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,18 @@ impl<A> DVec<A> {
133133
self.check_out(|v| self.give_back(f(v)))
134134
}
135135
136+
/**
137+
* Swaps out the current vector and hands it off to a user-provided
138+
* function `f`. The function should transform it however is desired
139+
* and return a new vector to replace it with.
140+
*/
141+
#[inline(always)]
142+
fn swap_mut(f: &fn(v: ~[mut A]) -> ~[mut A]) {
143+
do self.swap |v| {
144+
vec::cast_from_mut(f(vec::cast_to_mut(v)))
145+
}
146+
}
147+
136148
/// Returns the number of elements currently in the dvec
137149
#[inline(always)]
138150
pure fn len() -> uint {
@@ -205,7 +217,7 @@ impl<A> DVec<A> {
205217
}
206218
207219
/// Gives access to the vector as a slice with mutable contents
208-
fn borrow_mut<R>(op: &fn(x: &mut [A]) -> R) -> R {
220+
fn borrow_mut<R>(op: fn(x: &[mut A]) -> R) -> R {
209221
do self.check_out |v| {
210222
let mut v = v;
211223
let result = op(v);

branches/try2/src/libcore/num/f32.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ impl num::One for f32 {
284284
static pure fn one() -> f32 { 1.0 }
285285
}
286286

287-
impl NumCast for f32 {
287+
pub impl NumCast for f32 {
288288
/**
289289
* Cast `n` to an `f32`
290290
*/

branches/try2/src/libcore/num/f64.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ impl cmp::Ord for f64 {
299299
pure fn gt(&self, other: &f64) -> bool { (*self) > (*other) }
300300
}
301301

302-
impl NumCast for f64 {
302+
pub impl NumCast for f64 {
303303
/**
304304
* Cast `n` to an `f64`
305305
*/

branches/try2/src/libcore/num/float.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ impl num::One for float {
420420
static pure fn one() -> float { 1.0 }
421421
}
422422
423-
impl NumCast for float {
423+
pub impl NumCast for float {
424424
/**
425425
* Cast `n` to a `float`
426426
*/

branches/try2/src/libcore/num/int-template/i16.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ mod inst {
1717
pub const bits: uint = ::u16::bits;
1818
}
1919

20-
impl NumCast for i16 {
20+
pub impl NumCast for i16 {
2121
/**
2222
* Cast `n` to a `i16`
2323
*/

branches/try2/src/libcore/num/int-template/i32.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ mod inst {
1717
pub const bits: uint = ::u32::bits;
1818
}
1919

20-
impl NumCast for i32 {
20+
pub impl NumCast for i32 {
2121
/**
2222
* Cast `n` to a `i32`
2323
*/

branches/try2/src/libcore/num/int-template/i64.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ mod inst {
1717
pub const bits: uint = ::u64::bits;
1818
}
1919

20-
impl NumCast for i64 {
20+
pub impl NumCast for i64 {
2121
/**
2222
* Cast `n` to a `i64`
2323
*/

branches/try2/src/libcore/num/int-template/i8.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ mod inst {
1717
pub const bits: uint = ::u8::bits;
1818
}
1919

20-
impl NumCast for i8 {
20+
pub impl NumCast for i8 {
2121
/**
2222
* Cast `n` to a `i8`
2323
*/

branches/try2/src/libcore/num/int-template/int.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ mod inst {
5858
}
5959
}
6060

61-
impl NumCast for int {
61+
pub impl NumCast for int {
6262
/**
6363
* Cast `n` to a `int`
6464
*/

branches/try2/src/libcore/num/uint-template/u16.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ mod inst {
1919
pub const bits: uint = 16;
2020
}
2121

22-
impl NumCast for u16 {
22+
pub impl NumCast for u16 {
2323
/**
2424
* Cast `n` to a `u16`
2525
*/

branches/try2/src/libcore/num/uint-template/u32.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ mod inst {
1919
pub const bits: uint = 32;
2020
}
2121

22-
impl NumCast for u32 {
22+
pub impl NumCast for u32 {
2323
/**
2424
* Cast `n` to a `u32`
2525
*/

branches/try2/src/libcore/num/uint-template/u64.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ mod inst {
1919
pub const bits: uint = 64;
2020
}
2121

22-
impl NumCast for u64 {
22+
pub impl NumCast for u64 {
2323
/**
2424
* Cast `n` to a `u64`
2525
*/

branches/try2/src/libcore/num/uint-template/u8.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ mod inst {
2626
pub pure fn is_ascii(x: T) -> bool { return 0 as T == x & 128 as T; }
2727
}
2828

29-
impl NumCast for u8 {
29+
pub impl NumCast for u8 {
3030
/**
3131
* Cast `n` to a `u8`
3232
*/

branches/try2/src/libcore/num/uint-template/uint.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ pub mod inst {
110110
return true;
111111
}
112112

113-
impl iter::Times for uint {
113+
pub impl iter::Times for uint {
114114
#[inline(always)]
115115
/**
116116
* A convenience form for basic iteration. Given a uint `x`,
@@ -209,7 +209,7 @@ pub mod inst {
209209
}
210210
}
211211

212-
impl NumCast for uint {
212+
pub impl NumCast for uint {
213213
/**
214214
* Cast `n` to a `uint`
215215
*/

branches/try2/src/libcore/option.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ pub enum Option<T> {
5656
Some(T),
5757
}
5858

59-
impl<T:Ord> Ord for Option<T> {
59+
pub impl<T:Ord> Ord for Option<T> {
6060
pure fn lt(&self, other: &Option<T>) -> bool {
6161
match (self, other) {
6262
(&None, &None) => false,

branches/try2/src/libcore/os.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ pub mod win32 {
109109
let mut done = false;
110110
while !done {
111111
let mut k: DWORD = 0;
112-
let mut buf = vec::from_elem(n as uint, 0u16);
112+
let buf = vec::cast_to_mut(vec::from_elem(n as uint, 0u16));
113113
do vec::as_mut_buf(buf) |b, _sz| {
114114
k = f(b, TMPBUF_SZ as DWORD);
115115
if k == (0 as DWORD) {

branches/try2/src/libcore/owned.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,22 @@
1313
use cmp::{Eq, Ord};
1414

1515
#[cfg(notest)]
16-
impl<T:Eq> Eq for ~T {
16+
impl<T:Eq> Eq for ~const T {
1717
#[inline(always)]
18-
pure fn eq(&self, other: &~T) -> bool { *(*self) == *(*other) }
18+
pure fn eq(&self, other: &~const T) -> bool { *(*self) == *(*other) }
1919
#[inline(always)]
20-
pure fn ne(&self, other: &~T) -> bool { *(*self) != *(*other) }
20+
pure fn ne(&self, other: &~const T) -> bool { *(*self) != *(*other) }
2121
}
2222

2323
#[cfg(notest)]
24-
impl<T:Ord> Ord for ~T {
24+
impl<T:Ord> Ord for ~const T {
2525
#[inline(always)]
26-
pure fn lt(&self, other: &~T) -> bool { *(*self) < *(*other) }
26+
pure fn lt(&self, other: &~const T) -> bool { *(*self) < *(*other) }
2727
#[inline(always)]
28-
pure fn le(&self, other: &~T) -> bool { *(*self) <= *(*other) }
28+
pure fn le(&self, other: &~const T) -> bool { *(*self) <= *(*other) }
2929
#[inline(always)]
30-
pure fn ge(&self, other: &~T) -> bool { *(*self) >= *(*other) }
30+
pure fn ge(&self, other: &~const T) -> bool { *(*self) >= *(*other) }
3131
#[inline(always)]
32-
pure fn gt(&self, other: &~T) -> bool { *(*self) > *(*other) }
32+
pure fn gt(&self, other: &~const T) -> bool { *(*self) > *(*other) }
3333
}
3434

branches/try2/src/libcore/str.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2362,7 +2362,7 @@ pub trait OwnedStr {
23622362
fn push_char(&mut self, c: char);
23632363
}
23642364

2365-
impl OwnedStr for ~str {
2365+
pub impl OwnedStr for ~str {
23662366
fn push_str(&mut self, v: &str) {
23672367
push_str(self, v);
23682368
}

branches/try2/src/libcore/to_bytes.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ impl IterBytes for char {
170170
pub mod x32 {
171171
use to_bytes::{Cb, IterBytes};
172172

173-
impl IterBytes for uint {
173+
pub impl IterBytes for uint {
174174
#[inline(always)]
175175
pure fn iter_bytes(&self, lsb0: bool, f: Cb) {
176176
(*self as u32).iter_bytes(lsb0, f)
@@ -182,7 +182,7 @@ pub mod x32 {
182182
pub mod x64 {
183183
use to_bytes::{Cb, IterBytes};
184184

185-
impl IterBytes for uint {
185+
pub impl IterBytes for uint {
186186
#[inline(always)]
187187
pure fn iter_bytes(&self, lsb0: bool, f: Cb) {
188188
(*self as u64).iter_bytes(lsb0, f)

branches/try2/src/libcore/to_str.rs

Lines changed: 0 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -74,53 +74,10 @@ impl<A:ToStr,B:ToStr,C:ToStr> ToStr for (A, B, C) {
7474
}
7575
}
7676

77-
impl<A:ToStr> ToStr for &[A] {
78-
#[inline(always)]
79-
pure fn to_str(&self) -> ~str {
80-
unsafe {
81-
// FIXME #4568
82-
// Bleh -- not really unsafe
83-
// push_str and push_char
84-
let mut acc = ~"[", first = true;
85-
for self.each |elt| {
86-
unsafe {
87-
if first { first = false; }
88-
else { str::push_str(&mut acc, ~", "); }
89-
str::push_str(&mut acc, elt.to_str());
90-
}
91-
}
92-
str::push_char(&mut acc, ']');
93-
acc
94-
}
95-
}
96-
}
97-
9877
impl<A:ToStr> ToStr for ~[A] {
9978
#[inline(always)]
10079
pure fn to_str(&self) -> ~str {
10180
unsafe {
102-
// FIXME #4568
103-
// Bleh -- not really unsafe
104-
// push_str and push_char
105-
let mut acc = ~"[", first = true;
106-
for self.each |elt| {
107-
unsafe {
108-
if first { first = false; }
109-
else { str::push_str(&mut acc, ~", "); }
110-
str::push_str(&mut acc, elt.to_str());
111-
}
112-
}
113-
str::push_char(&mut acc, ']');
114-
acc
115-
}
116-
}
117-
}
118-
119-
impl<A:ToStr> ToStr for @[A] {
120-
#[inline(always)]
121-
pure fn to_str(&self) -> ~str {
122-
unsafe {
123-
// FIXME #4568
12481
// Bleh -- not really unsafe
12582
// push_str and push_char
12683
let mut acc = ~"[", first = true;

branches/try2/src/libcore/vec.rs

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,16 @@ pub pure fn build_sized_opt<A>(size: Option<uint>,
209209
build_sized(size.get_or_default(4), builder)
210210
}
211211

212+
/// Produces a mut vector from an immutable vector.
213+
pub pure fn cast_to_mut<T>(v: ~[T]) -> ~[mut T] {
214+
unsafe { ::cast::transmute(v) }
215+
}
216+
217+
/// Produces an immutable vector from a mut vector.
218+
pub pure fn cast_from_mut<T>(v: ~[mut T]) -> ~[T] {
219+
unsafe { ::cast::transmute(v) }
220+
}
221+
212222
// Accessors
213223

214224
/// Returns the first element of a vector
@@ -264,10 +274,9 @@ pub pure fn slice<T>(v: &r/[T], start: uint, end: uint) -> &r/[T] {
264274
265275
/// Return a slice that points into another slice.
266276
#[inline(always)]
267-
pub pure fn mut_slice<T>(v: &r/mut [T],
268-
start: uint,
269-
end: uint)
270-
-> &r/mut [T] {
277+
pub pure fn mut_slice<T>(v: &r/[mut T], start: uint,
278+
end: uint) -> &r/[mut T] {
279+
271280
assert (start <= end);
272281
assert (end <= len(v));
273282
do as_mut_buf(v) |p, _len| {
@@ -281,10 +290,8 @@ pub pure fn mut_slice<T>(v: &r/mut [T],
281290
282291
/// Return a slice that points into another slice.
283292
#[inline(always)]
284-
pub pure fn const_slice<T>(v: &r/[const T],
285-
start: uint,
286-
end: uint)
287-
-> &r/[const T] {
293+
pub pure fn const_slice<T>(v: &r/[const T], start: uint,
294+
end: uint) -> &r/[const T] {
288295
assert (start <= end);
289296
assert (end <= len(v));
290297
do as_const_buf(v) |p, _len| {
@@ -3330,6 +3337,28 @@ mod tests {
33303337
let _x = windowed (0u, ~[1u,2u,3u,4u,5u,6u]);
33313338
}
33323339

3340+
#[test]
3341+
fn cast_to_mut_no_copy() {
3342+
unsafe {
3343+
let x = ~[1, 2, 3];
3344+
let addr = raw::to_ptr(x);
3345+
let x_mut = cast_to_mut(x);
3346+
let addr_mut = raw::to_ptr(x_mut);
3347+
assert addr == addr_mut;
3348+
}
3349+
}
3350+
3351+
#[test]
3352+
fn cast_from_mut_no_copy() {
3353+
unsafe {
3354+
let x = ~[mut 1, 2, 3];
3355+
let addr = raw::to_ptr(x);
3356+
let x_imm = cast_from_mut(x);
3357+
let addr_imm = raw::to_ptr(x_imm);
3358+
assert addr == addr_imm;
3359+
}
3360+
}
3361+
33333362
#[test]
33343363
fn test_unshift() {
33353364
let mut x = ~[1, 2, 3];

0 commit comments

Comments
 (0)