diff options
| author | bors <bors@rust-lang.org> | 2023-09-13 04:51:19 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-09-13 04:51:19 +0000 |
| commit | 1fe747c1604a12de6528cd526af15967f14f2327 (patch) | |
| tree | ceea8903ace9ee86fa1ac9175b22ddba8a0f2549 | |
| parent | 8e455dba67f96b9f7d732934af8b965c48bef5de (diff) | |
| parent | 3678dbc3820ead4126bf9da50859ca93fd41632b (diff) | |
| download | rust-1fe747c1604a12de6528cd526af15967f14f2327.tar.gz rust-1fe747c1604a12de6528cd526af15967f14f2327.zip | |
Auto merge of #115793 - spastorino:smir-explicit-predicates-of, r=oli-obk
Add explicit_predicates_of to SMIR Adding `explicit_predicates_of` so we can use it from Mir formality. r? `@oli-obk`
| -rw-r--r-- | compiler/rustc_smir/src/rustc_smir/mod.rs | 17 | ||||
| -rw-r--r-- | compiler/rustc_smir/src/stable_mir/mod.rs | 1 | ||||
| -rw-r--r-- | compiler/rustc_smir/src/stable_mir/ty.rs | 4 |
3 files changed, 22 insertions, 0 deletions
diff --git a/compiler/rustc_smir/src/rustc_smir/mod.rs b/compiler/rustc_smir/src/rustc_smir/mod.rs index 321ee790509..141a3efe964 100644 --- a/compiler/rustc_smir/src/rustc_smir/mod.rs +++ b/compiler/rustc_smir/src/rustc_smir/mod.rs @@ -135,6 +135,23 @@ impl<'tcx> Context for Tables<'tcx> { .collect(), } } + + fn explicit_predicates_of( + &mut self, + def_id: stable_mir::DefId, + ) -> stable_mir::ty::GenericPredicates { + let def_id = self[def_id]; + let ty::GenericPredicates { parent, predicates } = self.tcx.explicit_predicates_of(def_id); + stable_mir::ty::GenericPredicates { + parent: parent.map(|did| self.trait_def(did)), + predicates: predicates + .iter() + .map(|(clause, span)| { + (clause.as_predicate().kind().skip_binder().stable(self), span.stable(self)) + }) + .collect(), + } + } } #[derive(Clone)] diff --git a/compiler/rustc_smir/src/stable_mir/mod.rs b/compiler/rustc_smir/src/stable_mir/mod.rs index 508e3aa1291..ef5901482d8 100644 --- a/compiler/rustc_smir/src/stable_mir/mod.rs +++ b/compiler/rustc_smir/src/stable_mir/mod.rs @@ -149,6 +149,7 @@ pub trait Context { fn trait_impl(&mut self, trait_impl: &ImplDef) -> ImplTrait; fn generics_of(&mut self, def_id: DefId) -> Generics; fn predicates_of(&mut self, def_id: DefId) -> GenericPredicates; + fn explicit_predicates_of(&mut self, def_id: DefId) -> GenericPredicates; /// Get information about the local crate. fn local_crate(&self) -> Crate; /// Retrieve a list of all external crates. diff --git a/compiler/rustc_smir/src/stable_mir/ty.rs b/compiler/rustc_smir/src/stable_mir/ty.rs index 54cba1263b7..76e7beac571 100644 --- a/compiler/rustc_smir/src/stable_mir/ty.rs +++ b/compiler/rustc_smir/src/stable_mir/ty.rs @@ -395,6 +395,10 @@ impl TraitDecl { pub fn predicates_of(&self) -> GenericPredicates { with(|cx| cx.predicates_of(self.def_id.0)) } + + pub fn explicit_predicates_of(&self) -> GenericPredicates { + with(|cx| cx.explicit_predicates_of(self.def_id.0)) + } } pub type ImplTrait = EarlyBinder<TraitRef>; |
