Allow fetching the SMIR body of FnDefs

This commit is contained in:
Oli Scherer 2023-09-04 15:18:42 +00:00
parent 98d26d9c4d
commit 202fbed1a6
3 changed files with 15 additions and 5 deletions

View File

@ -78,8 +78,8 @@ impl<'tcx> Context for Tables<'tcx> {
impl_trait.stable(self) impl_trait.stable(self)
} }
fn mir_body(&mut self, item: &stable_mir::CrateItem) -> stable_mir::mir::Body { fn mir_body(&mut self, item: stable_mir::DefId) -> stable_mir::mir::Body {
let def_id = self[item.0]; let def_id = self[item];
let mir = self.tcx.optimized_mir(def_id); let mir = self.tcx.optimized_mir(def_id);
stable_mir::mir::Body { stable_mir::mir::Body {
blocks: mir blocks: mir

View File

@ -87,7 +87,7 @@ pub struct CrateItem(pub(crate) DefId);
impl CrateItem { impl CrateItem {
pub fn body(&self) -> mir::Body { pub fn body(&self) -> mir::Body {
with(|cx| cx.mir_body(self)) with(|cx| cx.mir_body(self.0))
} }
} }
@ -138,7 +138,7 @@ pub trait Context {
fn entry_fn(&mut self) -> Option<CrateItem>; fn entry_fn(&mut self) -> Option<CrateItem>;
/// Retrieve all items of the local crate that have a MIR associated with them. /// Retrieve all items of the local crate that have a MIR associated with them.
fn all_local_items(&mut self) -> CrateItems; fn all_local_items(&mut self) -> CrateItems;
fn mir_body(&mut self, item: &CrateItem) -> mir::Body; fn mir_body(&mut self, item: DefId) -> mir::Body;
fn all_trait_decls(&mut self) -> TraitDecls; fn all_trait_decls(&mut self) -> TraitDecls;
fn trait_decl(&mut self, trait_def: &TraitDef) -> TraitDecl; fn trait_decl(&mut self, trait_def: &TraitDef) -> TraitDecl;
fn all_trait_impls(&mut self) -> ImplTraitDecls; fn all_trait_impls(&mut self) -> ImplTraitDecls;

View File

@ -1,4 +1,8 @@
use super::{mir::Mutability, mir::Safety, with, AllocId, DefId}; use super::{
mir::Safety,
mir::{Body, Mutability},
with, AllocId, DefId,
};
use crate::rustc_internal::Opaque; use crate::rustc_internal::Opaque;
#[derive(Copy, Clone, Debug)] #[derive(Copy, Clone, Debug)]
@ -95,6 +99,12 @@ pub struct ForeignDef(pub(crate) DefId);
#[derive(Clone, Copy, PartialEq, Eq, Debug)] #[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub struct FnDef(pub(crate) DefId); pub struct FnDef(pub(crate) DefId);
impl FnDef {
pub fn body(&self) -> Body {
with(|ctx| ctx.mir_body(self.0))
}
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)] #[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub struct ClosureDef(pub(crate) DefId); pub struct ClosureDef(pub(crate) DefId);