Skip to content

Commit 7c2af67

Browse files
committed
---
yaml --- r: 23994 b: refs/heads/master c: d0d68c6 h: refs/heads/master v: v3
1 parent 0e09686 commit 7c2af67

File tree

13 files changed

+130
-137
lines changed

13 files changed

+130
-137
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: eb35039fe83d6d13b5c7c08fe761ab85374c96d0
2+
refs/heads/master: d0d68c6036275c0a190ad100d6eb36a537b76d80
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: cd6f24f9d14ac90d167386a56e7a6ac1f0318195
55
refs/heads/try: ffbe0e0e00374358b789b0037bcb3a577cd218be

trunk/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,

trunk/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

trunk/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

trunk/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
}

trunk/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);

trunk/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"));

trunk/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> {

trunk/src/rustc/metadata/encoder.rs

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ type stats = {
6868
enum encode_ctxt = {
6969
diag: span_handler,
7070
tcx: ty::ctxt,
71-
buf: io::MemBuffer,
7271
stats: stats,
7372
reachable: HashMap<ast::node_id, ()>,
7473
reexports: ~[(~str, def_id)],
@@ -1089,7 +1088,7 @@ const metadata_encoding_version : &[u8] = &[0x72, //'r' as u8,
10891088
0, 0, 0, 1 ];
10901089

10911090
fn encode_metadata(parms: encode_parms, crate: @crate) -> ~[u8] {
1092-
let buf = io::mem_buffer();
1091+
let wr = io::BytesWriter();
10931092
let stats =
10941093
{mut inline_bytes: 0,
10951094
mut attr_bytes: 0,
@@ -1102,7 +1101,6 @@ fn encode_metadata(parms: encode_parms, crate: @crate) -> ~[u8] {
11021101
let ecx: @encode_ctxt = @encode_ctxt({
11031102
diag: parms.diag,
11041103
tcx: parms.tcx,
1105-
buf: buf,
11061104
stats: move stats,
11071105
reachable: parms.reachable,
11081106
reexports: parms.reexports,
@@ -1115,37 +1113,36 @@ fn encode_metadata(parms: encode_parms, crate: @crate) -> ~[u8] {
11151113
type_abbrevs: ty::new_ty_hash()
11161114
});
11171115

1118-
let buf_w = io::mem_buffer_writer(buf);
1119-
let ebml_w = ebml::Writer(buf_w);
1116+
let ebml_w = ebml::Writer(wr as io::Writer);
11201117

11211118
encode_hash(ebml_w, ecx.link_meta.extras_hash);
11221119

1123-
let mut i = buf.pos;
1120+
let mut i = wr.pos;
11241121
let crate_attrs = synthesize_crate_attrs(ecx, crate);
11251122
encode_attributes(ebml_w, crate_attrs);
1126-
ecx.stats.attr_bytes = buf.pos - i;
1123+
ecx.stats.attr_bytes = wr.pos - i;
11271124

1128-
i = buf.pos;
1125+
i = wr.pos;
11291126
encode_crate_deps(ecx, ebml_w, ecx.cstore);
1130-
ecx.stats.dep_bytes = buf.pos - i;
1127+
ecx.stats.dep_bytes = wr.pos - i;
11311128

11321129
// Encode and index the items.
11331130
ebml_w.start_tag(tag_items);
1134-
i = buf.pos;
1131+
i = wr.pos;
11351132
let items_index = encode_info_for_items(ecx, ebml_w, crate);
1136-
ecx.stats.item_bytes = buf.pos - i;
1133+
ecx.stats.item_bytes = wr.pos - i;
11371134

1138-
i = buf.pos;
1135+
i = wr.pos;
11391136
let items_buckets = create_index(items_index, hash_node_id);
11401137
encode_index(ebml_w, items_buckets, write_int);
1141-
ecx.stats.index_bytes = buf.pos - i;
1138+
ecx.stats.index_bytes = wr.pos - i;
11421139
ebml_w.end_tag();
11431140

1144-
ecx.stats.total_bytes = buf.pos;
1141+
ecx.stats.total_bytes = wr.pos;
11451142

11461143
if (parms.tcx.sess.meta_stats()) {
11471144

1148-
do buf.buf.borrow |v| {
1145+
do wr.buf.borrow |v| {
11491146
do v.each |e| {
11501147
if e == 0 {
11511148
ecx.stats.zero_bytes += 1;
@@ -1166,7 +1163,7 @@ fn encode_metadata(parms: encode_parms, crate: @crate) -> ~[u8] {
11661163

11671164
// Pad this, since something (LLVM, presumably) is cutting off the
11681165
// remaining % 4 bytes.
1169-
buf_w.write(&[0u8, 0u8, 0u8, 0u8]);
1166+
wr.write(&[0u8, 0u8, 0u8, 0u8]);
11701167

11711168
// FIXME #3396: weird bug here, for reasons unclear this emits random
11721169
// looking bytes (mostly 0x1) if we use the version byte-array constant
@@ -1178,7 +1175,7 @@ fn encode_metadata(parms: encode_parms, crate: @crate) -> ~[u8] {
11781175

11791176
(do str::as_bytes(~"rust\x00\x00\x00\x01") |bytes| {
11801177
vec::slice(bytes, 0, 8)
1181-
}) + flate::deflate_bytes(io::mem_buffer_buf(buf))
1178+
}) + flate::deflate_bytes(wr.buf.check_out(|buf| buf))
11821179
}
11831180

11841181
// Get the encoded string for a type
@@ -1188,9 +1185,9 @@ fn encoded_ty(tcx: ty::ctxt, t: ty::t) -> ~str {
11881185
tcx: tcx,
11891186
reachable: |_id| false,
11901187
abbrevs: tyencode::ac_no_abbrevs};
1191-
let buf = io::mem_buffer();
1192-
tyencode::enc_ty(io::mem_buffer_writer(buf), cx, t);
1193-
return io::mem_buffer_str(buf);
1188+
do io::with_str_writer |wr| {
1189+
tyencode::enc_ty(wr, cx, t);
1190+
}
11941191
}
11951192

11961193

0 commit comments

Comments
 (0)