repr: print integer/float suffixes

This commit is contained in:
Daniel Micay 2013-08-26 15:58:50 -04:00
parent 20567a0c3c
commit c2bc59e086
8 changed files with 51 additions and 36 deletions

View File

@ -3476,18 +3476,18 @@ fn terr_vstore_kind_to_str(k: terr_vstore_kind) -> ~str {
terr_ptr_mutability => ~"pointers differ in mutability", terr_ptr_mutability => ~"pointers differ in mutability",
terr_ref_mutability => ~"references differ in mutability", terr_ref_mutability => ~"references differ in mutability",
terr_ty_param_size(values) => { terr_ty_param_size(values) => {
fmt!("expected a type with %? type params \ fmt!("expected a type with %u type params \
but found one with %? type params", but found one with %u type params",
values.expected, values.found) values.expected, values.found)
} }
terr_tuple_size(values) => { terr_tuple_size(values) => {
fmt!("expected a tuple with %? elements \ fmt!("expected a tuple with %u elements \
but found one with %? elements", but found one with %u elements",
values.expected, values.found) values.expected, values.found)
} }
terr_record_size(values) => { terr_record_size(values) => {
fmt!("expected a record with %? fields \ fmt!("expected a record with %u fields \
but found one with %? fields", but found one with %u fields",
values.expected, values.found) values.expected, values.found)
} }
terr_record_mutability => { terr_record_mutability => {

View File

@ -75,35 +75,50 @@ fn write_repr(&self, writer: @Writer) {
} }
} }
macro_rules! int_repr(($ty:ident) => (impl Repr for $ty { impl Repr for int {
fn write_repr(&self, writer: @Writer) {
do ::int::to_str_bytes(*self, 10u) |bits| {
writer.write(bits);
}
}
}
macro_rules! int_repr(($ty:ident, $suffix:expr) => (impl Repr for $ty {
fn write_repr(&self, writer: @Writer) { fn write_repr(&self, writer: @Writer) {
do ::$ty::to_str_bytes(*self, 10u) |bits| { do ::$ty::to_str_bytes(*self, 10u) |bits| {
writer.write(bits); writer.write(bits);
writer.write(bytes!($suffix));
} }
} }
})) }))
int_repr!(int) int_repr!(i8, "i8")
int_repr!(i8) int_repr!(i16, "i16")
int_repr!(i16) int_repr!(i32, "i32")
int_repr!(i32) int_repr!(i64, "i64")
int_repr!(i64) int_repr!(uint, "u")
int_repr!(uint) int_repr!(u8, "u8")
int_repr!(u8) int_repr!(u16, "u16")
int_repr!(u16) int_repr!(u32, "u32")
int_repr!(u32) int_repr!(u64, "u64")
int_repr!(u64)
macro_rules! num_repr(($ty:ident) => (impl Repr for $ty { impl Repr for float {
fn write_repr(&self, writer: @Writer) { fn write_repr(&self, writer: @Writer) {
let s = self.to_str(); let s = self.to_str();
writer.write(s.as_bytes()); writer.write(s.as_bytes());
} }
}
macro_rules! num_repr(($ty:ident, $suffix:expr) => (impl Repr for $ty {
fn write_repr(&self, writer: @Writer) {
let s = self.to_str();
writer.write(s.as_bytes());
writer.write(bytes!($suffix));
}
})) }))
num_repr!(float) num_repr!(f32, "f32")
num_repr!(f32) num_repr!(f64, "f64")
num_repr!(f64)
// New implementation using reflect::MovePtr // New implementation using reflect::MovePtr
@ -602,7 +617,7 @@ fn exact_test<T>(t: &T, e:&str) {
exact_test(&(@[1,2,3,4,5,6,7,8]), exact_test(&(@[1,2,3,4,5,6,7,8]),
"@[1, 2, 3, 4, 5, 6, 7, 8]"); "@[1, 2, 3, 4, 5, 6, 7, 8]");
exact_test(&(@[1u8,2u8,3u8,4u8]), exact_test(&(@[1u8,2u8,3u8,4u8]),
"@[1, 2, 3, 4]"); "@[1u8, 2u8, 3u8, 4u8]");
exact_test(&(@["hi", "there"]), exact_test(&(@["hi", "there"]),
"@[\"hi\", \"there\"]"); "@[\"hi\", \"there\"]");
exact_test(&(~["hi", "there"]), exact_test(&(~["hi", "there"]),
@ -615,14 +630,14 @@ fn exact_test<T>(t: &T, e:&str) {
"@{a: 10, b: 1.234}"); "@{a: 10, b: 1.234}");
exact_test(&(~P{a:10, b:1.234}), exact_test(&(~P{a:10, b:1.234}),
"~{a: 10, b: 1.234}"); "~{a: 10, b: 1.234}");
exact_test(&(10_u8, ~"hello"), exact_test(&(10u8, ~"hello"),
"(10, ~\"hello\")"); "(10u8, ~\"hello\")");
exact_test(&(10_u16, ~"hello"), exact_test(&(10u16, ~"hello"),
"(10, ~\"hello\")"); "(10u16, ~\"hello\")");
exact_test(&(10_u32, ~"hello"), exact_test(&(10u32, ~"hello"),
"(10, ~\"hello\")"); "(10u32, ~\"hello\")");
exact_test(&(10_u64, ~"hello"), exact_test(&(10u64, ~"hello"),
"(10, ~\"hello\")"); "(10u64, ~\"hello\")");
struct Foo; struct Foo;
exact_test(&(~[Foo, Foo, Foo]), "~[{}, {}, {}]"); exact_test(&(~[Foo, Foo, Foo]), "~[{}, {}, {}]");

View File

@ -16,5 +16,5 @@ pub fn main() {
let arr = [1,2,3]; let arr = [1,2,3];
let struc = Struc {a: 13u8, b: arr, c: 42}; let struc = Struc {a: 13u8, b: arr, c: 42};
let s = sys::log_str(&struc); let s = sys::log_str(&struc);
assert_eq!(s, ~"{a: 13, b: [1, 2, 3], c: 42}"); assert_eq!(s, ~"{a: 13u8, b: [1, 2, 3], c: 42}");
} }

View File

@ -25,7 +25,7 @@ fn check_log<T>(exp: ~str, v: T) {
pub fn main() { pub fn main() {
let x = list::from_vec([a(22u), b(~"hi")]); let x = list::from_vec([a(22u), b(~"hi")]);
let exp = ~"@Cons(a(22), @Cons(b(~\"hi\"), @Nil))"; let exp = ~"@Cons(a(22u), @Cons(b(~\"hi\"), @Nil))";
let act = fmt!("%?", x); let act = fmt!("%?", x);
assert!(act == exp); assert!(act == exp);
check_log(exp, x); check_log(exp, x);

View File

@ -19,7 +19,7 @@ enum bar {
} }
pub fn main() { pub fn main() {
assert_eq!(~"a(22)", fmt!("%?", a(22u))); assert_eq!(~"a(22u)", fmt!("%?", a(22u)));
assert_eq!(~"b(~\"hi\")", fmt!("%?", b(~"hi"))); assert_eq!(~"b(~\"hi\")", fmt!("%?", b(~"hi")));
assert_eq!(~"c", fmt!("%?", c)); assert_eq!(~"c", fmt!("%?", c));
assert_eq!(~"d", fmt!("%?", d)); assert_eq!(~"d", fmt!("%?", d));

View File

@ -64,6 +64,6 @@ pub fn main() {
// because `inner`s alignment was 4. // because `inner`s alignment was 4.
assert_eq!(sys::size_of::<Outer>(), m::size()); assert_eq!(sys::size_of::<Outer>(), m::size());
assert_eq!(y, ~"{c8: 22, t: {c64: 44}}"); assert_eq!(y, ~"{c8: 22u8, t: {c64: 44u32}}");
} }
} }

View File

@ -86,6 +86,6 @@ pub fn main() {
// because `Inner`s alignment was 4. // because `Inner`s alignment was 4.
assert_eq!(sys::size_of::<Outer>(), m::m::size()); assert_eq!(sys::size_of::<Outer>(), m::m::size());
assert_eq!(y, ~"{c8: 22, t: {c64: 44}}"); assert_eq!(y, ~"{c8: 22u8, t: {c64: 44u64}}");
} }
} }

View File

@ -21,5 +21,5 @@ pub fn main() {
let x = t_rec {c8: 22u8, t: a_tag(44u64)}; let x = t_rec {c8: 22u8, t: a_tag(44u64)};
let y = fmt!("%?", x); let y = fmt!("%?", x);
info!("y = %s", y); info!("y = %s", y);
assert_eq!(y, ~"{c8: 22, t: a_tag(44)}"); assert_eq!(y, ~"{c8: 22u8, t: a_tag(44u64)}");
} }