Bivariant, // T<A> <: T<B> -- e.g., unused type parameter
}
-#[deriving(Decodable, Encodable)]
pub enum AutoAdjustment {
AutoAddEnv(ty::Region, ast::Sigil),
- AutoDerefRef(AutoDerefRef)
+ AutoDerefRef(AutoDerefRef),
+ AutoObject(ast::Sigil, Option<ty::Region>,
+ ast::Mutability,
+ ty::BuiltinBounds,
+ ast::DefId, /* Trait ID */
+ ty::substs /* Trait substitutions */)
}
#[deriving(Decodable, Encodable)]
pub type BuiltinBounds = EnumSet<BuiltinBound>;
-#[deriving(Clone, Eq, IterBytes, ToStr)]
+#[deriving(Clone, Encodable, Eq, Decodable, IterBytes, ToStr)]
#[repr(uint)]
pub enum BuiltinBound {
BoundStatic,
}
}
}
+
+ Some(@AutoObject(ref sigil, ref region, m, b, def_id, ref substs)) => {
+ trait_adjustment_to_ty(cx, sigil, region, def_id, substs, m, b)
+ }
};
fn borrow_vec(cx: ctxt, span: Span,
}
}
+pub fn trait_adjustment_to_ty(cx: ctxt, sigil: &ast::Sigil, region: &Option<Region>,
+ def_id: ast::DefId, substs: &substs, m: ast::Mutability,
+ bounds: BuiltinBounds) -> t {
+
+ let trait_store = match *sigil {
+ BorrowedSigil => RegionTraitStore(region.expect("expected valid region")),
+ OwnedSigil => UniqTraitStore,
+ ManagedSigil => BoxTraitStore
+ };
+
+ mk_trait(cx, def_id, substs.clone(), trait_store, m, bounds)
+}
+
impl AutoRef {
pub fn map_region(&self, f: |Region| -> Region) -> AutoRef {
match *self {