Skip to content

Commit 8b66dbc

Browse files
committed
---
yaml --- r: 28574 b: refs/heads/try c: 5d925b2 h: refs/heads/master v: v3
1 parent 9b4b459 commit 8b66dbc

File tree

15 files changed

+152
-142
lines changed

15 files changed

+152
-142
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: e3f5403052e53b557998315fae780b5431a8ce0b
5+
refs/heads/try: 5d925b212e0dcfa3d754f86ba61d8e85d23e54ee
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: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,8 +219,12 @@ 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+
222224
fn as_str(f: fn@(io::Writer)) -> ~str {
223-
io::with_str_writer(f)
225+
let buf = io::mem_buffer();
226+
f(io::mem_buffer_writer(buf));
227+
io::mem_buffer_str(buf)
224228
}
225229

226230
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,12 +670,9 @@ 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-
struct BytesWriter {
674-
buf: DVec<u8>,
675-
mut pos: uint,
676-
}
673+
type MemBuffer = @{buf: DVec<u8>, mut pos: uint};
677674
678-
impl @BytesWriter: Writer {
675+
impl MemBuffer: Writer {
679676
fn write(v: &[const u8]) {
680677
do self.buf.swap |buf| {
681678
let mut buf <- buf;
@@ -704,24 +701,27 @@ impl @BytesWriter: Writer {
704701
fn get_type() -> WriterType { File }
705702
}
706703
707-
fn BytesWriter() -> @BytesWriter {
708-
@BytesWriter { buf: DVec(), mut pos: 0u }
704+
fn mem_buffer() -> MemBuffer {
705+
@{buf: DVec(), mut pos: 0u}
709706
}
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)
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())
715711
}
716712
717713
fn with_str_writer(f: fn(Writer)) -> ~str {
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);
714+
let buf = mem_buffer();
715+
let wr = mem_buffer_writer(buf);
716+
f(wr);
717+
io::mem_buffer_str(buf)
718+
}
723719
724-
unsafe { move ::unsafe::transmute(v) }
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)
725725
}
726726
727727
// Utility functions
@@ -946,18 +946,18 @@ mod tests {
946946
}
947947

948948
#[test]
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]);
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];
961961
}
962962
}
963963

branches/try/src/libcore/str.rs

Lines changed: 9 additions & 8 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,
19701971
from_c_str,
19711972
from_c_str_len,
19721973
from_bytes,
1973-
form_slice,
19741974
slice_bytes,
19751975
view_bytes,
19761976
push_byte,
@@ -2003,6 +2003,14 @@ 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+
20062014
/// Create a Rust string from a null-terminated C string
20072015
unsafe fn from_c_str(c_str: *libc::c_char) -> ~str {
20082016
from_buf(::unsafe::reinterpret_cast(&c_str))
@@ -2023,13 +2031,6 @@ mod raw {
20232031
/// Converts a byte to a string.
20242032
unsafe fn from_byte(u: u8) -> ~str { raw::from_bytes([u]) }
20252033

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-
20332034
/**
20342035
* Takes a bytewise (not UTF-8) slice from a string.
20352036
*

branches/try/src/libcore/sys.rs

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

100100
pure fn log_str<T>(t: T) -> ~str {
101101
unsafe {
102-
do io::with_str_writer |wr| {
103-
repr::write_repr(wr, &t)
104-
}
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.
105106
}
106107
}
107108

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-
do io::with_bytes_writer |wr| {
377-
for self.iter_bytes(lsb0) |bytes| {
378-
wr.write(bytes)
379-
}
376+
let buf = io::mem_buffer();
377+
for self.iter_bytes(lsb0) |bytes| {
378+
buf.write(bytes)
380379
}
380+
io::mem_buffer_buf(buf)
381381
}
382382
}

branches/try/src/libcore/vec.rs

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

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

16481649
/// Extension methods for vectors
16491650
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+
}
16501655
/// Reduce a vector from right to left
16511656
#[inline]
16521657
pure fn foldr<U: Copy>(z: U, p: fn(T, U) -> U) -> U { foldr(self, z, p) }
@@ -2909,17 +2914,14 @@ mod tests {
29092914
assert capacity(v) == 10u;
29102915
}
29112916

2912-
/*
29132917
#[test]
2914-
#[ignore] // region inference doesn't work well enough for this yet.
29152918
fn test_view() {
29162919
let v = ~[1, 2, 3, 4, 5];
2917-
let v = view(v, 1u, 3u);
2920+
let v = v.view(1u, 3u);
29182921
assert(len(v) == 2u);
29192922
assert(v[0] == 2);
29202923
assert(v[1] == 3);
29212924
}
2922-
*/
29232925
}
29242926

29252927
// Local Variables:

branches/try/src/libstd/ebml.rs

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

632632
fn test_v(v: Option<int>) {
633633
debug!("v == %?", v);
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);
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));
639638
let deser = ebml_deserializer(ebml_doc);
640639
let v1 = deserialize_0(deser);
641640
debug!("v1 == %?", v1);

branches/try/src/libstd/test.rs

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -233,33 +233,36 @@ fn print_failures(st: ConsoleTestState) {
233233
234234
#[test]
235235
fn should_sort_failures_before_printing_them() {
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-
};
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+
};
243245
244-
let test_b = {
245-
name: ~"b",
246-
testfn: fn~() { },
247-
ignore: false,
248-
should_fail: false
249-
};
246+
let test_b = {
247+
name: ~"b",
248+
testfn: fn~() { },
249+
ignore: false,
250+
should_fail: false
251+
};
250252
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]};
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]};
260262
261-
print_failures(st);
262-
};
263+
print_failures(st);
264+
265+
let s = io::mem_buffer_str(buffer);
263266
264267
let apos = option::get(str::find_str(s, ~"a"));
265268
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-
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-
}
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)
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-
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-
}
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)
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-
do io::with_str_writer |wr| {
2030-
let s = rust_printer(wr, intr);
2031-
f(s, t);
2032-
eof(s.s);
2033-
}
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)
20342034
}
20352035

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

0 commit comments

Comments
 (0)