Skip to content

Commit 44bee0a

Browse files
committed
Implement the conversion between internal things and stable things related to AssocItem.
1 parent eda722c commit 44bee0a

File tree

3 files changed

+125
-5
lines changed

3 files changed

+125
-5
lines changed

compiler/rustc_smir/src/rustc_internal/internal.rs

+64-4
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ use stable_mir::mir::alloc::AllocId;
1212
use stable_mir::mir::mono::{Instance, MonoItem, StaticDef};
1313
use stable_mir::mir::{BinOp, Mutability, Place, ProjectionElem, RawPtrKind, Safety, UnOp};
1414
use stable_mir::ty::{
15-
Abi, AdtDef, Binder, BoundRegionKind, BoundTyKind, BoundVariableKind, ClosureKind, DynKind,
16-
ExistentialPredicate, ExistentialProjection, ExistentialTraitRef, FloatTy, FnSig,
17-
GenericArgKind, GenericArgs, IndexedVal, IntTy, MirConst, Movability, Pattern, Region, RigidTy,
18-
Span, TermKind, TraitRef, Ty, TyConst, UintTy, VariantDef, VariantIdx,
15+
Abi, AdtDef, AssocItem, AssocItemContainer, AssocKind, Binder, BoundRegionKind, BoundTyKind,
16+
BoundVariableKind, ClosureKind, DynKind, ExistentialPredicate, ExistentialProjection,
17+
ExistentialTraitRef, FloatTy, FnSig, GenericArgKind, GenericArgs, ImplTraitInTraitData,
18+
IndexedVal, IntTy, MirConst, Movability, Pattern, Region, RigidTy, Span, TermKind, TraitRef,
19+
Ty, TyConst, UintTy, VariantDef, VariantIdx,
1920
};
2021
use stable_mir::{CrateItem, CrateNum, DefId};
2122

@@ -570,6 +571,65 @@ impl RustcInternal for ProjectionElem {
570571
}
571572
}
572573

