From 874611b348ba6fc18fb017c9f8a6a46b98ce6c76 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Sat, 31 Aug 2013 00:15:55 -0400 Subject: [PATCH] repr: print the name of structs --- src/librustc/middle/trans/reflect.rs | 4 ++-- src/libstd/reflect.rs | 13 +++++-------- src/libstd/repr.rs | 21 ++++++++++++++------- src/libstd/unstable/intrinsics.rs | 4 ++-- src/libstd/vec.rs | 6 ++++-- src/test/run-pass/fixed_length_vec_glue.rs | 4 +++- src/test/run-pass/ifmt.rs | 4 +++- src/test/run-pass/rec-align-u32.rs | 4 +++- src/test/run-pass/rec-align-u64.rs | 4 +++- src/test/run-pass/reflect-visit-data.rs | 12 ++++++------ src/test/run-pass/reflect-visit-type.rs | 4 ++-- src/test/run-pass/tag-align-shape.rs | 4 +++- 12 files changed, 50 insertions(+), 34 deletions(-) diff --git a/src/librustc/middle/trans/reflect.rs b/src/librustc/middle/trans/reflect.rs index 98d2b6df887..b6cb47efc76 100644 --- a/src/librustc/middle/trans/reflect.rs +++ b/src/librustc/middle/trans/reflect.rs @@ -252,8 +252,8 @@ impl Reflector { let tcx = bcx.ccx().tcx; let fields = ty::struct_fields(tcx, did, substs); - let extra = ~[self.c_uint(fields.len())] - + self.c_size_and_align(t); + let extra = ~[self.c_slice(ty_to_str(tcx, t).to_managed()), + self.c_uint(fields.len())] + self.c_size_and_align(t); do self.bracketed("class", extra) |this| { for (i, field) in fields.iter().enumerate() { let extra = ~[this.c_uint(i), 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 TyVisitor for MovePtrAdaptor { 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 TyVisitor for MovePtrAdaptor { 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..cc7d08847da 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::> |this, b| { this.write_unboxed_vec_repr(mtbl, b, inner); @@ -413,11 +412,13 @@ 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(name.as_bytes()); 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,7 +430,8 @@ 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]); true @@ -440,6 +442,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 +450,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 +548,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 +635,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 +650,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..f596520ba95 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); diff --git a/src/test/run-pass/fixed_length_vec_glue.rs b/src/test/run-pass/fixed_length_vec_glue.rs index eb67c45ed00..682ac822aa7 100644 --- a/src/test/run-pass/fixed_length_vec_glue.rs +++ b/src/test/run-pass/fixed_length_vec_glue.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-fast + use std::sys; struct Struc { a: u8, b: [int, ..3], c: int } @@ -16,5 +18,5 @@ pub fn main() { let arr = [1,2,3]; let struc = Struc {a: 13u8, b: arr, c: 42}; let s = sys::log_str(&struc); - assert_eq!(s, ~"{a: 13u8, b: [1, 2, 3], c: 42}"); + assert_eq!(s, ~"Struc{a: 13u8, b: [1, 2, 3], c: 42}"); } diff --git a/src/test/run-pass/ifmt.rs b/src/test/run-pass/ifmt.rs index 7bf9d004ee0..32bb30720c5 100644 --- a/src/test/run-pass/ifmt.rs +++ b/src/test/run-pass/ifmt.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-fast + use std::fmt; struct A; @@ -27,7 +29,7 @@ pub fn main() { // Make sure there's a poly formatter that takes anything t!(format!("{:?}", 1), "1"); - t!(format!("{:?}", A), "{}"); + t!(format!("{:?}", A), "A{}"); t!(format!("{:?}", ()), "()"); t!(format!("{:?}", @(~1, "foo")), "@(~1, \"foo\")"); diff --git a/src/test/run-pass/rec-align-u32.rs b/src/test/run-pass/rec-align-u32.rs index 11aa2b85204..9b1f6c00056 100644 --- a/src/test/run-pass/rec-align-u32.rs +++ b/src/test/run-pass/rec-align-u32.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-fast + // Issue #2303 use std::sys; @@ -64,6 +66,6 @@ pub fn main() { // because `inner`s alignment was 4. assert_eq!(sys::size_of::(), m::size()); - assert_eq!(y, ~"{c8: 22u8, t: {c64: 44u32}}"); + assert_eq!(y, ~"Outer{c8: 22u8, t: Inner{c64: 44u32}}"); } } diff --git a/src/test/run-pass/rec-align-u64.rs b/src/test/run-pass/rec-align-u64.rs index cca2adc0873..e4bd5c4eba7 100644 --- a/src/test/run-pass/rec-align-u64.rs +++ b/src/test/run-pass/rec-align-u64.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-fast + // Issue #2303 use std::sys; @@ -86,6 +88,6 @@ pub fn main() { // because `Inner`s alignment was 4. assert_eq!(sys::size_of::(), m::m::size()); - assert_eq!(y, ~"{c8: 22u8, t: {c64: 44u64}}"); + assert_eq!(y, ~"Outer{c8: 22u8, t: Inner{c64: 44u64}}"); } } diff --git a/src/test/run-pass/reflect-visit-data.rs b/src/test/run-pass/reflect-visit-data.rs index efa3286e94a..85fc5a5ecb4 100644 --- a/src/test/run-pass/reflect-visit-data.rs +++ b/src/test/run-pass/reflect-visit-data.rs @@ -318,10 +318,10 @@ impl TyVisitor for ptr_visit_adaptor { true } - fn visit_enter_class(&mut self, n_fields: uint, sz: uint, align: uint) + 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 @@ -335,9 +335,9 @@ impl TyVisitor for ptr_visit_adaptor { true } - fn visit_leave_class(&mut self, n_fields: uint, sz: uint, align: uint) + fn visit_leave_class(&mut self, name: &str, n_fields: uint, sz: uint, align: uint) -> bool { - if ! self.inner.visit_leave_class(n_fields, sz, align) { + if ! self.inner.visit_leave_class(name, n_fields, sz, align) { return false; } true @@ -566,13 +566,13 @@ impl TyVisitor for my_visitor { fn visit_leave_rec(&mut self, _n_fields: uint, _sz: uint, _align: uint) -> bool { 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 { true } fn visit_class_field(&mut self, _i: uint, _name: &str, _mtbl: uint, inner: *TyDesc) -> bool { self.visit_inner(inner) } - 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 { true } fn visit_enter_tup(&mut self, _n_fields: uint, diff --git a/src/test/run-pass/reflect-visit-type.rs b/src/test/run-pass/reflect-visit-type.rs index 934d6117647..32df4376983 100644 --- a/src/test/run-pass/reflect-visit-type.rs +++ b/src/test/run-pass/reflect-visit-type.rs @@ -99,11 +99,11 @@ impl TyVisitor for MyVisitor { fn visit_leave_rec(&mut self, _n_fields: uint, _sz: uint, _align: uint) -> bool { 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 { true } fn visit_class_field(&mut self, _i: uint, _name: &str, _mtbl: uint, _inner: *TyDesc) -> bool { 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 { true } fn visit_enter_tup(&mut self, _n_fields: uint, diff --git a/src/test/run-pass/tag-align-shape.rs b/src/test/run-pass/tag-align-shape.rs index cb93cea2895..2075ed354bc 100644 --- a/src/test/run-pass/tag-align-shape.rs +++ b/src/test/run-pass/tag-align-shape.rs @@ -8,6 +8,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// xfail-fast + enum a_tag { a_tag(u64) } @@ -21,5 +23,5 @@ pub fn main() { let x = t_rec {c8: 22u8, t: a_tag(44u64)}; let y = fmt!("%?", x); info!("y = %s", y); - assert_eq!(y, ~"{c8: 22u8, t: a_tag(44u64)}"); + assert_eq!(y, ~"t_rec{c8: 22u8, t: a_tag(44u64)}"); }