about summary refs log tree commit diff
path: root/src/libsyntax/print
diff options
context:
space:
mode:
authorAriel Ben-Yehuda <ariel.byd@gmail.com>2014-10-25 20:33:54 +0300
committerAriel Ben-Yehuda <ariel.byd@gmail.com>2014-11-03 22:07:43 +0200
commitfbb90c3458e1db30fc62c96195c9e71ba2111aa4 (patch)
tree7e1faee56bce0a40c502b987cd1759be6b008777 /src/libsyntax/print
parent2790505c19b158a5494139dba084b6af82810b96 (diff)
downloadrust-fbb90c3458e1db30fc62c96195c9e71ba2111aa4.tar.gz
rust-fbb90c3458e1db30fc62c96195c9e71ba2111aa4.zip
Clean-up transmutes in libsyntax
Diffstat (limited to 'src/libsyntax/print')
-rw-r--r--src/libsyntax/print/pprust.rs13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index 386fd8ae5a6..4cfc95d4c3f 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -169,17 +169,14 @@ pub fn to_string(f: |&mut State| -> IoResult<()>) -> String {
     let mut s = rust_printer(box MemWriter::new());
     f(&mut s).unwrap();
     eof(&mut s.s).unwrap();
-    unsafe {
+    let wr = unsafe {
         // FIXME(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.
-        let obj: TraitObject = mem::transmute_copy(&s.s.out);
-        let wr: Box<MemWriter> = mem::transmute(obj.data);
-        let result =
-            String::from_utf8(wr.get_ref().as_slice().to_vec()).unwrap();
-        mem::forget(wr);
-        result.to_string()
-    }
+        let obj: &TraitObject = mem::transmute(&s.s.out);
+        mem::transmute::<*mut (), &MemWriter>(obj.data)
+    };
+    String::from_utf8(wr.get_ref().to_vec()).unwrap()
 }
 
 pub fn binop_to_string(op: BinOpToken) -> &'static str {