Skip to content

Commit feca839

Browse files
committed
Merge pull request #3246 from erickt/incoming
libcore: update bytes/str reader to work with regions.
2 parents 6b6bea9 + bf0ea66 commit feca839

File tree

3 files changed

+37
-50
lines changed

3 files changed

+37
-50
lines changed

src/fuzzer/fuzzer.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -259,16 +259,17 @@ fn check_variants_T<T: copy>(
259259
// It would be best to test the *crate* for stability, but
260260
// testing the string for stability is easier and ok for now.
261261
let handler = diagnostic::mk_handler(none);
262-
let str3 =
262+
let str3 = do io::with_str_reader("") |rdr| {
263263
@as_str(|a|pprust::print_crate(
264264
codemap,
265265
intr,
266266
diagnostic::mk_span_handler(handler, codemap),
267267
crate2,
268268
filename,
269-
io::str_reader(~""), a,
269+
rdr, a,
270270
pprust::no_ann(),
271-
false));
271+
false))
272+
};
272273
match cx.mode {
273274
tm_converge => {
274275
check_roundtrip_convergence(str3, 1u);
@@ -419,7 +420,7 @@ fn parse_and_print(code: @~str) -> ~str {
419420
write_file(filename, *code);
420421
let crate = parse::parse_crate_from_source_str(
421422
filename, code, ~[], sess);
422-
io::with_str_reader(*code, |rdr| {
423+
do io::with_str_reader(*code) |rdr| {
423424
as_str(|a|
424425
pprust::print_crate(
425426
sess.cm,
@@ -431,7 +432,7 @@ fn parse_and_print(code: @~str) -> ~str {
431432
rdr, a,
432433
pprust::no_ann(),
433434
false) )
434-
})
435+
}
435436
}
436437

437438
fn has_raw_pointers(c: ast::crate) -> bool {

src/libcore/io.rs

+30-44
Original file line numberDiff line numberDiff line change
@@ -272,60 +272,42 @@ fn file_reader(path: ~str) -> result<Reader, ~str> {
272272
273273
// Byte buffer readers
274274
275-
type ByteBuf = {buf: ~[const u8], mut pos: uint, len: uint};
275+
type ByteBuf = {buf: &[const u8], mut pos: uint};
276276
277277
impl ByteBuf: Reader {
278278
fn read(buf: &[mut u8], len: uint) -> uint {
279-
let count = uint::min(len, self.len - self.pos);
279+
let count = uint::min(len, self.buf.len() - self.pos);
280280
281-
vec::u8::memcpy(buf, vec::const_view(self.buf, self.pos, self.len),
281+
vec::u8::memcpy(buf,
282+
vec::const_view(self.buf, self.pos, self.buf.len()),
282283
count);
283284
284285
self.pos += count;
285286
286287
count
287288
}
288289
fn read_byte() -> int {
289-
if self.pos == self.len { return -1; }
290+
if self.pos == self.buf.len() { return -1; }
290291
let b = self.buf[self.pos];
291292
self.pos += 1u;
292293
return b as int;
293294
}
294295
// FIXME (#2738): implement this
295296
fn unread_byte(_byte: int) { error!("Unimplemented: unread_byte"); fail; }
296-
fn eof() -> bool { self.pos == self.len }
297+
fn eof() -> bool { self.pos == self.buf.len() }
297298
fn seek(offset: int, whence: SeekStyle) {
298299
let pos = self.pos;
299-
self.pos = seek_in_buf(offset, pos, self.len, whence);
300+
self.pos = seek_in_buf(offset, pos, self.buf.len(), whence);
300301
}
301302
fn tell() -> uint { self.pos }
302303
}
303304

304-
fn bytes_reader(bytes: ~[u8]) -> Reader {
305-
bytes_reader_between(bytes, 0u, vec::len(bytes))
305+
fn with_bytes_reader<t>(bytes: &[u8], f: fn(Reader) -> t) -> t {
306+
f({buf: bytes, mut pos: 0u} as Reader)
306307
}
307308

308-
fn bytes_reader_between(bytes: ~[u8], start: uint, end: uint) -> Reader {
309-
{buf: bytes, mut pos: start, len: end} as Reader
310-
}
311-
312-
fn with_bytes_reader<t>(bytes: ~[u8], f: fn(Reader) -> t) -> t {
313-
f(bytes_reader(bytes))
314-
}
315-
316-
fn with_bytes_reader_between<t>(bytes: ~[u8], start: uint, end: uint,
317-
f: fn(Reader) -> t) -> t {
318-
f(bytes_reader_between(bytes, start, end))
319-
}
320-
321-
fn str_reader(s: ~str) -> Reader {
322-
bytes_reader(str::to_bytes(s))
323-
}
324-
325-
fn with_str_reader<T>(s: ~str, f: fn(Reader) -> T) -> T {
326-
do str::as_bytes(s) |bytes| {
327-
with_bytes_reader_between(bytes, 0u, str::len(s), f)
328-
}
309+
fn with_str_reader<T>(s: &str, f: fn(Reader) -> T) -> T {
310+
str::byte_slice(s, |bytes| with_bytes_reader(bytes, f))
329311
}
330312

331313
// Writing
@@ -847,9 +829,10 @@ mod tests {
847829

848830
#[test]
849831
fn test_readchars_empty() {
850-
let inp : io::Reader = io::str_reader(~"");
851-
let res : ~[char] = inp.read_chars(128u);
852-
assert(vec::len(res) == 0u);
832+
do io::with_str_reader(~"") |inp| {
833+
let res : ~[char] = inp.read_chars(128u);
834+
assert(vec::len(res) == 0u);
835+
}
853836
}
854837

855838
#[test]
@@ -862,13 +845,14 @@ mod tests {
862845
29983, 38152, 30340, 27748,
863846
21273, 20999, 32905, 27748];
864847
fn check_read_ln(len : uint, s: ~str, ivals: ~[int]) {
865-
let inp : io::Reader = io::str_reader(s);
866-
let res : ~[char] = inp.read_chars(len);
867-
if (len <= vec::len(ivals)) {
868-
assert(vec::len(res) == len);
848+
do io::with_str_reader(s) |inp| {
849+
let res : ~[char] = inp.read_chars(len);
850+
if (len <= vec::len(ivals)) {
851+
assert(vec::len(res) == len);
852+
}
853+
assert(vec::slice(ivals, 0u, vec::len(res)) ==
854+
vec::map(res, |x| x as int));
869855
}
870-
assert(vec::slice(ivals, 0u, vec::len(res)) ==
871-
vec::map(res, |x| x as int));
872856
}
873857
let mut i = 0u;
874858
while i < 8u {
@@ -881,16 +865,18 @@ mod tests {
881865

882866
#[test]
883867
fn test_readchar() {
884-
let inp : io::Reader = io::str_reader(~"生");
885-
let res : char = inp.read_char();
886-
assert(res as int == 29983);
868+
do io::with_str_reader(~"生") |inp| {
869+
let res : char = inp.read_char();
870+
assert(res as int == 29983);
871+
}
887872
}
888873

889874
#[test]
890875
fn test_readchar_empty() {
891-
let inp : io::Reader = io::str_reader(~"");
892-
let res : char = inp.read_char();
893-
assert(res as int == -1);
876+
do io::with_str_reader(~"") |inp| {
877+
let res : char = inp.read_char();
878+
assert(res as int == -1);
879+
}
894880
}
895881

896882
#[test]

src/test/run-pass/issue-2904.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ mod test {
6969
#[test]
7070
fn read_simple_board() {
7171
let s = #include_str("./maps/contest1.map");
72-
read_board_grid(io::str_reader(s));
72+
io::with_str_reader(s, read_board_grid)
7373
}
7474
}
7575

0 commit comments

Comments
 (0)