pub use self::ParamSpace::*;
pub use self::RegionSubsts::*;
+use middle::cstore;
use middle::ty::{self, Ty, HasTypeFlags, RegionEscape};
-use middle::ty_fold::{self, TypeFoldable, TypeFolder};
+use middle::ty::fold::{TypeFoldable, TypeFolder};
+use serialize::{Encodable, Encoder, Decodable, Decoder};
use std::fmt;
use std::iter::IntoIterator;
use std::slice::Iter;
}
}
+impl<'tcx> Encodable for Substs<'tcx> {
+
+ fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
+ cstore::tls::with_encoding_context(s, |ecx, rbml_w| {
+ ecx.encode_substs(rbml_w, self);
+ Ok(())
+ })
+ }
+}
+
+impl<'tcx> Decodable for Substs<'tcx> {
+ fn decode<D: Decoder>(d: &mut D) -> Result<Substs<'tcx>, D::Error> {
+ cstore::tls::with_decoding_context(d, |dcx, rbml_r| {
+ Ok(dcx.decode_substs(rbml_r))
+ })
+ }
+}
+
+impl<'tcx> Decodable for &'tcx Substs<'tcx> {
+ fn decode<D: Decoder>(d: &mut D) -> Result<&'tcx Substs<'tcx>, D::Error> {
+ let substs = cstore::tls::with_decoding_context(d, |dcx, rbml_r| {
+ let substs = dcx.decode_substs(rbml_r);
+ dcx.tcx().mk_substs(substs)
+ });
+
+ Ok(substs)
+ }
+}
+
impl RegionSubsts {
- fn map<F>(self, op: F) -> RegionSubsts where
+ pub fn map<F>(self, op: F) -> RegionSubsts where
F: FnOnce(VecPerParamSpace<ty::Region>) -> VecPerParamSpace<ty::Region>,
{
match self {
self.ty_for_param(p, t)
}
_ => {
- ty_fold::super_fold_ty(self, t)
+ ty::fold::super_fold_ty(self, t)
}
};
return ty;
}
- let result = ty_fold::shift_regions(self.tcx(), self.region_binders_passed, &ty);
+ let result = ty::fold::shift_regions(self.tcx(), self.region_binders_passed, &ty);
debug!("shift_regions: shifted result = {:?}", result);
result
}
fn shift_region_through_binders(&self, region: ty::Region) -> ty::Region {
- ty_fold::shift_region(region, self.region_binders_passed)
+ ty::fold::shift_region(region, self.region_binders_passed)
}
}