diff options
| author | bors <bors@rust-lang.org> | 2013-08-31 15:15:40 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-08-31 15:15:40 -0700 |
| commit | 04fac7f90d825c218b8ae0e76c1b859f513b009f (patch) | |
| tree | 7c26282069d61e6544f1305948c560ef968aa5c0 /src/libstd | |
| parent | c8db9e2638924edcbc00e31dddaf64cd2c1b560f (diff) | |
| parent | 17f93826724c6fcd9d0b07af38a9cdfcbb9f288f (diff) | |
| download | rust-04fac7f90d825c218b8ae0e76c1b859f513b009f.tar.gz rust-04fac7f90d825c218b8ae0e76c1b859f513b009f.zip | |
auto merge of #8899 : thestinger/rust/repr, r=huonw
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/reflect.rs | 13 | ||||
| -rw-r--r-- | src/libstd/repr.rs | 29 | ||||
| -rw-r--r-- | src/libstd/unstable/intrinsics.rs | 4 | ||||
| -rw-r--r-- | src/libstd/vec.rs | 6 |
4 files changed, 31 insertions, 21 deletions
diff --git a/src/libstd/reflect.rs b/src/libstd/reflect.rs index 724877db00a..7b352e7806e 100644 --- a/src/libstd/reflect.rs +++ b/src/libstd/reflect.rs @@ -331,17 +331,15 @@ impl<V:TyVisitor + MovePtr> TyVisitor for MovePtrAdaptor<V> { true } - fn visit_enter_class(&mut self, n_fields: uint, sz: uint, align: uint) - -> bool { + fn visit_enter_class(&mut self, name: &str, n_fields: uint, sz: uint, align: uint) -> bool { self.align(align); - if ! self.inner.visit_enter_class(n_fields, sz, align) { + if ! self.inner.visit_enter_class(name, n_fields, sz, align) { return false; } true } - fn visit_class_field(&mut self, i: uint, name: &str, - mtbl: uint, inner: *TyDesc) -> bool { + fn visit_class_field(&mut self, i: uint, name: &str, mtbl: uint, inner: *TyDesc) -> bool { unsafe { self.align((*inner).align); } if ! self.inner.visit_class_field(i, name, mtbl, inner) { return false; @@ -350,9 +348,8 @@ impl<V:TyVisitor + MovePtr> TyVisitor for MovePtrAdaptor<V> { true } - fn visit_leave_class(&mut self, n_fields: uint, sz: uint, align: uint) - -> bool { - if ! self.inner.visit_leave_class(n_fields, sz, align) { + fn visit_leave_class(&mut self, name: &str, n_fields: uint, sz: uint, align: uint) -> bool { + if ! self.inner.visit_leave_class(name, n_fields, sz, align) { return false; } true diff --git a/src/libstd/repr.rs b/src/libstd/repr.rs index 15f4c24060c..3e2c5773acc 100644 --- a/src/libstd/repr.rs +++ b/src/libstd/repr.rs @@ -346,7 +346,6 @@ impl<'self> TyVisitor for ReprVisitor<'self> { // Type no longer exists, vestigial function. fn visit_vec(&mut self, _mtbl: uint, _inner: *TyDesc) -> bool { fail!(); } - fn visit_unboxed_vec(&mut self, mtbl: uint, inner: *TyDesc) -> bool { do self.get::<raw::Vec<()>> |this, b| { this.write_unboxed_vec_repr(mtbl, b, inner); @@ -413,11 +412,15 @@ impl<'self> TyVisitor for ReprVisitor<'self> { true } - fn visit_enter_class(&mut self, _n_fields: uint, + fn visit_enter_class(&mut self, name: &str, n_fields: uint, _sz: uint, _align: uint) -> bool { - self.writer.write(['{' as u8]); + self.writer.write(name.as_bytes()); + if n_fields != 0 { + self.writer.write(['{' as u8]); + } true } + fn visit_class_field(&mut self, i: uint, name: &str, mtbl: uint, inner: *TyDesc) -> bool { if i != 0 { @@ -429,9 +432,12 @@ impl<'self> TyVisitor for ReprVisitor<'self> { self.visit_inner(inner); true } - fn visit_leave_class(&mut self, _n_fields: uint, + + fn visit_leave_class(&mut self, _name: &str, n_fields: uint, _sz: uint, _align: uint) -> bool { - self.writer.write(['}' as u8]); + if n_fields != 0 { + self.writer.write(['}' as u8]); + } true } @@ -440,6 +446,7 @@ impl<'self> TyVisitor for ReprVisitor<'self> { self.writer.write(['(' as u8]); true } + fn visit_tup_field(&mut self, i: uint, inner: *TyDesc) -> bool { if i != 0 { self.writer.write(", ".as_bytes()); @@ -447,6 +454,7 @@ impl<'self> TyVisitor for ReprVisitor<'self> { self.visit_inner(inner); true } + fn visit_leave_tup(&mut self, _n_fields: uint, _sz: uint, _align: uint) -> bool { if _n_fields == 1 { @@ -544,12 +552,15 @@ impl<'self> TyVisitor for ReprVisitor<'self> { fn visit_enter_fn(&mut self, _purity: uint, _proto: uint, _n_inputs: uint, _retstyle: uint) -> bool { true } + fn visit_fn_input(&mut self, _i: uint, _mode: uint, _inner: *TyDesc) -> bool { true } + fn visit_fn_output(&mut self, _retstyle: uint, _inner: *TyDesc) -> bool { true } + fn visit_leave_fn(&mut self, _purity: uint, _proto: uint, _n_inputs: uint, _retstyle: uint) -> bool { true } @@ -628,11 +639,11 @@ fn test_repr() { exact_test(&(&["hi", "there"]), "&[\"hi\", \"there\"]"); exact_test(&(P{a:10, b:1.234}), - "{a: 10, b: 1.234}"); + "repr::P{a: 10, b: 1.234}"); exact_test(&(@P{a:10, b:1.234}), - "@{a: 10, b: 1.234}"); + "@repr::P{a: 10, b: 1.234}"); exact_test(&(~P{a:10, b:1.234}), - "~{a: 10, b: 1.234}"); + "~repr::P{a: 10, b: 1.234}"); exact_test(&(10u8, ~"hello"), "(10u8, ~\"hello\")"); exact_test(&(10u16, ~"hello"), @@ -643,5 +654,5 @@ fn test_repr() { "(10u64, ~\"hello\")"); struct Foo; - exact_test(&(~[Foo, Foo, Foo]), "~[{}, {}, {}]"); + exact_test(&(~[Foo, Foo]), "~[repr::test_repr::Foo, repr::test_repr::Foo]"); } diff --git a/src/libstd/unstable/intrinsics.rs b/src/libstd/unstable/intrinsics.rs index 018f8532eab..8e0f6255e09 100644 --- a/src/libstd/unstable/intrinsics.rs +++ b/src/libstd/unstable/intrinsics.rs @@ -220,11 +220,11 @@ pub trait TyVisitor { fn visit_leave_rec(&mut self, n_fields: uint, sz: uint, align: uint) -> bool; - fn visit_enter_class(&mut self, n_fields: uint, + fn visit_enter_class(&mut self, name: &str, n_fields: uint, sz: uint, align: uint) -> bool; fn visit_class_field(&mut self, i: uint, name: &str, mtbl: uint, inner: *TyDesc) -> bool; - fn visit_leave_class(&mut self, n_fields: uint, + fn visit_leave_class(&mut self, name: &str, n_fields: uint, sz: uint, align: uint) -> bool; fn visit_enter_tup(&mut self, n_fields: uint, diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs index 12aebe20161..22c64c6b39c 100644 --- a/src/libstd/vec.rs +++ b/src/libstd/vec.rs @@ -3681,10 +3681,12 @@ mod tests { assert_eq!(cnt, 11); let xs = ~[Foo, Foo, Foo]; - assert_eq!(fmt!("%?", xs.slice(0, 2).to_owned()), ~"~[{}, {}]"); + assert_eq!(fmt!("%?", xs.slice(0, 2).to_owned()), + ~"~[vec::tests::Foo, vec::tests::Foo]"); let xs: [Foo, ..3] = [Foo, Foo, Foo]; - assert_eq!(fmt!("%?", xs.slice(0, 2).to_owned()), ~"~[{}, {}]"); + assert_eq!(fmt!("%?", xs.slice(0, 2).to_owned()), + ~"~[vec::tests::Foo, vec::tests::Foo]"); cnt = 0; for f in xs.iter() { assert!(*f == Foo); |
