Skip to content

Commit 3a9228b

Browse files
committed
auto merge of #14811 : forticulous/rust/refcell-show, r=alexcrichton
Show impl for RefCell and friends
2 parents 8b87c3a + a8f581f commit 3a9228b

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/libcore/cell.rs

+17
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,7 @@ impl<'b, T> DerefMut<T> for RefMut<'b, T> {
385385
#[cfg(test)]
386386
mod test {
387387
use super::*;
388+
use mem::drop;
388389

389390
#[test]
390391
fn smoketest_cell() {
@@ -412,6 +413,22 @@ mod test {
412413
assert!(format!("{}", x).as_slice().contains(x.get()));
413414
}
414415

416+
#[test]
417+
fn ref_and_refmut_have_sensible_show() {
418+
use str::StrSlice;
419+
use realstd::str::Str;
420+
421+
let refcell = RefCell::new("foo");
422+
423+
let refcell_refmut = refcell.borrow_mut();
424+
assert!(format!("{}", refcell_refmut).as_slice().contains("foo"));
425+
drop(refcell_refmut);
426+
427+
let refcell_ref = refcell.borrow();
428+
assert!(format!("{}", refcell_ref).as_slice().contains("foo"));
429+
drop(refcell_ref);
430+
}
431+
415432
#[test]
416433
fn double_imm_borrow() {
417434
let x = RefCell::new(0);

src/libcore/fmt/mod.rs

+14-1
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@
1313
#![allow(unused_variable)]
1414

1515
use any;
16-
use cell::Cell;
16+
use cell::{Cell, Ref, RefMut};
1717
use char::Char;
1818
use collections::Collection;
1919
use iter::{Iterator, range};
2020
use kinds::Copy;
2121
use mem;
2222
use option::{Option, Some, None};
23+
use ops::Deref;
2324
use result::{Ok, Err};
2425
use result;
2526
use slice::{Vector, ImmutableVector};
@@ -840,5 +841,17 @@ impl<T: Copy + Show> Show for Cell<T> {
840841
}
841842
}
842843

844+
impl<'b, T: Show> Show for Ref<'b, T> {
845+
fn fmt(&self, f: &mut Formatter) -> Result {
846+
(**self).fmt(f)
847+
}
848+
}
849+
850+
impl<'b, T: Show> Show for RefMut<'b, T> {
851+
fn fmt(&self, f: &mut Formatter) -> Result {
852+
(*(self.deref())).fmt(f)
853+
}
854+
}
855+
843856
// If you expected tests to be here, look instead at the run-pass/ifmt.rs test,
844857
// it's a lot easier than creating all of the rt::Piece structures here.

0 commit comments

Comments
 (0)