about summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-09-25 11:44:23 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-09-25 11:44:23 -0700
commitac822a52be47579ffa59d5ca3e125680a79545d0 (patch)
tree5ef280226f9e0f3dcdf3dbc2c766743f4cbcec35 /src/libcore
parentdbc00ced3a09a7a8c32d69a89b9e073252cca39d (diff)
rustc: Stop using shape code for logging
Diffstat (limited to 'src/libcore')
-rw-r--r--src/libcore/logging.rs20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/libcore/logging.rs b/src/libcore/logging.rs
index 6086b2edd7e..a9f63b57fa5 100644
--- a/src/libcore/logging.rs
+++ b/src/libcore/logging.rs
@@ -4,13 +4,16 @@
 #[forbid(deprecated_mode)];
 #[forbid(deprecated_pattern)];
 
-export console_on, console_off;
+use cast::transmute;
+
+export console_on, console_off, log_type;
 
 #[nolink]
 extern mod rustrt {
     #[legacy_exports];
     fn rust_log_console_on();
     fn rust_log_console_off();
+    fn rust_log_str(level: u32, string: *libc::c_char, size: libc::size_t);
 }
 
 /// Turns on logging to stdout globally
@@ -27,4 +30,17 @@ fn console_on() {
  */
 fn console_off() {
     rustrt::rust_log_console_off();
-}
\ No newline at end of file
+}
+
+#[cfg(notest)]
+#[lang="log_type"]
+pub fn log_type<T>(level: u32, object: &T) {
+    let bytes = do io::with_bytes_writer() |writer| {
+        repr::write_repr(writer, object);
+    };
+    unsafe {
+        let len = bytes.len() as libc::size_t;
+        rustrt::rust_log_str(level, transmute(vec::raw::to_ptr(bytes)), len);
+    }
+}
+