Simplify StaticDef to Instance conversion

This commit is contained in:
Celina G. Val 2023-12-06 15:08:08 -08:00
parent 281b65aad9
commit e16ebdbb06
3 changed files with 7 additions and 6 deletions

View File

@ -322,9 +322,9 @@ impl<'tcx> Context for TablesWrapper<'tcx> {
matches!(instance.def, ty::InstanceDef::DropGlue(_, None))
}
fn mono_instance(&self, item: stable_mir::CrateItem) -> stable_mir::mir::mono::Instance {
fn mono_instance(&self, def_id: stable_mir::DefId) -> stable_mir::mir::mono::Instance {
let mut tables = self.0.borrow_mut();
let def_id = tables[item.0];
let def_id = tables[def_id];
Instance::mono(tables.tcx, def_id).stable(&mut *tables)
}

View File

@ -125,7 +125,7 @@ pub trait Context {
/// Convert a non-generic crate item into an instance.
/// This function will panic if the item is generic.
fn mono_instance(&self, item: CrateItem) -> Instance;
fn mono_instance(&self, def_id: DefId) -> Instance;
/// Item requires monomorphization.
fn requires_monomorphization(&self, def_id: DefId) -> bool;

View File

@ -143,8 +143,9 @@ impl TryFrom<CrateItem> for Instance {
fn try_from(item: CrateItem) -> Result<Self, Self::Error> {
with(|context| {
if !context.requires_monomorphization(item.0) {
Ok(context.mono_instance(item))
let def_id = item.def_id();
if !context.requires_monomorphization(def_id) {
Ok(context.mono_instance(def_id))
} else {
Err(Error::new("Item requires monomorphization".to_string()))
}
@ -223,7 +224,7 @@ impl TryFrom<Instance> for StaticDef {
impl From<StaticDef> for Instance {
fn from(value: StaticDef) -> Self {
// A static definition should always be convertible to an instance.
Instance::try_from(CrateItem::from(value)).unwrap()
with(|cx| cx.mono_instance(value.def_id()))
}
}