Skip to content

Commit e4779b5

Browse files
committed
auto merge of #13165 : sfackler/rust/io-vec, r=alexcrichton
`Reader`, `Writer`, `MemReader`, `MemWriter`, and `MultiWriter` now work with `Vec<u8>` instead of `~[u8]`. This does introduce some extra copies since `from_utf8_owned` isn't usable anymore, but I think that can't be helped until `~str`'s representation changes.
2 parents 31e8f24 + fcf9b30 commit e4779b5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+187
-177
lines changed

src/compiletest/procsrv.rs

+2-2
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

+3-3
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/doc/complement-cheatsheet.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ Use the [`lines`](http://static.rust-lang.org/doc/master/std/io/trait.Buffer.htm
9696
use std::io::BufferedReader;
9797
# use std::io::MemReader;
9898
99-
# let reader = MemReader::new(~[]);
99+
# let reader = MemReader::new(vec!());
100100
101101
let mut reader = BufferedReader::new(reader);
102102
for line in reader.lines() {

src/librand/reader.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use Rng;
2323
/// use rand::{reader, Rng};
2424
/// use std::io::MemReader;
2525
///
26-
/// let mut rng = reader::ReaderRng::new(MemReader::new(~[1,2,3,4,5,6,7,8]));
26+
/// let mut rng = reader::ReaderRng::new(MemReader::new(vec!(1,2,3,4,5,6,7,8)));
2727
/// println!("{:x}", rng.gen::<uint>());
2828
/// ```
2929
pub struct ReaderRng<R> {
@@ -80,7 +80,7 @@ mod test {
8080
// transmute from the target to avoid endianness concerns.
8181
let v = ~[1u64, 2u64, 3u64];
8282
let bytes: ~[u8] = unsafe {cast::transmute(v)};
83-
let mut rng = ReaderRng::new(MemReader::new(bytes));
83+
let mut rng = ReaderRng::new(MemReader::new(bytes.move_iter().collect()));
8484

8585
assert_eq!(rng.next_u64(), 1);
8686
assert_eq!(rng.next_u64(), 2);
@@ -91,7 +91,7 @@ mod test {
9191
// transmute from the target to avoid endianness concerns.
9292
let v = ~[1u32, 2u32, 3u32];
9393
let bytes: ~[u8] = unsafe {cast::transmute(v)};
94-
let mut rng = ReaderRng::new(MemReader::new(bytes));
94+
let mut rng = ReaderRng::new(MemReader::new(bytes.move_iter().collect()));
9595

9696
assert_eq!(rng.next_u32(), 1);
9797
assert_eq!(rng.next_u32(), 2);
@@ -102,7 +102,7 @@ mod test {
102102
let v = [1u8, 2, 3, 4, 5, 6, 7, 8];
103103
let mut w = [0u8, .. 8];
104104

105-
let mut rng = ReaderRng::new(MemReader::new(v.to_owned()));
105+
let mut rng = ReaderRng::new(MemReader::new(Vec::from_slice(v)));
106106
rng.fill_bytes(w);
107107

108108
assert!(v == w);
@@ -111,7 +111,7 @@ mod test {
111111
#[test]
112112
#[should_fail]
113113
fn test_reader_rng_insufficient_bytes() {
114-
let mut rng = ReaderRng::new(MemReader::new(~[]));
114+
let mut rng = ReaderRng::new(MemReader::new(vec!()));
115115
let mut v = [0u8, .. 3];
116116
rng.fill_bytes(v);
117117
}

src/librustc/back/archive.rs

+5-3
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

+8-3
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,9 @@ pub mod write {
350350
if !prog.status.success() {
351351
sess.err(format!("linking with `{}` failed: {}", cc, prog.status));
352352
sess.note(format!("{} arguments: '{}'", cc, args.connect("' '")));
353-
sess.note(str::from_utf8_owned(prog.error + prog.output).unwrap());
353+
let mut note = prog.error.clone();
354+
note.push_all(prog.output.as_slice());
355+
sess.note(str::from_utf8(note.as_slice()).unwrap().to_owned());
354356
sess.abort_if_errors();
355357
}
356358
},
@@ -942,7 +944,8 @@ fn link_rlib<'a>(sess: &'a Session,
942944
let bc = obj_filename.with_extension("bc");
943945
let bc_deflated = obj_filename.with_extension("bc.deflate");
944946
match fs::File::open(&bc).read_to_end().and_then(|data| {
945-
fs::File::create(&bc_deflated).write(flate::deflate_bytes(data).as_slice())
947+
fs::File::create(&bc_deflated)
948+
.write(flate::deflate_bytes(data.as_slice()).as_slice())
946949
}) {
947950
Ok(()) => {}
948951
Err(e) => {
@@ -1038,7 +1041,9 @@ fn link_natively(sess: &Session, dylib: bool, obj_filename: &Path,
10381041
if !prog.status.success() {
10391042
sess.err(format!("linking with `{}` failed: {}", cc_prog, prog.status));
10401043
sess.note(format!("{} arguments: '{}'", cc_prog, cc_args.connect("' '")));
1041-
sess.note(str::from_utf8_owned(prog.error + prog.output).unwrap());
1044+
let mut output = prog.error.clone();
1045+
output.push_all(prog.output.as_slice());
1046+
sess.note(str::from_utf8(output.as_slice()).unwrap().to_owned());
10421047
sess.abort_if_errors();
10431048
}
10441049
},

src/librustc/driver/driver.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,7 @@ pub fn pretty_print_input(sess: Session,
681681
};
682682

683683
let src_name = source_name(input);
684-
let src = sess.codemap().get_filemap(src_name).src.as_bytes().to_owned();
684+
let src = Vec::from_slice(sess.codemap().get_filemap(src_name).src.as_bytes());
685685
let mut rdr = MemReader::new(src);
686686

687687
match ppm {

src/librustc/lib.rs

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

src/librustc/middle/liveness.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -741,7 +741,7 @@ impl<'a> Liveness<'a> {
741741
self.write_vars(wr, ln, |idx| self.users.get(idx).writer);
742742
write!(wr, " precedes {}]", self.successors.get(ln.get()).to_str());
743743
}
744-
str::from_utf8_owned(wr.unwrap()).unwrap()
744+
str::from_utf8(wr.unwrap().as_slice()).unwrap().to_owned()
745745
}
746746

747747
fn init_empty(&mut self, ln: LiveNode, succ_ln: LiveNode) {

src/librustdoc/html/highlight.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub fn highlight(src: &str, class: Option<&str>) -> ~str {
3434
lexer::new_string_reader(&sess.span_diagnostic, fm),
3535
class,
3636
&mut out).unwrap();
37-
str::from_utf8_lossy(out.unwrap()).into_owned()
37+
str::from_utf8_lossy(out.unwrap().as_slice()).into_owned()
3838
}
3939
4040
/// Exhausts the `lexer` writing the output into `out`.

src/librustdoc/html/render.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ pub fn run(mut krate: clean::Crate, dst: Path) -> io::IoResult<()> {
312312
}
313313
try!(write!(&mut w, "\\};"));
314314

315-
str::from_utf8_owned(w.unwrap()).unwrap()
315+
str::from_utf8(w.unwrap().as_slice()).unwrap().to_owned()
316316
};
317317

318318
// Write out the shared files. Note that these are shared among all rustdoc
@@ -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/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ fn json_output(krate: clean::Crate, res: Vec<plugins::PluginJson> ,
389389
let mut encoder = json::Encoder::new(&mut w as &mut io::Writer);
390390
krate.encode(&mut encoder).unwrap();
391391
}
392-
str::from_utf8_owned(w.unwrap()).unwrap()
392+
str::from_utf8(w.unwrap().as_slice()).unwrap().to_owned()
393393
};
394394
let crate_json = match json::from_str(crate_json_str) {
395395
Ok(j) => j,

src/librustdoc/markdown.rs

+1-1
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

+2-1
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

+11-11
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ impl<'a> Encoder<'a> {
309309
}
310310

311311
/// Encode the specified struct into a json [u8]
312-
pub fn buffer_encode<T:Encodable<Encoder<'a>, io::IoError>>(to_encode_object: &T) -> ~[u8] {
312+
pub fn buffer_encode<T:Encodable<Encoder<'a>, io::IoError>>(to_encode_object: &T) -> Vec<u8> {
313313
//Serialize the object in a string using a writer
314314
let mut m = MemWriter::new();
315315
{
@@ -322,8 +322,8 @@ impl<'a> Encoder<'a> {
322322

323323
/// Encode the specified struct into a json str
324324
pub fn str_encode<T:Encodable<Encoder<'a>, io::IoError>>(to_encode_object: &T) -> ~str {
325-
let buff:~[u8] = Encoder::buffer_encode(to_encode_object);
326-
str::from_utf8_owned(buff).unwrap()
325+
let buff = Encoder::buffer_encode(to_encode_object);
326+
str::from_utf8(buff.as_slice()).unwrap().to_owned()
327327
}
328328
}
329329

@@ -484,7 +484,7 @@ impl<'a> ::Encoder<io::IoError> for Encoder<'a> {
484484
let mut check_encoder = Encoder::new(&mut buf);
485485
try!(f(&mut check_encoder));
486486
let buf = buf.unwrap();
487-
let out = from_utf8(buf).unwrap();
487+
let out = from_utf8(buf.as_slice()).unwrap();
488488
let needs_wrapping = out.char_at(0) != '"' &&
489489
out.char_at_reverse(out.len()) != '"';
490490
if needs_wrapping { try!(write!(self.wr, "\"")); }
@@ -715,7 +715,7 @@ impl<'a> ::Encoder<io::IoError> for PrettyEncoder<'a> {
715715
let mut check_encoder = PrettyEncoder::new(&mut buf);
716716
try!(f(&mut check_encoder));
717717
let buf = buf.unwrap();
718-
let out = from_utf8(buf).unwrap();
718+
let out = from_utf8(buf.as_slice()).unwrap();
719719
let needs_wrapping = out.char_at(0) != '"' &&
720720
out.char_at_reverse(out.len()) != '"';
721721
if needs_wrapping { try!(write!(self.wr, "\"")); }
@@ -763,7 +763,7 @@ impl Json {
763763
pub fn to_pretty_str(&self) -> ~str {
764764
let mut s = MemWriter::new();
765765
self.to_pretty_writer(&mut s as &mut io::Writer).unwrap();
766-
str::from_utf8_owned(s.unwrap()).unwrap()
766+
str::from_utf8(s.unwrap().as_slice()).unwrap().to_owned()
767767
}
768768

769769
/// If the Json value is an Object, returns the value associated with the provided key.
@@ -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());
@@ -1927,7 +1927,7 @@ mod tests {
19271927
19281928
let mut m = MemWriter::new();
19291929
f(&mut m as &mut io::Writer);
1930-
str::from_utf8_owned(m.unwrap()).unwrap()
1930+
str::from_utf8(m.unwrap().as_slice()).unwrap().to_owned()
19311931
}
19321932
19331933
#[test]
@@ -2528,7 +2528,7 @@ mod tests {
25282528
hm.encode(&mut encoder).unwrap();
25292529
}
25302530
let bytes = mem_buf.unwrap();
2531-
let json_str = from_utf8(bytes).unwrap();
2531+
let json_str = from_utf8(bytes.as_slice()).unwrap();
25322532
match from_str(json_str) {
25332533
Err(_) => fail!("Unable to parse json_str: {:?}", json_str),
25342534
_ => {} // it parsed and we are good to go
@@ -2548,7 +2548,7 @@ mod tests {
25482548
hm.encode(&mut encoder).unwrap();
25492549
}
25502550
let bytes = mem_buf.unwrap();
2551-
let json_str = from_utf8(bytes).unwrap();
2551+
let json_str = from_utf8(bytes.as_slice()).unwrap();
25522552
match from_str(json_str) {
25532553
Err(_) => fail!("Unable to parse json_str: {:?}", json_str),
25542554
_ => {} // it parsed and we are good to go

src/libstd/fmt/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ use repr;
490490
use result::{Ok, Err};
491491
use str::StrSlice;
492492
use str;
493-
use slice::ImmutableVector;
493+
use slice::{Vector, ImmutableVector};
494494
use slice;
495495

496496
pub use self::num::radix;
@@ -795,7 +795,7 @@ pub fn format(args: &Arguments) -> ~str {
795795
pub unsafe fn format_unsafe(fmt: &[rt::Piece], args: &[Argument]) -> ~str {
796796
let mut output = MemWriter::new();
797797
write_unsafe(&mut output as &mut io::Writer, fmt, args).unwrap();
798-
return str::from_utf8_owned(output.unwrap()).unwrap();
798+
return str::from_utf8(output.unwrap().as_slice()).unwrap().to_owned();
799799
}
800800

801801
impl<'a> Formatter<'a> {

src/libstd/io/buffered.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ mod test {
405405

406406
#[test]
407407
fn test_buffered_reader() {
408-
let inner = MemReader::new(~[0, 1, 2, 3, 4]);
408+
let inner = MemReader::new(vec!(0, 1, 2, 3, 4));
409409
let mut reader = BufferedReader::with_capacity(2, inner);
410410

411411
let mut buf = [0, 0, 0];
@@ -502,12 +502,12 @@ mod test {
502502

503503
#[test]
504504
fn test_read_until() {
505-
let inner = MemReader::new(~[0, 1, 2, 1, 0]);
505+
let inner = MemReader::new(vec!(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

@@ -533,7 +533,7 @@ mod test {
533533

534534
#[test]
535535
fn test_read_line() {
536-
let in_buf = MemReader::new(bytes!("a\nb\nc").to_owned());
536+
let in_buf = MemReader::new(Vec::from_slice(bytes!("a\nb\nc")));
537537
let mut reader = BufferedReader::with_capacity(2, in_buf);
538538
assert_eq!(reader.read_line(), Ok(~"a\n"));
539539
assert_eq!(reader.read_line(), Ok(~"b\n"));
@@ -543,7 +543,7 @@ mod test {
543543
544544
#[test]
545545
fn test_lines() {
546-
let in_buf = MemReader::new(bytes!("a\nb\nc").to_owned());
546+
let in_buf = MemReader::new(Vec::from_slice(bytes!("a\nb\nc")));
547547
let mut reader = BufferedReader::with_capacity(2, in_buf);
548548
let mut it = reader.lines();
549549
assert_eq!(it.next(), Some(Ok(~"a\n")));

0 commit comments

Comments
 (0)