Replace TyDesc and its uses with trait vtables and a type_name intrinsic.

This commit is contained in:
Eduard Burtescu 2015-03-15 04:01:57 +02:00
parent 3e98ab560a
commit e256b7f049
15 changed files with 88 additions and 307 deletions

View file

@ -13,17 +13,17 @@ struct NT(str);
struct DST { a: u32, b: str }
fn main() {
// get_tydesc should support unsized types
// type_name should support unsized types
assert_eq!(unsafe {(
// Slice
(*std::intrinsics::get_tydesc::<[u8]>()).name,
std::intrinsics::type_name::<[u8]>(),
// str
(*std::intrinsics::get_tydesc::<str>()).name,
std::intrinsics::type_name::<str>(),
// Trait
(*std::intrinsics::get_tydesc::<Copy>()).name,
std::intrinsics::type_name::<Copy>(),
// Newtype
(*std::intrinsics::get_tydesc::<NT>()).name,
std::intrinsics::type_name::<NT>(),
// DST
(*std::intrinsics::get_tydesc::<DST>()).name
std::intrinsics::type_name::<DST>()
)}, ("[u8]", "str", "core::marker::Copy", "NT", "DST"));
}

View file

@ -9,7 +9,7 @@
// except according to those terms.
use std::intrinsics::get_tydesc;
use std::intrinsics::type_name;
struct Foo<T> {
x: T
@ -17,7 +17,7 @@ struct Foo<T> {
pub fn main() {
unsafe {
assert_eq!((*get_tydesc::<int>()).name, "isize");
assert_eq!((*get_tydesc::<Foo<uint>>()).name, "Foo<usize>");
assert_eq!(type_name::<int>(), "isize");
assert_eq!(type_name::<Foo<uint>>(), "Foo<usize>");
}
}