|
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