diff options
| author | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2015-04-16 19:54:05 -0700 |
|---|---|---|
| committer | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2015-04-21 10:08:27 -0700 |
| commit | e3dd68d0a4b519db7dfea655a2bec4ea4aadb163 (patch) | |
| tree | cc50fd32eda391e8ac4ee91e9d58bf71b71ea811 /src/libsyntax | |
| parent | cfb9d286ea0169a69580c457e0994e02023c0c1a (diff) | |
| download | rust-e3dd68d0a4b519db7dfea655a2bec4ea4aadb163.tar.gz rust-e3dd68d0a4b519db7dfea655a2bec4ea4aadb163.zip | |
syntax: Remove use of TraitObject in pretty printer
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 1a5c295cdd6..3ccc8f2619f 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -28,7 +28,7 @@ use print::pp::Breaks::{Consistent, Inconsistent}; use ptr::P; use std_inject; -use std::{ascii, mem}; +use std::ascii; use std::io::{self, Write, Read}; use std::iter; @@ -187,18 +187,13 @@ impl<'a> State<'a> { pub fn to_string<F>(f: F) -> String where F: FnOnce(&mut State) -> io::Result<()>, { - use std::raw::TraitObject; - let mut s = rust_printer(Box::new(Vec::new())); - f(&mut s).unwrap(); - eof(&mut s.s).unwrap(); - let wr = unsafe { - // FIXME(pcwalton): A nasty function to extract the string from an `Write` - // that we "know" to be a `Vec<u8>` that works around the lack of checked - // downcasts. - let obj: &TraitObject = mem::transmute(&s.s.out); - mem::transmute::<*mut (), &Vec<u8>>(obj.data) - }; - String::from_utf8(wr.clone()).unwrap() + let mut wr = Vec::new(); + { + let mut printer = rust_printer(Box::new(&mut wr)); + f(&mut printer).unwrap(); + eof(&mut printer.s).unwrap(); + } + String::from_utf8(wr).unwrap() } pub fn binop_to_string(op: BinOpToken) -> &'static str { |
