Update type visitor to use &Visitor and not @Visitor

This commit is contained in:
Niko Matsakis 2013-08-11 13:58:01 -04:00
parent 66b8ad5867
commit df016dc4bf
6 changed files with 37 additions and 12 deletions

View file

@ -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<T:Repr>(&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<T>(writer: @Writer, object: &T) {
unsafe {
let ptr = ptr::to_unsafe_ptr(object) as *c_void;
@ -566,6 +579,17 @@ pub fn write_repr<T>(writer: @Writer, object: &T) {
}
}
#[cfg(not(stage0))]
pub fn write_repr<T>(writer: @Writer, object: &T) {
unsafe {
let ptr = ptr::to_unsafe_ptr(object) as *c_void;
let tydesc = get_tydesc::<T>();
let u = ReprVisitor(ptr, writer);
let v = reflect::MovePtrAdaptor(u);
visit_tydesc(tydesc, &v as &TyVisitor)
}
}
#[cfg(test)]
struct P {a: int, b: float}