about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-09-12 18:59:14 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-09-12 18:59:14 -0700
commitdf712ab3d540affe0442763dc1841030bcab7698 (patch)
tree2813ad0ec1c32273036c7b3e5dd7393897721ac4
parent45f5f8ec45da02700d77569b0ea470ae0fb430b0 (diff)
libcore: Make %? use the visitor, not shape glue
-rw-r--r--src/libcore/sys.rs11
1 files changed, 4 insertions, 7 deletions
diff --git a/src/libcore/sys.rs b/src/libcore/sys.rs
index cff945ad069..1adadc5eba6 100644
--- a/src/libcore/sys.rs
+++ b/src/libcore/sys.rs
@@ -32,11 +32,6 @@ struct Closure {
     env: *(),
 }
 
-#[abi = "cdecl"]
-extern mod rustrt {
-    pure fn shape_log_str(t: *sys::TypeDesc, data: *()) -> ~str;
-}
-
 #[abi = "rust-intrinsic"]
 extern mod rusti {
     fn get_tydesc<T>() -> *();
@@ -104,8 +99,10 @@ pure fn refcount<T>(+t: @T) -> uint {
 
 pure fn log_str<T>(t: T) -> ~str {
     unsafe {
-        let data_ptr: *() = unsafe::reinterpret_cast(&ptr::addr_of(t));
-        rustrt::shape_log_str(get_type_desc::<T>(), data_ptr)
+        let buffer = io::mem_buffer();
+        let writer = io::mem_buffer_writer(buffer);
+        repr::write_repr(writer, &t);
+        return io::mem_buffer_str(buffer);  // XXX: Extra malloc and copy.
     }
 }