about summary refs log tree commit diff
diff options
context:
space:
mode:
authorfort <e@mail.com>2014-06-09 23:09:53 -0700
committerfort <e@mail.com>2014-06-10 19:24:48 -0700
commita8f581fad1e08ae566b10279c5ee60cb77b3672d (patch)
treefa2d079713bb6d3937ee490efc4d0fce5af90ee7
parent907d96187641d8a018af2b73239723c66b011f71 (diff)
Show impl for Ref & RefMut
-rw-r--r--src/libcore/cell.rs17
-rw-r--r--src/libcore/fmt/mod.rs15
2 files changed, 31 insertions, 1 deletions
diff --git a/src/libcore/cell.rs b/src/libcore/cell.rs
index eef133181e1..7ab2ae307d4 100644
--- a/src/libcore/cell.rs
+++ b/src/libcore/cell.rs
@@ -385,6 +385,7 @@ impl<'b, T> DerefMut<T> for RefMut<'b, T> {
 #[cfg(test)]
 mod test {
     use super::*;
+    use mem::drop;
 
     #[test]
     fn smoketest_cell() {
@@ -413,6 +414,22 @@ mod test {
     }
 
     #[test]
+    fn ref_and_refmut_have_sensible_show() {
+        use str::StrSlice;
+        use realstd::str::Str;
+
+        let refcell = RefCell::new("foo");
+
+        let refcell_refmut = refcell.borrow_mut();
+        assert!(format!("{}", refcell_refmut).as_slice().contains("foo"));
+        drop(refcell_refmut);
+
+        let refcell_ref = refcell.borrow();
+        assert!(format!("{}", refcell_ref).as_slice().contains("foo"));
+        drop(refcell_ref);
+    }
+
+    #[test]
     fn double_imm_borrow() {
         let x = RefCell::new(0);
         let _b1 = x.borrow();
diff --git a/src/libcore/fmt/mod.rs b/src/libcore/fmt/mod.rs
index 37ef325d937..e70fd837861 100644
--- a/src/libcore/fmt/mod.rs
+++ b/src/libcore/fmt/mod.rs
@@ -13,13 +13,14 @@
 #![allow(unused_variable)]
 
 use any;
-use cell::Cell;
+use cell::{Cell, Ref, RefMut};
 use char::Char;
 use collections::Collection;
 use iter::{Iterator, range};
 use kinds::Copy;
 use mem;
 use option::{Option, Some, None};
+use ops::Deref;
 use result::{Ok, Err};
 use result;
 use slice::{Vector, ImmutableVector};
@@ -849,5 +850,17 @@ impl<T: Copy + Show> Show for Cell<T> {
     }
 }
 
+impl<'b, T: Show> Show for Ref<'b, T> {
+    fn fmt(&self, f: &mut Formatter) -> Result {
+        (**self).fmt(f)
+    }
+}
+
+impl<'b, T: Show> Show for RefMut<'b, T> {
+    fn fmt(&self, f: &mut Formatter) -> Result {
+        (*(self.deref())).fmt(f)
+    }
+}
+
 // If you expected tests to be here, look instead at the run-pass/ifmt.rs test,
 // it's a lot easier than creating all of the rt::Piece structures here.