| 
8 | 8 | //! For now, we are developing everything inside `rustc`, thus, we keep this module private.  | 
9 | 9 | 
  | 
10 | 10 | use crate::rustc_internal::{self, opaque};  | 
11 |  | -use crate::stable_mir::ty::{FloatTy, IntTy, RigidTy, TyKind, UintTy};  | 
 | 11 | +use crate::stable_mir::ty::{AdtSubsts, FloatTy, GenericArgKind, IntTy, RigidTy, TyKind, UintTy};  | 
12 | 12 | use crate::stable_mir::{self, Context};  | 
13 | 13 | use rustc_middle::mir;  | 
14 | 14 | use rustc_middle::ty::{self, Ty, TyCtxt};  | 
@@ -94,7 +94,25 @@ impl<'tcx> Tables<'tcx> {  | 
94 | 94 |                 ty::FloatTy::F32 => TyKind::RigidTy(RigidTy::Float(FloatTy::F32)),  | 
95 | 95 |                 ty::FloatTy::F64 => TyKind::RigidTy(RigidTy::Float(FloatTy::F64)),  | 
96 | 96 |             },  | 
97 |  | -            ty::Adt(_, _) => todo!(),  | 
 | 97 | +            ty::Adt(adt_def, substs) => TyKind::RigidTy(RigidTy::Adt(  | 
 | 98 | +                rustc_internal::adt_def(adt_def.did()),  | 
 | 99 | +                AdtSubsts(  | 
 | 100 | +                    substs  | 
 | 101 | +                        .iter()  | 
 | 102 | +                        .map(|arg| match arg.unpack() {  | 
 | 103 | +                            ty::GenericArgKind::Lifetime(region) => {  | 
 | 104 | +                                GenericArgKind::Lifetime(opaque(®ion))  | 
 | 105 | +                            }  | 
 | 106 | +                            ty::GenericArgKind::Type(ty) => {  | 
 | 107 | +                                GenericArgKind::Type(self.intern_ty(ty))  | 
 | 108 | +                            }  | 
 | 109 | +                            ty::GenericArgKind::Const(const_) => {  | 
 | 110 | +                                GenericArgKind::Const(opaque(&const_))  | 
 | 111 | +                            }  | 
 | 112 | +                        })  | 
 | 113 | +                        .collect(),  | 
 | 114 | +                ),  | 
 | 115 | +            )),  | 
98 | 116 |             ty::Foreign(_) => todo!(),  | 
99 | 117 |             ty::Str => todo!(),  | 
100 | 118 |             ty::Array(_, _) => todo!(),  | 
@@ -149,13 +167,6 @@ pub(crate) trait Stable {  | 
149 | 167 |     fn stable(&self) -> Self::T;  | 
150 | 168 | }  | 
151 | 169 | 
 
  | 
152 |  | -impl Stable for DefId {  | 
153 |  | -    type T = stable_mir::CrateItem;  | 
154 |  | -    fn stable(&self) -> Self::T {  | 
155 |  | -        rustc_internal::crate_item(*self)  | 
156 |  | -    }  | 
157 |  | -}  | 
158 |  | - | 
159 | 170 | impl<'tcx> Stable for mir::Statement<'tcx> {  | 
160 | 171 |     type T = stable_mir::mir::Statement;  | 
161 | 172 |     fn stable(&self) -> Self::T {  | 
@@ -190,7 +201,9 @@ impl<'tcx> Stable for mir::Rvalue<'tcx> {  | 
190 | 201 |             Ref(region, kind, place) => {  | 
191 | 202 |                 stable_mir::mir::Rvalue::Ref(opaque(region), kind.stable(), place.stable())  | 
192 | 203 |             }  | 
193 |  | -            ThreadLocalRef(def_id) => stable_mir::mir::Rvalue::ThreadLocalRef(def_id.stable()),  | 
 | 204 | +            ThreadLocalRef(def_id) => {  | 
 | 205 | +                stable_mir::mir::Rvalue::ThreadLocalRef(rustc_internal::crate_item(*def_id))  | 
 | 206 | +            }  | 
194 | 207 |             AddressOf(mutability, place) => {  | 
195 | 208 |                 stable_mir::mir::Rvalue::AddressOf(mutability.stable(), place.stable())  | 
196 | 209 |             }  | 
 | 
0 commit comments