From cc1f0027c73f2728fa20867a4dfdbdcfad77847f Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Mon, 2 Sep 2013 01:15:03 -0400 Subject: repr: add support for trait objects Closes #8916 --- src/libstd/reflect.rs | 4 ++-- src/libstd/repr.rs | 7 ++++++- src/libstd/unstable/intrinsics.rs | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) (limited to 'src/libstd') diff --git a/src/libstd/reflect.rs b/src/libstd/reflect.rs index 7b352e7806e..6bef4402bf1 100644 --- a/src/libstd/reflect.rs +++ b/src/libstd/reflect.rs @@ -450,9 +450,9 @@ impl TyVisitor for MovePtrAdaptor { true } - fn visit_trait(&mut self) -> bool { + fn visit_trait(&mut self, name: &str) -> bool { self.align_to::<@TyVisitor>(); - if ! self.inner.visit_trait() { return false; } + if ! self.inner.visit_trait(name) { return false; } self.bump_past::<@TyVisitor>(); true } diff --git a/src/libstd/repr.rs b/src/libstd/repr.rs index 381cd449695..63a1416e48a 100644 --- a/src/libstd/repr.rs +++ b/src/libstd/repr.rs @@ -571,7 +571,11 @@ impl<'self> TyVisitor for ReprVisitor<'self> { _n_inputs: uint, _retstyle: uint) -> bool { true } - fn visit_trait(&mut self) -> bool { true } + fn visit_trait(&mut self, name: &str) -> bool { + self.writer.write(name.as_bytes()); + true + } + fn visit_param(&mut self, _i: uint) -> bool { true } fn visit_self(&mut self) -> bool { true } fn visit_type(&mut self) -> bool { true } @@ -661,6 +665,7 @@ fn test_repr() { "(10u64, ~\"hello\")"); exact_test(&(&println), "&fn()"); + exact_test(&(~5 as ~ToStr), "~to_str::ToStr:Send"); struct 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 8e0f6255e09..1726d144df1 100644 --- a/src/libstd/unstable/intrinsics.rs +++ b/src/libstd/unstable/intrinsics.rs @@ -256,7 +256,7 @@ pub trait TyVisitor { fn visit_leave_fn(&mut self, purity: uint, proto: uint, n_inputs: uint, retstyle: uint) -> bool; - fn visit_trait(&mut self) -> bool; + fn visit_trait(&mut self, name: &str) -> bool; fn visit_param(&mut self, i: uint) -> bool; fn visit_self(&mut self) -> bool; fn visit_type(&mut self) -> bool; -- cgit 1.4.1-3-g733a5