From df016dc4bf2efd3f4e0f9d67dda1875453c705b2 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Sun, 11 Aug 2013 13:58:01 -0400 Subject: Update type visitor to use &Visitor and not @Visitor --- src/libstd/repr.rs | 24 ++++++++++++++++++++++++ src/libstd/unstable/intrinsics.rs | 4 ++++ 2 files changed, 28 insertions(+) (limited to 'src/libstd') diff --git a/src/libstd/repr.rs b/src/libstd/repr.rs index a53e3e796a7..d0970f1b6b7 100644 --- a/src/libstd/repr.rs +++ b/src/libstd/repr.rs @@ -158,6 +158,7 @@ impl ReprVisitor { } #[inline] + #[cfg(stage0)] pub fn visit_ptr_inner(&self, ptr: *c_void, inner: *TyDesc) -> bool { unsafe { let u = ReprVisitor(ptr, self.writer); @@ -167,6 +168,17 @@ impl ReprVisitor { } } + #[inline] + #[cfg(not(stage0))] + pub fn visit_ptr_inner(&self, ptr: *c_void, inner: *TyDesc) -> bool { + unsafe { + let u = ReprVisitor(ptr, self.writer); + let v = reflect::MovePtrAdaptor(u); + visit_tydesc(inner, &v as &TyVisitor); + true + } + } + #[inline] pub fn write(&self) -> bool { do self.get |v:&T| { @@ -556,6 +568,7 @@ impl TyVisitor for ReprVisitor { fn visit_closure_ptr(&self, _ck: uint) -> bool { true } } +#[cfg(stage0)] pub fn write_repr(writer: @Writer, object: &T) { unsafe { let ptr = ptr::to_unsafe_ptr(object) as *c_void; @@ -566,6 +579,17 @@ pub fn write_repr(writer: @Writer, object: &T) { } } +#[cfg(not(stage0))] +pub fn write_repr(writer: @Writer, object: &T) { + unsafe { + let ptr = ptr::to_unsafe_ptr(object) as *c_void; + let tydesc = get_tydesc::(); + let u = ReprVisitor(ptr, writer); + let v = reflect::MovePtrAdaptor(u); + visit_tydesc(tydesc, &v as &TyVisitor) + } +} + #[cfg(test)] struct P {a: int, b: float} diff --git a/src/libstd/unstable/intrinsics.rs b/src/libstd/unstable/intrinsics.rs index d2807303fb2..1b7b240f01a 100644 --- a/src/libstd/unstable/intrinsics.rs +++ b/src/libstd/unstable/intrinsics.rs @@ -328,8 +328,12 @@ extern "rust-intrinsic" { /// Returns `true` if a type is managed (will be allocated on the local heap) pub fn contains_managed() -> bool; + #[cfg(stage0)] pub fn visit_tydesc(td: *TyDesc, tv: @TyVisitor); + #[cfg(not(stage0))] + pub fn visit_tydesc(td: *TyDesc, tv: &TyVisitor); + pub fn frame_address(f: &once fn(*u8)); /// Get the address of the `__morestack` stack growth function. -- cgit 1.4.1-3-g733a5