Skip to content

Commit 8f9db01

Browse files
committed
---
yaml --- r: 28575 b: refs/heads/try c: 2ac64d9 h: refs/heads/master i: 28573: 9b4b459 28571: b422729 28567: e4c45c2 28559: 4c363b6 28543: 28c5def v: v3
1 parent 8b66dbc commit 8f9db01

File tree

16 files changed

+144
-154
lines changed

16 files changed

+144
-154
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
refs/heads/master: cd6f24f9d14ac90d167386a56e7a6ac1f0318195
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: cd6f24f9d14ac90d167386a56e7a6ac1f0318195
5-
refs/heads/try: 5d925b212e0dcfa3d754f86ba61d8e85d23e54ee
5+
refs/heads/try: 2ac64d91ac9df242c780d162863c8c0abce448b1
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: d0c6ce338884ee21843f4b40bf6bf18d222ce5df

branches/try/src/fuzzer/fuzzer.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -219,12 +219,8 @@ fn under(n: uint, it: fn(uint)) {
219219
while i < n { it(i); i += 1u; }
220220
}
221221

222-
fn devnull() -> io::Writer { io::mem_buffer_writer(io::mem_buffer()) }
223-
224222
fn as_str(f: fn@(io::Writer)) -> ~str {
225-
let buf = io::mem_buffer();
226-
f(io::mem_buffer_writer(buf));
227-
io::mem_buffer_str(buf)
223+
io::with_str_writer(f)
228224
}
229225

