diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2013-12-27 18:07:12 -0800 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2014-01-03 14:01:59 -0800 |
| commit | ada9150abf26912478aa6f613602f8ac7ba135e5 (patch) | |
| tree | b190b9886e3d14fef2eea1c4b928bb7723eda4c8 /src/libsyntax | |
| parent | 39f0270544af19bf51b0088c93fe5cf58a8eccbe (diff) | |
| download | rust-ada9150abf26912478aa6f613602f8ac7ba135e5.tar.gz rust-ada9150abf26912478aa6f613602f8ac7ba135e5.zip | |
libsyntax: Correctly de-`@mut` the pretty printer writer
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 32 |
2 files changed, 15 insertions, 19 deletions
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 4df29dc21b1..917b8d2e391 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -1319,7 +1319,7 @@ mod test { } fn fake_print_crate(crate: &ast::Crate) { - let out = @mut std::io::stderr() as @mut std::io::Writer; + let mut out = ~std::io::stderr() as ~std::io::Writer; let s = pprust::rust_printer(out, get_ident_interner()); pprust::print_crate_(s, crate); } diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 36a77dfdd89..45e9641c71b 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -122,7 +122,7 @@ pub fn print_crate(cm: @CodeMap, span_diagnostic: @diagnostic::SpanHandler, crate: &ast::Crate, filename: @str, - input: @mut io::Reader, + input: &mut io::Reader, out: ~io::Writer, ann: @pp_ann, is_expanded: bool) { @@ -211,13 +211,8 @@ pub fn fun_to_str(decl: &ast::fn_decl, purity: ast::purity, name: ast::Ident, end(&mut s); // Close the head box end(&mut s); // Close the outer box eof(&mut s.s); - - // XXX(pcwalton): Need checked downcasts. unsafe { - let (_, wr): (uint, ~MemWriter) = cast::transmute(s.s.out); - let result = str::from_utf8_owned(wr.inner_ref().to_owned()); - cast::forget(wr); - result + get_mem_writer(&mut s.s.out) } } @@ -230,13 +225,8 @@ pub fn block_to_str(blk: &ast::Block, intr: @ident_interner) -> ~str { ibox(&mut s, 0u); print_block(&mut s, blk); eof(&mut s.s); - - // XXX(pcwalton): Need checked downcasts. unsafe { - let (_, wr): (uint, ~MemWriter) = cast::transmute(s.s.out); - let result = str::from_utf8_owned(wr.inner_ref().to_owned()); - cast::forget(wr); - result + get_mem_writer(&mut s.s.out) } } @@ -2318,17 +2308,23 @@ pub fn print_string(s: &mut ps, st: &str, style: ast::StrStyle) { word(&mut s.s, st); } +// XXX(pcwalton): A nasty function to extract the string from an `io::Writer` +// that we "know" to be a `MemWriter` that works around the lack of checked +// downcasts. +unsafe fn get_mem_writer(writer: &mut ~io::Writer) -> ~str { + let (_, wr): (uint, ~MemWriter) = cast::transmute_copy(writer); + let result = str::from_utf8_owned(wr.inner_ref().to_owned()); + cast::forget(wr); + result +} + pub fn to_str<T>(t: &T, f: |&mut ps, &T|, intr: @ident_interner) -> ~str { let wr = ~MemWriter::new(); let mut s = rust_printer(wr as ~io::Writer, intr); f(&mut s, t); eof(&mut s.s); - // XXX(pcwalton): Need checked downcasts. unsafe { - let (_, wr): (uint, ~MemWriter) = cast::transmute(s.s.out); - let result = str::from_utf8_owned(wr.inner_ref().to_owned()); - cast::forget(wr); - result + get_mem_writer(&mut s.s.out) } } |
