mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 07:14:28 +00:00
Intern LocalDefId list from opaque query
This commit is contained in:
parent
64368d0279
commit
18b7d9eb8c
@ -339,7 +339,7 @@ rustc_queries! {
|
|||||||
|
|
||||||
query opaque_types_defined_by(
|
query opaque_types_defined_by(
|
||||||
key: LocalDefId
|
key: LocalDefId
|
||||||
) -> &'tcx [LocalDefId] {
|
) -> &'tcx ty::List<LocalDefId> {
|
||||||
desc {
|
desc {
|
||||||
|tcx| "computing the opaque types defined by `{}`",
|
|tcx| "computing the opaque types defined by `{}`",
|
||||||
tcx.def_path_str(key.to_def_id())
|
tcx.def_path_str(key.to_def_id())
|
||||||
|
@ -157,6 +157,7 @@ pub struct CtxtInterners<'tcx> {
|
|||||||
external_constraints: InternedSet<'tcx, ExternalConstraintsData<'tcx>>,
|
external_constraints: InternedSet<'tcx, ExternalConstraintsData<'tcx>>,
|
||||||
predefined_opaques_in_body: InternedSet<'tcx, PredefinedOpaquesData<'tcx>>,
|
predefined_opaques_in_body: InternedSet<'tcx, PredefinedOpaquesData<'tcx>>,
|
||||||
fields: InternedSet<'tcx, List<FieldIdx>>,
|
fields: InternedSet<'tcx, List<FieldIdx>>,
|
||||||
|
local_def_ids: InternedSet<'tcx, List<LocalDefId>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> CtxtInterners<'tcx> {
|
impl<'tcx> CtxtInterners<'tcx> {
|
||||||
@ -182,6 +183,7 @@ impl<'tcx> CtxtInterners<'tcx> {
|
|||||||
external_constraints: Default::default(),
|
external_constraints: Default::default(),
|
||||||
predefined_opaques_in_body: Default::default(),
|
predefined_opaques_in_body: Default::default(),
|
||||||
fields: Default::default(),
|
fields: Default::default(),
|
||||||
|
local_def_ids: Default::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1568,6 +1570,7 @@ slice_interners!(
|
|||||||
place_elems: pub mk_place_elems(PlaceElem<'tcx>),
|
place_elems: pub mk_place_elems(PlaceElem<'tcx>),
|
||||||
bound_variable_kinds: pub mk_bound_variable_kinds(ty::BoundVariableKind),
|
bound_variable_kinds: pub mk_bound_variable_kinds(ty::BoundVariableKind),
|
||||||
fields: pub mk_fields(FieldIdx),
|
fields: pub mk_fields(FieldIdx),
|
||||||
|
local_def_ids: intern_local_def_ids(LocalDefId),
|
||||||
);
|
);
|
||||||
|
|
||||||
impl<'tcx> TyCtxt<'tcx> {
|
impl<'tcx> TyCtxt<'tcx> {
|
||||||
@ -1798,6 +1801,13 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||||||
self.intern_clauses(clauses)
|
self.intern_clauses(clauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn mk_local_def_ids(self, clauses: &[LocalDefId]) -> &'tcx List<LocalDefId> {
|
||||||
|
// FIXME consider asking the input slice to be sorted to avoid
|
||||||
|
// re-interning permutations, in which case that would be asserted
|
||||||
|
// here.
|
||||||
|
self.intern_local_def_ids(clauses)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn mk_const_list_from_iter<I, T>(self, iter: I) -> T::Output
|
pub fn mk_const_list_from_iter<I, T>(self, iter: I) -> T::Output
|
||||||
where
|
where
|
||||||
I: Iterator<Item = T>,
|
I: Iterator<Item = T>,
|
||||||
|
@ -269,7 +269,10 @@ impl<'tcx> TypeVisitor<TyCtxt<'tcx>> for OpaqueTypeCollector<'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn opaque_types_defined_by<'tcx>(tcx: TyCtxt<'tcx>, item: LocalDefId) -> &'tcx [LocalDefId] {
|
fn opaque_types_defined_by<'tcx>(
|
||||||
|
tcx: TyCtxt<'tcx>,
|
||||||
|
item: LocalDefId,
|
||||||
|
) -> &'tcx ty::List<LocalDefId> {
|
||||||
let kind = tcx.def_kind(item);
|
let kind = tcx.def_kind(item);
|
||||||
trace!(?kind);
|
trace!(?kind);
|
||||||
let mut collector = OpaqueTypeCollector::new(tcx, item);
|
let mut collector = OpaqueTypeCollector::new(tcx, item);
|
||||||
@ -327,7 +330,7 @@ fn opaque_types_defined_by<'tcx>(tcx: TyCtxt<'tcx>, item: LocalDefId) -> &'tcx [
|
|||||||
return tcx.opaque_types_defined_by(tcx.local_parent(item));
|
return tcx.opaque_types_defined_by(tcx.local_parent(item));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tcx.arena.alloc_from_iter(collector.opaques)
|
tcx.mk_local_def_ids(&collector.opaques)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) fn provide(providers: &mut Providers) {
|
pub(super) fn provide(providers: &mut Providers) {
|
||||||
|
Loading…
Reference in New Issue
Block a user