/// a trait object, and which gets removed in `ExistentialTraitRef`.
/// This type must not appear anywhere in other converted types.
pub trait_object_dummy_self: Ty<'tcx>,
+}
+pub struct CommonLifetimes<'tcx> {
pub re_empty: Region<'tcx>,
pub re_static: Region<'tcx>,
pub re_erased: Region<'tcx>,
impl<'tcx> CommonTypes<'tcx> {
fn new(interners: &CtxtInterners<'tcx>) -> CommonTypes<'tcx> {
let mk = |sty| CtxtInterners::intern_ty(interners, interners, sty);
- let mk_region = |r| {
- interners.region.borrow_mut().intern(r, |r| {
- Interned(interners.arena.alloc(r))
- }).0
- };
CommonTypes {
unit: mk(Tuple(List::empty())),
f64: mk(Float(ast::FloatTy::F64)),
trait_object_dummy_self: mk(Infer(ty::FreshTy(0))),
+ }
+ }
+}
- re_empty: mk_region(RegionKind::ReEmpty),
- re_static: mk_region(RegionKind::ReStatic),
- re_erased: mk_region(RegionKind::ReErased),
+impl<'tcx> CommonLifetimes<'tcx> {
+ fn new(interners: &CtxtInterners<'tcx>) -> CommonLifetimes<'tcx> {
+ let mk = |r| {
+ interners.region.borrow_mut().intern(r, |r| {
+ Interned(interners.arena.alloc(r))
+ }).0
+ };
+
+ CommonLifetimes {
+ re_empty: mk(RegionKind::ReEmpty),
+ re_static: mk(RegionKind::ReStatic),
+ re_erased: mk(RegionKind::ReErased),
}
}
}
/// Common types, pre-interned for your convenience.
pub types: CommonTypes<'tcx>,
+ /// Common lifetimes, pre-interned for your convenience.
+ pub lifetimes: CommonLifetimes<'tcx>,
+
/// Map indicating what traits are in scope for places where this
/// is relevant; generated by resolve.
trait_map: FxHashMap<DefIndex,
});
let interners = CtxtInterners::new(&arenas.interner);
let common_types = CommonTypes::new(&interners);
+ let common_lifetimes = CommonLifetimes::new(&interners);
let dep_graph = hir.dep_graph.clone();
let max_cnum = cstore.crates_untracked().iter().map(|c| c.as_usize()).max().unwrap_or(0);
let mut providers = IndexVec::from_elem_n(extern_providers, max_cnum + 1);
global_interners: interners,
dep_graph,
types: common_types,
+ lifetimes: common_lifetimes,
trait_map,
export_map: resolutions.export_map.into_iter().map(|(k, v)| {
let exports: Vec<_> = v.into_iter().map(|e| {
#[inline]
pub fn mk_static_str(self) -> Ty<'tcx> {
- self.mk_imm_ref(self.types.re_static, self.mk_str())
+ self.mk_imm_ref(self.lifetimes.re_static, self.mk_str())
}
#[inline]