Skip to content

Commit df016dc

Browse files
committed
Update type visitor to use &Visitor and not @visitor
1 parent 66b8ad5 commit df016dc

File tree

6 files changed

+37
-12
lines changed

6 files changed

+37
-12
lines changed

src/librustc/middle/trans/glue.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,8 @@ pub fn make_visit_glue(bcx: @mut Block, v: ValueRef, t: ty::t) -> @mut Block {
348348
let _icx = push_ctxt("make_visit_glue");
349349
do with_scope(bcx, None, "visitor cleanup") |bcx| {
350350
let mut bcx = bcx;
351-
let (visitor_trait, object_ty) = match ty::visitor_object_ty(bcx.tcx()){
351+
let (visitor_trait, object_ty) = match ty::visitor_object_ty(bcx.tcx(),
352+
ty::re_static) {
352353
Ok(pair) => pair,
353354
Err(s) => {
354355
bcx.tcx().sess.fatal(s);

src/librustc/middle/trans/reflect.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,17 +100,13 @@ impl Reflector {
100100
debug!("arg %u: %s", i, bcx.val_to_str(*a));
101101
}
102102
let bool_ty = ty::mk_bool();
103-
// XXX: Should not be BoxTraitStore!
104103
let result = unpack_result!(bcx, callee::trans_call_inner(
105104
self.bcx, None, mth_ty, bool_ty,
106105
|bcx| meth::trans_trait_callee_from_llval(bcx,
107106
mth_ty,
108107
mth_idx,
109108
v,
110-
ty::BoxTraitStore,
111-
ast::sty_region(
112-
None,
113-
ast::m_imm)),
109+
None),
114110
ArgVals(args), None, DontAutorefArg));
115111
let result = bool_to_i1(bcx, result);
116112
let next_bcx = sub_block(bcx, "next");

src/librustc/middle/ty.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4487,7 +4487,8 @@ pub fn get_opaque_ty(tcx: ctxt) -> Result<t, ~str> {
44874487
}
44884488
}
44894489

4490-
pub fn visitor_object_ty(tcx: ctxt) -> Result<(@TraitRef, t), ~str> {
4490+
pub fn visitor_object_ty(tcx: ctxt,
4491+
region: ty::Region) -> Result<(@TraitRef, t), ~str> {
44914492
let trait_lang_item = match tcx.lang_items.require(TyVisitorTraitLangItem) {
44924493
Ok(id) => id,
44934494
Err(s) => { return Err(s); }
@@ -4498,13 +4499,11 @@ pub fn visitor_object_ty(tcx: ctxt) -> Result<(@TraitRef, t), ~str> {
44984499
tps: ~[]
44994500
};
45004501
let trait_ref = @TraitRef { def_id: trait_lang_item, substs: substs };
4501-
let mut static_trait_bound = EmptyBuiltinBounds();
4502-
static_trait_bound.add(BoundStatic);
45034502
Ok((trait_ref,
45044503
mk_trait(tcx,
45054504
trait_ref.def_id,
45064505
trait_ref.substs.clone(),
4507-
BoxTraitStore,
4506+
RegionTraitStore(region),
45084507
ast::m_imm,
4509-
static_trait_bound)))
4508+
EmptyBuiltinBounds())))
45104509
}

src/librustc/middle/typeck/check/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3437,7 +3437,8 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
34373437
Ok(t) => t,
34383438
Err(s) => { tcx.sess.span_fatal(it.span, s); }
34393439
};
3440-
let visitor_object_ty = match ty::visitor_object_ty(tcx) {
3440+
let region = ty::re_bound(ty::br_anon(0));
3441+
let visitor_object_ty = match ty::visitor_object_ty(tcx, region) {
34413442
Ok((_, vot)) => vot,
34423443
Err(s) => { tcx.sess.span_fatal(it.span, s); }
34433444
};

src/libstd/repr.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ impl ReprVisitor {
158158
}
159159

160160
#[inline]
161+
#[cfg(stage0)]
161162
pub fn visit_ptr_inner(&self, ptr: *c_void, inner: *TyDesc) -> bool {
162163
unsafe {
163164
let u = ReprVisitor(ptr, self.writer);
@@ -167,6 +168,17 @@ impl ReprVisitor {
167168
}
168169
}
169170

171+
#[inline]
172+
#[cfg(not(stage0))]
173+
pub fn visit_ptr_inner(&self, ptr: *c_void, inner: *TyDesc) -> bool {
174+
unsafe {
175+
let u = ReprVisitor(ptr, self.writer);
176+
let v = reflect::MovePtrAdaptor(u);
177+
visit_tydesc(inner, &v as &TyVisitor);
178+
true
179+
}
180+
}
181+
170182
#[inline]
171183
pub fn write<T:Repr>(&self) -> bool {
172184
do self.get |v:&T| {
@@ -556,6 +568,7 @@ impl TyVisitor for ReprVisitor {
556568
fn visit_closure_ptr(&self, _ck: uint) -> bool { true }
557569
}
558570

571+
#[cfg(stage0)]
559572
pub fn write_repr<T>(writer: @Writer, object: &T) {
560573
unsafe {
561574
let ptr = ptr::to_unsafe_ptr(object) as *c_void;
@@ -566,6 +579,17 @@ pub fn write_repr<T>(writer: @Writer, object: &T) {
566579
}
567580
}
568581

582+
#[cfg(not(stage0))]
583+
pub fn write_repr<T>(writer: @Writer, object: &T) {
584+
unsafe {
585+
let ptr = ptr::to_unsafe_ptr(object) as *c_void;
586+
let tydesc = get_tydesc::<T>();
587+
let u = ReprVisitor(ptr, writer);
588+
let v = reflect::MovePtrAdaptor(u);
589+
visit_tydesc(tydesc, &v as &TyVisitor)
590+
}
591+
}
592+
569593
#[cfg(test)]
570594
struct P {a: int, b: float}
571595

src/libstd/unstable/intrinsics.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,8 +328,12 @@ extern "rust-intrinsic" {
328328
/// Returns `true` if a type is managed (will be allocated on the local heap)
329329
pub fn contains_managed<T>() -> bool;
330330

331+
#[cfg(stage0)]
331332
pub fn visit_tydesc(td: *TyDesc, tv: @TyVisitor);
332333

334+
#[cfg(not(stage0))]
335+
pub fn visit_tydesc(td: *TyDesc, tv: &TyVisitor);
336+
333337
pub fn frame_address(f: &once fn(*u8));
334338

335339
/// Get the address of the `__morestack` stack growth function.

0 commit comments

Comments
 (0)