Skip to content

Commit d0e60b7

Browse files
committed
De-~[] Reader and Writer
There's a little more allocation here and there now since from_utf8_owned can't be used with Vec.
1 parent 94a055c commit d0e60b7

File tree

27 files changed

+117
-108
lines changed

27 files changed

+117
-108
lines changed

src/compiletest/procsrv.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ pub fn run(lib_path: &str,
8484

8585
Some(Result {
8686
status: status,
87-
out: str::from_utf8_owned(output).unwrap(),
88-
err: str::from_utf8_owned(error).unwrap()
87+
out: str::from_utf8(output.as_slice()).unwrap().to_owned(),
88+
err: str::from_utf8(error.as_slice()).unwrap().to_owned()
8989
})
9090
},
9191
Err(..) => None

src/compiletest/runtest.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ fn run_pretty_test(config: &config, props: &TestProps, testfile: &Path) {
153153
match props.pp_exact { Some(_) => 1, None => 2 };
154154

155155
let src = File::open(testfile).read_to_end().unwrap();
156-
let src = str::from_utf8_owned(src).unwrap();
156+
let src = str::from_utf8(src.as_slice()).unwrap().to_owned();
157157
let mut srcs = vec!(src);
158158

159159
let mut round = 0;
@@ -177,7 +177,7 @@ fn run_pretty_test(config: &config, props: &TestProps, testfile: &Path) {
177177
Some(ref file) => {
178178
let filepath = testfile.dir_path().join(file);
179179
let s = File::open(&filepath).read_to_end().unwrap();
180-
str::from_utf8_owned(s).unwrap()
180+
str::from_utf8(s.as_slice()).unwrap().to_owned()
181181
}
182182
None => { (*srcs.get(srcs.len() - 2u)).clone() }
183183
};
@@ -1163,7 +1163,7 @@ fn disassemble_extract(config: &config, _props: &TestProps,
11631163
11641164
fn count_extracted_lines(p: &Path) -> uint {
11651165
let x = File::open(&p.with_extension("ll")).read_to_end().unwrap();
1166-
let x = str::from_utf8_owned(x).unwrap();
1166+
let x = str::from_utf8(x.as_slice()).unwrap();
11671167
x.lines().len()
11681168
}
11691169

src/librustc/back/archive.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,10 @@ fn run_ar(sess: &Session, args: &str, cwd: Option<&Path>,
5959
if !o.status.success() {
6060
sess.err(format!("{} {} failed with: {}", ar, args.connect(" "),
6161
o.status));
62-
sess.note(format!("stdout ---\n{}", str::from_utf8(o.output).unwrap()));
63-
sess.note(format!("stderr ---\n{}", str::from_utf8(o.error).unwrap()));
62+
sess.note(format!("stdout ---\n{}",
63+
str::from_utf8(o.output.as_slice()).unwrap()));
64+
sess.note(format!("stderr ---\n{}",
65+
str::from_utf8(o.error.as_slice()).unwrap()));
6466
sess.abort_if_errors();
6567
}
6668
o
@@ -129,7 +131,7 @@ impl<'a> Archive<'a> {
129131
/// Lists all files in an archive
130132
pub fn files(&self) -> Vec<~str> {
131133
let output = run_ar(self.sess, "t", None, [&self.dst]);
132-
let output = str::from_utf8(output.output).unwrap();
134+
let output = str::from_utf8(output.output.as_slice()).unwrap();
133135
// use lines_any because windows delimits output with `\r\n` instead of
134136
// just `\n`
135137
output.lines_any().map(|s| s.to_owned()).collect()

src/librustc/back/link.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,9 @@ pub mod write {
337337
if !prog.status.success() {
338338
sess.err(format!("linking with `{}` failed: {}", cc, prog.status));
339339
sess.note(format!("{} arguments: '{}'", cc, args.connect("' '")));
340-
sess.note(str::from_utf8_owned(prog.error + prog.output).unwrap());
340+
let mut note = prog.error.clone();
341+
note.push_all(prog.output.as_slice());
342+
sess.note(str::from_utf8(note.as_slice()).unwrap().to_owned());
341343
sess.abort_if_errors();
342344
}
343345
},
@@ -929,7 +931,8 @@ fn link_rlib<'a>(sess: &'a Session,
929931
let bc = obj_filename.with_extension("bc");
930932
let bc_deflated = obj_filename.with_extension("bc.deflate");
931933
match fs::File::open(&bc).read_to_end().and_then(|data| {
932-
fs::File::create(&bc_deflated).write(flate::deflate_bytes(data).as_slice())
934+
fs::File::create(&bc_deflated)
935+
.write(flate::deflate_bytes(data.as_slice()).as_slice())
933936
}) {
934937
Ok(()) => {}
935938
Err(e) => {
@@ -1025,7 +1028,9 @@ fn link_natively(sess: &Session, dylib: bool, obj_filename: &Path,
10251028
if !prog.status.success() {
10261029
sess.err(format!("linking with `{}` failed: {}", cc_prog, prog.status));
10271030
sess.note(format!("{} arguments: '{}'", cc_prog, cc_args.connect("' '")));
1028-
sess.note(str::from_utf8_owned(prog.error + prog.output).unwrap());
1031+
let mut output = prog.error.clone();
1032+
output.push_all(prog.output.as_slice());
1033+
sess.note(str::from_utf8(output.as_slice()).unwrap().to_owned());
10291034
sess.abort_if_errors();
10301035
}
10311036
},

src/librustc/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ pub fn run_compiler(args: &[~str]) {
272272
let ifile = matches.free.get(0).as_slice();
273273
if ifile == "-" {
274274
let contents = io::stdin().read_to_end().unwrap();
275-
let src = str::from_utf8_owned(contents).unwrap();
275+
let src = str::from_utf8(contents.as_slice()).unwrap().to_owned();
276276
(d::StrInput(src), None)
277277
} else {
278278
(d::FileInput(Path::new(ifile)), Some(Path::new(ifile)))

src/librustdoc/html/render.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ impl<'a> SourceCollector<'a> {
487487
filename.ends_with("macros>") => return Ok(()),
488488
Err(e) => return Err(e)
489489
};
490-
let contents = str::from_utf8_owned(contents).unwrap();
490+
let contents = str::from_utf8(contents.as_slice()).unwrap();
491491

492492
// Remove the utf-8 BOM if any
493493
let contents = if contents.starts_with("\ufeff") {

src/librustdoc/markdown.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use test::Collector;
2222
fn load_string(input: &Path) -> io::IoResult<Option<~str>> {
2323
let mut f = try!(io::File::open(input));
2424
let d = try!(f.read_to_end());
25-
Ok(str::from_utf8_owned(d))
25+
Ok(str::from_utf8(d.as_slice()).map(|s| s.to_owned()))
2626
}
2727
macro_rules! load_or_return {
2828
($input: expr, $cant_read: expr, $not_utf8: expr) => {

src/librustdoc/test.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,8 @@ fn runtest(test: &str, cratename: &str, libs: HashSet<Path>, should_fail: bool,
159159
if should_fail && out.status.success() {
160160
fail!("test executable succeeded when it should have failed");
161161
} else if !should_fail && !out.status.success() {
162-
fail!("test executable failed:\n{}", str::from_utf8(out.error));
162+
fail!("test executable failed:\n{}",
163+
str::from_utf8(out.error.as_slice()));
163164
}
164165
}
165166
}

src/libserialize/json.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,8 +1282,8 @@ pub fn from_reader(rdr: &mut io::Reader) -> DecodeResult<Json> {
12821282
Ok(c) => c,
12831283
Err(e) => return Err(IoError(e))
12841284
};
1285-
let s = match str::from_utf8_owned(contents) {
1286-
Some(s) => s,
1285+
let s = match str::from_utf8(contents.as_slice()) {
1286+
Some(s) => s.to_owned(),
12871287
None => return Err(ParseError(~"contents not utf-8", 0, 0))
12881288
};
12891289
let mut parser = Parser::new(s.chars());

src/libstd/io/buffered.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -504,10 +504,10 @@ mod test {
504504
fn test_read_until() {
505505
let inner = MemReader::new(~[0, 1, 2, 1, 0]);
506506
let mut reader = BufferedReader::with_capacity(2, inner);
507-
assert_eq!(reader.read_until(0), Ok(~[0]));
508-
assert_eq!(reader.read_until(2), Ok(~[1, 2]));
509-
assert_eq!(reader.read_until(1), Ok(~[1]));
510-
assert_eq!(reader.read_until(8), Ok(~[0]));
507+
assert_eq!(reader.read_until(0), Ok(vec!(0)));
508+
assert_eq!(reader.read_until(2), Ok(vec!(1, 2)));
509+
assert_eq!(reader.read_until(1), Ok(vec!(1)));
510+
assert_eq!(reader.read_until(8), Ok(vec!(0)));
511511
assert!(reader.read_until(9).is_err());
512512
}
513513

src/libstd/io/extensions.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ mod test {
323323
fn read_bytes() {
324324
let mut reader = MemReader::new(~[10, 11, 12, 13]);
325325
let bytes = reader.read_exact(4).unwrap();
326-
assert!(bytes == ~[10, 11, 12, 13]);
326+
assert!(bytes == vec!(10, 11, 12, 13));
327327
}
328328

329329
#[test]
@@ -332,7 +332,7 @@ mod test {
332332
count: 0,
333333
};
334334
let bytes = reader.read_exact(4).unwrap();
335-
assert!(bytes == ~[10, 11, 12, 13]);
335+
assert!(bytes == vec!(10, 11, 12, 13));
336336
}
337337

338338
#[test]
@@ -344,37 +344,37 @@ mod test {
344344
#[test]
345345
fn push_exact() {
346346
let mut reader = MemReader::new(~[10, 11, 12, 13]);
347-
let mut buf = ~[8, 9];
347+
let mut buf = vec!(8, 9);
348348
reader.push_exact(&mut buf, 4).unwrap();
349-
assert!(buf == ~[8, 9, 10, 11, 12, 13]);
349+
assert!(buf == vec!(8, 9, 10, 11, 12, 13));
350350
}
351351

352352
#[test]
353353
fn push_exact_partial() {
354354
let mut reader = PartialReader {
355355
count: 0,
356356
};
357-
let mut buf = ~[8, 9];
357+
let mut buf = vec!(8, 9);
358358
reader.push_exact(&mut buf, 4).unwrap();
359-
assert!(buf == ~[8, 9, 10, 11, 12, 13]);
359+
assert!(buf == vec!(8, 9, 10, 11, 12, 13));
360360
}
361361

362362
#[test]
363363
fn push_exact_eof() {
364364
let mut reader = MemReader::new(~[10, 11]);
365-
let mut buf = ~[8, 9];
365+
let mut buf = vec!(8, 9);
366366
assert!(reader.push_exact(&mut buf, 4).is_err());
367-
assert!(buf == ~[8, 9, 10, 11]);
367+
assert!(buf == vec!(8, 9, 10, 11));
368368
}
369369

370370
#[test]
371371
fn push_exact_error() {
372372
let mut reader = ErroringLaterReader {
373373
count: 0,
374374
};
375-
let mut buf = ~[8, 9];
375+
let mut buf = vec!(8, 9);
376376
assert!(reader.push_exact(&mut buf, 4).is_err());
377-
assert!(buf == ~[8, 9, 10]);
377+
assert!(buf == vec!(8, 9, 10));
378378
}
379379

380380
#[test]
@@ -383,7 +383,7 @@ mod test {
383383
count: 0,
384384
};
385385
let buf = reader.read_to_end().unwrap();
386-
assert!(buf == ~[10, 11, 12, 13]);
386+
assert!(buf == vec!(10, 11, 12, 13));
387387
}
388388

389389
#[test]
@@ -393,7 +393,7 @@ mod test {
393393
count: 0,
394394
};
395395
let buf = reader.read_to_end().unwrap();
396-
assert!(buf == ~[10, 11]);
396+
assert!(buf == vec!(10, 11));
397397
}
398398

399399
#[test]

src/libstd/io/fs.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1074,7 +1074,7 @@ mod test {
10741074
check!(copy(&input, &output));
10751075

10761076
assert_eq!(check!(File::open(&output).read_to_end()),
1077-
(bytes!("foo")).to_owned());
1077+
(Vec::from_slice(bytes!("foo"))));
10781078
})
10791079

10801080
iotest!(fn copy_file_src_dir() {
@@ -1114,7 +1114,7 @@ mod test {
11141114
}
11151115
assert_eq!(check!(stat(&out)).size, check!(stat(&input)).size);
11161116
assert_eq!(check!(File::open(&out).read_to_end()),
1117-
(bytes!("foobar")).to_owned());
1117+
(Vec::from_slice(bytes!("foobar"))));
11181118
})
11191119

11201120
#[cfg(not(windows))] // apparently windows doesn't like symlinks
@@ -1146,7 +1146,7 @@ mod test {
11461146
}
11471147
assert_eq!(check!(stat(&out)).size, check!(stat(&input)).size);
11481148
assert_eq!(check!(File::open(&out).read_to_end()),
1149-
(bytes!("foobar")).to_owned());
1149+
(Vec::from_slice(bytes!("foobar"))));
11501150

11511151
// can't link to yourself
11521152
match link(&input, &input) {
@@ -1206,7 +1206,7 @@ mod test {
12061206
check!(file.fsync());
12071207
assert_eq!(check!(stat(&path)).size, 10);
12081208
assert_eq!(check!(File::open(&path).read_to_end()),
1209-
(bytes!("foobar", 0, 0, 0, 0)).to_owned());
1209+
(Vec::from_slice(bytes!("foobar", 0, 0, 0, 0))));
12101210

12111211
// Truncate to a smaller length, don't seek, and then write something.
12121212
// Ensure that the intermediate zeroes are all filled in (we're seeked
@@ -1217,7 +1217,7 @@ mod test {
12171217
check!(file.fsync());
12181218
assert_eq!(check!(stat(&path)).size, 9);
12191219
assert_eq!(check!(File::open(&path).read_to_end()),
1220-
(bytes!("fo", 0, 0, 0, 0, "wut")).to_owned());
1220+
(Vec::from_slice(bytes!("fo", 0, 0, 0, 0, "wut"))));
12211221
drop(file);
12221222
})
12231223

src/libstd/io/mem.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ impl Seek for MemWriter {
129129
///
130130
/// let mut r = MemReader::new(~[0, 1, 2]);
131131
///
132-
/// assert_eq!(r.read_to_end().unwrap(), ~[0, 1, 2]);
132+
/// assert_eq!(r.read_to_end().unwrap(), vec!(0, 1, 2));
133133
/// ```
134134
pub struct MemReader {
135135
buf: ~[u8],
@@ -272,7 +272,7 @@ impl<'a> Seek for BufWriter<'a> {
272272
/// let mut buf = [0, 1, 2, 3];
273273
/// let mut r = BufReader::new(buf);
274274
///
275-
/// assert_eq!(r.read_to_end().unwrap(), ~[0, 1, 2, 3]);
275+
/// assert_eq!(r.read_to_end().unwrap(), vec!(0, 1, 2, 3));
276276
/// ```
277277
pub struct BufReader<'a> {
278278
buf: &'a [u8],
@@ -441,8 +441,8 @@ mod test {
441441
assert_eq!(buf.slice(0, 3), &[5, 6, 7]);
442442
assert!(reader.read(buf).is_err());
443443
let mut reader = MemReader::new(~[0, 1, 2, 3, 4, 5, 6, 7]);
444-
assert_eq!(reader.read_until(3).unwrap(), ~[0, 1, 2, 3]);
445-
assert_eq!(reader.read_until(3).unwrap(), ~[4, 5, 6, 7]);
444+
assert_eq!(reader.read_until(3).unwrap(), vec!(0, 1, 2, 3));
445+
assert_eq!(reader.read_until(3).unwrap(), vec!(4, 5, 6, 7));
446446
assert!(reader.read(buf).is_err());
447447
}
448448

@@ -465,8 +465,8 @@ mod test {
465465
assert_eq!(buf.slice(0, 3), &[5, 6, 7]);
466466
assert!(reader.read(buf).is_err());
467467
let mut reader = BufReader::new(in_buf);
468-
assert_eq!(reader.read_until(3).unwrap(), ~[0, 1, 2, 3]);
469-
assert_eq!(reader.read_until(3).unwrap(), ~[4, 5, 6, 7]);
468+
assert_eq!(reader.read_until(3).unwrap(), vec!(0, 1, 2, 3));
469+
assert_eq!(reader.read_until(3).unwrap(), vec!(4, 5, 6, 7));
470470
assert!(reader.read(buf).is_err());
471471
}
472472

src/libstd/io/mod.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,8 @@ use str::{StrSlice, OwnedStr};
225225
use str;
226226
use uint;
227227
use unstable::finally::try_finally;
228-
use slice::{OwnedVector, MutableVector, ImmutableVector, OwnedCloneableVector};
229-
use slice;
228+
use slice::{Vector, OwnedVector, MutableVector, ImmutableVector, OwnedCloneableVector};
229+
use vec::Vec;
230230

231231
// Reexports
232232
pub use self::stdio::stdin;
@@ -486,9 +486,9 @@ pub trait Reader {
486486
/// or EOF. If `Ok(())` is returned, then all of the requested bytes were
487487
/// pushed on to the vector, otherwise the amount `len` bytes couldn't be
488488
/// read (an error was encountered), and the error is returned.
489-
fn push_exact(&mut self, buf: &mut ~[u8], len: uint) -> IoResult<()> {
489+
fn push_exact(&mut self, buf: &mut Vec<u8>, len: uint) -> IoResult<()> {
490490
struct State<'a> {
491-
buf: &'a mut ~[u8],
491+
buf: &'a mut Vec<u8>,
492492
total_read: uint
493493
}
494494

@@ -526,8 +526,8 @@ pub trait Reader {
526526
/// have already been consumed from the underlying reader, and they are lost
527527
/// (not returned as part of the error). If this is unacceptable, then it is
528528
/// recommended to use the `push_exact` or `read` methods.
529-
fn read_exact(&mut self, len: uint) -> IoResult<~[u8]> {
530-
let mut buf = slice::with_capacity(len);
529+
fn read_exact(&mut self, len: uint) -> IoResult<Vec<u8>> {
530+
let mut buf = Vec::with_capacity(len);
531531
match self.push_exact(&mut buf, len) {
532532
Ok(()) => Ok(buf),
533533
Err(e) => Err(e),
@@ -542,8 +542,8 @@ pub trait Reader {
542542
/// discarded when an error is returned.
543543
///
544544
/// When EOF is encountered, all bytes read up to that point are returned.
545-
fn read_to_end(&mut self) -> IoResult<~[u8]> {
546-
let mut buf = slice::with_capacity(DEFAULT_BUF_SIZE);
545+
fn read_to_end(&mut self) -> IoResult<Vec<u8>> {
546+
let mut buf = Vec::with_capacity(DEFAULT_BUF_SIZE);
547547
loop {
548548
match self.push_exact(&mut buf, DEFAULT_BUF_SIZE) {
549549
Ok(()) => {}
@@ -564,8 +564,8 @@ pub trait Reader {
564564
/// UTF-8 bytes.
565565
fn read_to_str(&mut self) -> IoResult<~str> {
566566
self.read_to_end().and_then(|s| {
567-
match str::from_utf8_owned(s) {
568-
Some(s) => Ok(s),
567+
match str::from_utf8(s.as_slice()) {
568+
Some(s) => Ok(s.to_owned()),
569569
None => Err(standard_error(InvalidInput)),
570570
}
571571
})
@@ -1198,8 +1198,8 @@ pub trait Buffer: Reader {
11981198
/// valid UTF-8 sequence of bytes.
11991199
fn read_line(&mut self) -> IoResult<~str> {
12001200
self.read_until('\n' as u8).and_then(|line|
1201-
match str::from_utf8_owned(line) {
1202-
Some(s) => Ok(s),
1201+
match str::from_utf8(line.as_slice()) {
1202+
Some(s) => Ok(s.to_owned()),
12031203
None => Err(standard_error(InvalidInput)),
12041204
}
12051205
)
@@ -1230,8 +1230,8 @@ pub trait Buffer: Reader {
12301230
/// have been read, otherwise the pending byte buffer is returned. This
12311231
/// is the reason that the byte buffer returned may not always contain the
12321232
/// delimiter.
1233-
fn read_until(&mut self, byte: u8) -> IoResult<~[u8]> {
1234-
let mut res = ~[];
1233+
fn read_until(&mut self, byte: u8) -> IoResult<Vec<u8>> {
1234+
let mut res = Vec::new();
12351235

12361236
let mut used;
12371237
loop {

0 commit comments

Comments
 (0)