574+
impl RustcInternal for AssocItem {
575+
type T<'tcx> = rustc_middle::ty::AssocItem;
576+
577+
fn internal<'tcx>(&self, tables: &mut Tables<'_>, tcx: TyCtxt<'tcx>) -> Self::T<'tcx> {
578+
rustc_middle::ty::AssocItem {
579+
def_id: self.def_id.0.internal(tables, tcx),
580+
name: Symbol::intern(&self.name),
581+
kind: self.kind.internal(tables, tcx),
582+
container: self.container.internal(tables, tcx),
583+
trait_item_def_id: self.trait_item_def_id.map(|did| did.0.internal(tables, tcx)),
584+
fn_has_self_parameter: self.fn_has_self_parameter,
585+
opt_rpitit_info: self.opt_rpitit_info.map(|did| did.internal(tables, tcx)),
586+
}
587+
}
588+
}
589+
590+
impl RustcInternal for AssocItemContainer {
591+
type T<'tcx> = rustc_middle::ty::AssocItemContainer;
592+
593+
fn internal<'tcx>(&self, _tables: &mut Tables<'_>, _tcx: TyCtxt<'tcx>) -> Self::T<'tcx> {
594+
match self {
595+
AssocItemContainer::Trait => rustc_middle::ty::AssocItemContainer::Trait,
596+
AssocItemContainer::Impl => rustc_middle::ty::AssocItemContainer::Impl,
597+
}
598+
}
599+
}
600+
601+
impl RustcInternal for AssocKind {
602+
type T<'tcx> = rustc_middle::ty::AssocKind;
603+
604+
fn internal<'tcx>(&self, _tables: &mut Tables<'_>, _tcx: TyCtxt<'tcx>) -> Self::T<'tcx> {
605+
match self {
606+
AssocKind::Const => rustc_middle::ty::AssocKind::Const,
607+
AssocKind::Fn => rustc_middle::ty::AssocKind::Fn,
608+
AssocKind::Type => rustc_middle::ty::AssocKind::Type,
609+
}
610+
}
611+
}
612+
613+
impl RustcInternal for ImplTraitInTraitData {
614+
type T<'tcx> = rustc_middle::ty::ImplTraitInTraitData;
615+
616+
fn internal<'tcx>(&self, tables: &mut Tables<'_>, tcx: TyCtxt<'tcx>) -> Self::T<'tcx> {
617+
match self {
618+
ImplTraitInTraitData::Trait { fn_def_id, opaque_def_id } => {
619+
rustc_middle::ty::ImplTraitInTraitData::Trait {
620+
fn_def_id: fn_def_id.0.internal(tables, tcx),
621+
opaque_def_id: opaque_def_id.0.internal(tables, tcx),
622+
}
623+
}
624+
ImplTraitInTraitData::Impl { fn_def_id } => {
625+
rustc_middle::ty::ImplTraitInTraitData::Impl {
626+
fn_def_id: fn_def_id.0.internal(tables, tcx),
627+
}
628+
}
629+
}
630+
}
631+
}
632+
573633
impl RustcInternal for BinOp {
574634
type T<'tcx> = rustc_middle::mir::BinOp;
575635

compiler/rustc_smir/src/rustc_smir/convert/ty.rs

+60
Original file line numberDiff line numberDiff line change
@@ -890,3 +890,63 @@ impl<'tcx> Stable<'tcx> for rustc_session::cstore::ForeignModule {
890890
}
891891
}
892892
}
893+
894+
impl<'tcx> Stable<'tcx> for ty::AssocKind {
895+
type T = stable_mir::ty::AssocKind;
896+
897+
fn stable(&self, _tables: &mut Tables<'_>) -> Self::T {
898+
use stable_mir::ty::AssocKind;
899+
match self {
900+
ty::AssocKind::Const => AssocKind::Const,
901+
ty::AssocKind::Fn => AssocKind::Fn,
902+
ty::AssocKind::Type => AssocKind::Type,
903+
}
904+
}
905+
}
906+
907+
impl<'tcx> Stable<'tcx> for ty::AssocItemContainer {
908+
type T = stable_mir::ty::AssocItemContainer;
909+
910+
fn stable(&self, _tables: &mut Tables<'_>) -> Self::T {
911+
use stable_mir::ty::AssocItemContainer;
912+
match self {
913+
ty::AssocItemContainer::Trait => AssocItemContainer::Trait,
914+
ty::AssocItemContainer::Impl => AssocItemContainer::Impl,
915+
}
916+
}
917+
}
918+
919+
impl<'tcx> Stable<'tcx> for ty::AssocItem {
920+
type T = stable_mir::ty::AssocItem;
921+
922+
fn stable(&self, tables: &mut Tables<'_>) -> Self::T {
923+
stable_mir::ty::AssocItem {
924+
def_id: tables.assoc_def(self.def_id),
925+
name: self.name.to_string(),
926+
kind: self.kind.stable(tables),
927+
container: self.container.stable(tables),
928+
trait_item_def_id: self.trait_item_def_id.map(|did| tables.assoc_def(did)),
929+
fn_has_self_parameter: self.fn_has_self_parameter,
930+
opt_rpitit_info: self.opt_rpitit_info.map(|rpitit| rpitit.stable(tables)),
931+
}
932+
}
933+
}
934+
935+
impl<'tcx> Stable<'tcx> for ty::ImplTraitInTraitData {
936+
type T = stable_mir::ty::ImplTraitInTraitData;
937+
938+
fn stable(&self, tables: &mut Tables<'_>) -> Self::T {
939+
use stable_mir::ty::ImplTraitInTraitData;
940+
match self {
941+
ty::ImplTraitInTraitData::Trait { fn_def_id, opaque_def_id } => {
942+
ImplTraitInTraitData::Trait {
943+
fn_def_id: tables.fn_def(*fn_def_id),
944+
opaque_def_id: tables.opaque_def(*opaque_def_id),
945+
}
946+
}
947+
ty::ImplTraitInTraitData::Impl { fn_def_id } => {
948+
ImplTraitInTraitData::Impl { fn_def_id: tables.fn_def(*fn_def_id) }
949+
}
950+
}
951+
}
952+
}

compiler/stable_mir/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use std::{fmt, io};
2323
use serde::Serialize;
2424

2525
use crate::compiler_interface::with;
26-
pub use crate::crate_def::{CrateDef, CrateDefType, DefId};
26+
pub use crate::crate_def::{CrateDef, CrateDefItems, CrateDefType, DefId};
2727
pub use crate::error::*;
2828
use crate::mir::mono::StaticDef;
2929
use crate::mir::{Body, Mutability};

0 commit comments

Comments
 (0)