230226
fn check_variants_of_ast(crate: ast::crate, codemap: codemap::codemap,

branches/try/src/libcore/io.rs

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -670,9 +670,12 @@ fn stderr() -> Writer { fd_writer(libc::STDERR_FILENO as c_int, false) }
670670
fn print(s: &str) { stdout().write_str(s); }
671671
fn println(s: &str) { stdout().write_line(s); }
672672
673-
type MemBuffer = @{buf: DVec<u8>, mut pos: uint};
673+
struct BytesWriter {
674+
buf: DVec<u8>,
675+
mut pos: uint,
676+
}
674677
675-
impl MemBuffer: Writer {
678+
impl @BytesWriter: Writer {
676679
fn write(v: &[const u8]) {
677680
do self.buf.swap |buf| {
678681
let mut buf <- buf;
@@ -701,27 +704,24 @@ impl MemBuffer: Writer {
701704
fn get_type() -> WriterType { File }
702705
}
703706
704-
fn mem_buffer() -> MemBuffer {
705-
@{buf: DVec(), mut pos: 0u}
707+
fn BytesWriter() -> @BytesWriter {
708+
@BytesWriter { buf: DVec(), mut pos: 0u }
706709
}
707-
fn mem_buffer_writer(b: MemBuffer) -> Writer { b as Writer }
708-
fn mem_buffer_buf(b: MemBuffer) -> ~[u8] { b.buf.get() }
709-
fn mem_buffer_str(b: MemBuffer) -> ~str {
710-
str::from_bytes(b.buf.get())
710+
711+
fn with_bytes_writer(f: fn(Writer)) -> ~[u8] {
712+
let wr = BytesWriter();
713+
f(wr as Writer);
714+
wr.buf.check_out(|buf| buf)
711715
}
712716
713717
fn with_str_writer(f: fn(Writer)) -> ~str {
714-
let buf = mem_buffer();
715-
let wr = mem_buffer_writer(buf);
716-
f(wr);
717-
io::mem_buffer_str(buf)
718-
}
718+
let mut v = with_bytes_writer(f);
719+
720+
// Make sure the vector has a trailing null and is proper utf8.
721+
vec::push(v, 0);
722+
assert str::is_utf8(v);
719723
720-
fn with_buf_writer(f: fn(Writer)) -> ~[u8] {
721-
let buf = mem_buffer();
722-
let wr = mem_buffer_writer(buf);
723-
f(wr);
724-
io::mem_buffer_buf(buf)
724+
unsafe { move ::unsafe::transmute(v) }
725725
}
726726
727727
// Utility functions
@@ -946,18 +946,18 @@ mod tests {
946946
}
947947

948948
#[test]
949-
fn mem_buffer_overwrite() {
950-
let mbuf = mem_buffer();
951-
mbuf.write(~[0u8, 1u8, 2u8, 3u8]);
952-
assert mem_buffer_buf(mbuf) == ~[0u8, 1u8, 2u8, 3u8];
953-
mbuf.seek(-2, SeekCur);
954-
mbuf.write(~[4u8, 5u8, 6u8, 7u8]);
955-
assert mem_buffer_buf(mbuf) == ~[0u8, 1u8, 4u8, 5u8, 6u8, 7u8];
956-
mbuf.seek(-2, SeekEnd);
957-
mbuf.write(~[8u8]);
958-
mbuf.seek(1, SeekSet);
959-
mbuf.write(~[9u8]);
960-
assert mem_buffer_buf(mbuf) == ~[0u8, 9u8, 4u8, 5u8, 8u8, 7u8];
949+
fn bytes_buffer_overwrite() {
950+
let wr = BytesWriter();
951+
wr.write(~[0u8, 1u8, 2u8, 3u8]);
952+
assert wr.buf.borrow(|buf| buf == ~[0u8, 1u8, 2u8, 3u8]);
953+
wr.seek(-2, SeekCur);
954+
wr.write(~[4u8, 5u8, 6u8, 7u8]);
955+
assert wr.buf.borrow(|buf| buf == ~[0u8, 1u8, 4u8, 5u8, 6u8, 7u8]);
956+
wr.seek(-2, SeekEnd);
957+
wr.write(~[8u8]);
958+
wr.seek(1, SeekSet);
959+
wr.write(~[9u8]);
960+
assert wr.buf.borrow(|buf| buf == ~[0u8, 9u8, 4u8, 5u8, 8u8, 7u8]);
961961
}
962962
}
963963

branches/try/src/libcore/str.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1967,10 +1967,10 @@ mod raw {
19671967
export
19681968
from_buf,
19691969
from_buf_len,
1970-
from_buf_len_nocopy,
19711970
from_c_str,
19721971
from_c_str_len,
19731972
from_bytes,
1973+
form_slice,
19741974
slice_bytes,
19751975
view_bytes,
19761976
push_byte,
@@ -2003,14 +2003,6 @@ mod raw {
20032003
return ::unsafe::transmute(move v);
20042004
}
20052005

2006-
/// Create a Rust string from a *u8 buffer of the given length
2007-
/// without copying
2008-
unsafe fn from_buf_len_nocopy(buf: &a / *u8, len: uint) -> &a / str {
2009-
let v = (*buf, len + 1);
2010-
assert is_utf8(::unsafe::reinterpret_cast(&v));
2011-
return ::unsafe::transmute(move v);
2012-
}
2013-
20142006
/// Create a Rust string from a null-terminated C string
20152007
unsafe fn from_c_str(c_str: *libc::c_char) -> ~str {
20162008
from_buf(::unsafe::reinterpret_cast(&c_str))
@@ -2031,6 +2023,13 @@ mod raw {
20312023
/// Converts a byte to a string.
20322024
unsafe fn from_byte(u: u8) -> ~str { raw::from_bytes([u]) }
20332025

2026+
/// Form a slice from a *u8 buffer of the given length without copying.
2027+
unsafe fn buf_as_slice<T>(buf: *u8, len: uint, f: fn(&& &str) -> T) -> T {
2028+
let v = (*buf, len + 1);
2029+
assert is_utf8(::unsafe::reinterpret_cast(&v));
2030+
f(::unsafe::transmute(move v))
2031+
}
2032+
20342033
/**
20352034
* Takes a bytewise (not UTF-8) slice from a string.
20362035
*

branches/try/src/libcore/sys.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,9 @@ pure fn refcount<T>(+t: @T) -> uint {
9999

100100
pure fn log_str<T>(t: T) -> ~str {
101101
unsafe {
102-
let buffer = io::mem_buffer();
103-
let writer = io::mem_buffer_writer(buffer);
104-
repr::write_repr(writer, &t);
105-
return io::mem_buffer_str(buffer); // XXX: Extra malloc and copy.
102+
do io::with_str_writer |wr| {
103+
repr::write_repr(wr, &t)
104+
}
106105
}
107106
}
108107

branches/try/src/libcore/to_bytes.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -373,10 +373,10 @@ trait ToBytes {
373373

374374
impl<A: IterBytes> A: ToBytes {
375375
fn to_bytes(lsb0: bool) -> ~[u8] {
376-
let buf = io::mem_buffer();
377-
for self.iter_bytes(lsb0) |bytes| {
378-
buf.write(bytes)
376+
do io::with_bytes_writer |wr| {
377+
for self.iter_bytes(lsb0) |bytes| {
378+
wr.write(bytes)
379+
}
379380
}
380-
io::mem_buffer_buf(buf)
381381
}
382382
}

branches/try/src/libcore/vec.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1625,7 +1625,6 @@ impl<T: Copy> &[const T]: CopyableVector<T> {
16251625
}
16261626

16271627
trait ImmutableVector<T> {
1628-
pure fn view(start: uint, end: uint) -> &[T];
16291628
pure fn foldr<U: Copy>(z: U, p: fn(T, U) -> U) -> U;
16301629
pure fn iter(f: fn(T));
16311630
pure fn iteri(f: fn(uint, T));
@@ -1648,10 +1647,6 @@ trait ImmutableEqVector<T: Eq> {
16481647

16491648
/// Extension methods for vectors
16501649
impl<T> &[T]: ImmutableVector<T> {
1651-
/// Return a slice that points into another slice.
1652-
pure fn view(start: uint, end: uint) -> &[T] {
1653-
view(self, start, end)
1654-
}
16551650
/// Reduce a vector from right to left
16561651
#[inline]
16571652
pure fn foldr<U: Copy>(z: U, p: fn(T, U) -> U) -> U { foldr(self, z, p) }
@@ -2914,14 +2909,17 @@ mod tests {
29142909
assert capacity(v) == 10u;
29152910
}
29162911

2912+
/*
29172913
#[test]
2914+
#[ignore] // region inference doesn't work well enough for this yet.
29182915
fn test_view() {
29192916
let v = ~[1, 2, 3, 4, 5];
2920-
let v = v.view(1u, 3u);
2917+
let v = view(v, 1u, 3u);
29212918
assert(len(v) == 2u);
29222919
assert(v[0] == 2);
29232920
assert(v[1] == 3);
29242921
}
2922+
*/
29252923
}
29262924

29272925
// Local Variables:

branches/try/src/libstd/ebml.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -631,10 +631,11 @@ fn test_option_int() {
631631

632632
fn test_v(v: Option<int>) {
633633
debug!("v == %?", v);
634-
let mbuf = io::mem_buffer();
635-
let ebml_w = ebml::Writer(io::mem_buffer_writer(mbuf));
636-
serialize_0(ebml_w, v);
637-
let ebml_doc = ebml::Doc(@io::mem_buffer_buf(mbuf));
634+
let bytes = do io::with_bytes_writer |wr| {
635+
let ebml_w = ebml::Writer(wr);
636+
serialize_0(ebml_w, v);
637+
};
638+
let ebml_doc = ebml::Doc(@bytes);
638639
let deser = ebml_deserializer(ebml_doc);
639640
let v1 = deserialize_0(deser);
640641
debug!("v1 == %?", v1);

branches/try/src/libstd/test.rs

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -233,36 +233,33 @@ fn print_failures(st: ConsoleTestState) {
233233
234234
#[test]
235235
fn should_sort_failures_before_printing_them() {
236-
let buffer = io::mem_buffer();
237-
let writer = io::mem_buffer_writer(buffer);
238-
239-
let test_a = {
240-
name: ~"a",
241-
testfn: fn~() { },
242-
ignore: false,
243-
should_fail: false
244-
};
245-
246-
let test_b = {
247-
name: ~"b",
248-
testfn: fn~() { },
249-
ignore: false,
250-
should_fail: false
251-
};
236+
let s = do io::with_str_writer |wr| {
237+
let test_a = {
238+
name: ~"a",
239+
testfn: fn~() { },
240+
ignore: false,
241+
should_fail: false
242+
};
252243
253-
let st =
254-
@{out: writer,
255-
log_out: option::None,
256-
use_color: false,
257-
mut total: 0u,
258-
mut passed: 0u,
259-
mut failed: 0u,
260-
mut ignored: 0u,
261-
mut failures: ~[test_b, test_a]};
244+
let test_b = {
245+
name: ~"b",
246+
testfn: fn~() { },
247+
ignore: false,
248+
should_fail: false
249+
};
262250
263-
print_failures(st);
251+
let st =
252+
@{out: wr,
253+
log_out: option::None,
254+
use_color: false,
255+
mut total: 0u,
256+
mut passed: 0u,
257+
mut failed: 0u,
258+
mut ignored: 0u,
259+
mut failures: ~[test_b, test_a]};
264260
265-
let s = io::mem_buffer_str(buffer);
261+
print_failures(st);
262+
};
266263
267264
let apos = option::get(str::find_str(s, ~"a"));
268265
let bpos = option::get(str::find_str(s, ~"b"));

branches/try/src/libsyntax/print/pprust.rs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,13 @@ fn path_to_str(&&p: @ast::path, intr: ident_interner) -> ~str {
125125

126126
fn fun_to_str(decl: ast::fn_decl, name: ast::ident,
127127
params: ~[ast::ty_param], intr: ident_interner) -> ~str {
128-
let buffer = io::mem_buffer();
129-
let s = rust_printer(io::mem_buffer_writer(buffer), intr);
130-
print_fn(s, decl, None, name, params, None);
131-
end(s); // Close the head box
132-
end(s); // Close the outer box
133-
eof(s.s);
134-
io::mem_buffer_str(buffer)
128+
do io::with_str_writer |wr| {
129+
let s = rust_printer(wr, intr);
130+
print_fn(s, decl, None, name, params, None);
131+
end(s); // Close the head box
132+
end(s); // Close the outer box
133+
eof(s.s);
134+
}
135135
}
136136

137137
#[test]
@@ -148,15 +148,15 @@ fn test_fun_to_str() {
148148
}
149149

150150
fn block_to_str(blk: ast::blk, intr: ident_interner) -> ~str {
151-
let buffer = io::mem_buffer();
152-
let s = rust_printer(io::mem_buffer_writer(buffer), intr);
153-
// containing cbox, will be closed by print-block at }
154-
cbox(s, indent_unit);
155-
// head-ibox, will be closed by print-block after {
156-
ibox(s, 0u);
157-
print_block(s, blk);
158-
eof(s.s);
159-
io::mem_buffer_str(buffer)
151+
do io::with_str_writer |wr| {
152+
let s = rust_printer(wr, intr);
153+
// containing cbox, will be closed by print-block at }
154+
cbox(s, indent_unit);
155+
// head-ibox, will be closed by print-block after {
156+
ibox(s, 0u);
157+
print_block(s, blk);
158+
eof(s.s);
159+
}
160160
}
161161

162162
fn meta_item_to_str(mi: @ast::meta_item, intr: ident_interner) -> ~str {
@@ -2026,11 +2026,11 @@ fn print_string(s: ps, st: ~str) {
20262026
}
20272027

20282028
fn to_str<T>(t: T, f: fn@(ps, T), intr: ident_interner) -> ~str {
2029-
let buffer = io::mem_buffer();
2030-
let s = rust_printer(io::mem_buffer_writer(buffer), intr);
2031-
f(s, t);
2032-
eof(s.s);
2033-
io::mem_buffer_str(buffer)
2029+
do io::with_str_writer |wr| {
2030+
let s = rust_printer(wr, intr);
2031+
f(s, t);
2032+
eof(s.s);
2033+
}
20342034
}
20352035

20362036
fn next_comment(s: ps) -> Option<comments::cmnt> {

0 commit comments

Comments
 (0)