Add opt_rpitit_info query

This commit is contained in:
Santiago Pastorino 2023-02-28 18:27:26 -03:00
parent 5423745db8
commit 5295de1694
No known key found for this signature in database
GPG Key ID: 8131A24E0C79EFAF
3 changed files with 15 additions and 0 deletions

View File

@ -177,6 +177,7 @@ pub fn provide(providers: &mut Providers) {
} }
}; };
providers.opt_def_kind = |tcx, def_id| tcx.hir().opt_def_kind(def_id.expect_local()); providers.opt_def_kind = |tcx, def_id| tcx.hir().opt_def_kind(def_id.expect_local());
providers.opt_rpitit_info = |_, _| None;
providers.all_local_trait_impls = |tcx, ()| &tcx.resolutions(()).trait_impls; providers.all_local_trait_impls = |tcx, ()| &tcx.resolutions(()).trait_impls;
providers.expn_that_defined = |tcx, id| { providers.expn_that_defined = |tcx, id| {
let id = id.expect_local(); let id = id.expect_local();

View File

@ -1144,6 +1144,14 @@ rustc_queries! {
separate_provide_extern separate_provide_extern
} }
/// The `opt_rpitit_info` query returns the pair of the def id of the function where the RPIT
/// is defined and the opaque def id if any.
query opt_rpitit_info(def_id: DefId) -> Option<ty::ImplTraitInTraitData> {
desc { |tcx| "opt_rpitit_info `{}`", tcx.def_path_str(def_id) }
cache_on_disk_if { def_id.is_local() }
feedable
}
/// Gets the span for the definition. /// Gets the span for the definition.
query def_span(def_id: DefId) -> Span { query def_span(def_id: DefId) -> Span {
desc { |tcx| "looking up span for `{}`", tcx.def_path_str(def_id) } desc { |tcx| "looking up span for `{}`", tcx.def_path_str(def_id) }

View File

@ -2071,6 +2071,12 @@ pub enum ImplOverlapKind {
Issue33140, Issue33140,
} }
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, TyEncodable, TyDecodable, HashStable)]
pub enum ImplTraitInTraitData {
Trait { fn_def_id: DefId, opaque_def_id: DefId },
Impl { fn_def_id: DefId },
}
impl<'tcx> TyCtxt<'tcx> { impl<'tcx> TyCtxt<'tcx> {
pub fn typeck_body(self, body: hir::BodyId) -> &'tcx TypeckResults<'tcx> { pub fn typeck_body(self, body: hir::BodyId) -> &'tcx TypeckResults<'tcx> {
self.typeck(self.hir().body_owner_def_id(body)) self.typeck(self.hir().body_owner_def_id(body))