about summary refs log tree commit diff
diff options
context:
space:
mode:
authorouz-a <ouz.agz@gmail.com>2023-09-21 12:01:30 +0300
committerouz-a <ouz.agz@gmail.com>2023-09-28 11:19:51 +0300
commite49aa04000b3443a8cf1650ee0a75d48ddf115d0 (patch)
tree75a9e97c0a9d603a7d0ebc04e91522f2e92bbf44
parent02b01a46de62d26a2769b7546481a6ab08da82b8 (diff)
downloadrust-e49aa04000b3443a8cf1650ee0a75d48ddf115d0.tar.gz
rust-e49aa04000b3443a8cf1650ee0a75d48ddf115d0.zip
add RegionDef
-rw-r--r--compiler/rustc_smir/src/rustc_internal/mod.rs4
-rw-r--r--compiler/rustc_smir/src/rustc_smir/mod.rs28
-rw-r--r--compiler/stable_mir/src/ty.rs9
3 files changed, 37 insertions, 4 deletions
diff --git a/compiler/rustc_smir/src/rustc_internal/mod.rs b/compiler/rustc_smir/src/rustc_internal/mod.rs
index 441aafd1257..1a9dea99f64 100644
--- a/compiler/rustc_smir/src/rustc_internal/mod.rs
+++ b/compiler/rustc_smir/src/rustc_internal/mod.rs
@@ -86,6 +86,10 @@ impl<'tcx> Tables<'tcx> {
         stable_mir::ty::ImplDef(self.create_def_id(did))
     }
 
+    pub fn region_def(&mut self, did: DefId) -> stable_mir::ty::RegionDef {
+        stable_mir::ty::RegionDef(self.create_def_id(did))
+    }
+
     pub fn prov(&mut self, aid: AllocId) -> stable_mir::ty::Prov {
         stable_mir::ty::Prov(self.create_alloc_id(aid))
     }
diff --git a/compiler/rustc_smir/src/rustc_smir/mod.rs b/compiler/rustc_smir/src/rustc_smir/mod.rs
index 5ff17613b4e..890faa4538e 100644
--- a/compiler/rustc_smir/src/rustc_smir/mod.rs
+++ b/compiler/rustc_smir/src/rustc_smir/mod.rs
@@ -7,7 +7,12 @@
 //!
 //! For now, we are developing everything inside `rustc`, thus, we keep this module private.
 
-use hir::def::DefKind;
+use crate::rustc_internal::{self, opaque};
+use crate::stable_mir::mir::{CopyNonOverlapping, UserTypeProjection, VariantIdx};
+use crate::stable_mir::ty::{
+    EarlyBoundRegion, FloatTy, GenericParamDef, IntTy, Movability, RigidTy, Span, TyKind, UintTy,
+};
+use crate::stable_mir::{self, CompilerError, Context};
 use rustc_hir as hir;
 use rustc_middle::mir;
 use rustc_middle::mir::interpret::{alloc_range, AllocId};
@@ -1506,6 +1511,27 @@ impl<'tcx> Stable<'tcx> for ty::Region<'tcx> {
     }
 }
 
+impl<'tcx> Stable<'tcx> for ty::RegionKind<'tcx> {
+    type T = stable_mir::ty::RegionKind;
+
+    fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
+        match self {
+            ty::ReEarlyBound(early_reg) => RegionKind::ReEarlyBound(EarlyBoundRegion {
+                def_id: tables.region_def(early_reg.def_id),
+                index: early_reg.index,
+                name: early_reg.name.to_string(),
+            }),
+            ty::ReLateBound(_, _) => todo!(),
+            ty::ReFree(_) => todo!(),
+            ty::ReStatic => todo!(),
+            ty::ReVar(_) => todo!(),
+            ty::RePlaceholder(_) => todo!(),
+            ty::ReErased => todo!(),
+            ty::ReError(_) => todo!(),
+        }
+    }
+}
+
 impl<'tcx> Stable<'tcx> for rustc_span::Span {
     type T = stable_mir::ty::Span;
 
diff --git a/compiler/stable_mir/src/ty.rs b/compiler/stable_mir/src/ty.rs
index b7cd57f753a..f6f433c2bad 100644
--- a/compiler/stable_mir/src/ty.rs
+++ b/compiler/stable_mir/src/ty.rs
@@ -38,7 +38,7 @@ pub(crate) struct Region {
     kind: RegionKind,
 }
 
-enum RegionKind {
+pub enum RegionKind {
     ReEarlyBound(EarlyBoundRegion),
     ReLateBound(DebruijnIndex, BoundRegion),
     ReFree(FreeRegion),
@@ -52,7 +52,7 @@ enum RegionKind {
 pub(crate) type DebruijnIndex = u32;
 
 pub struct EarlyBoundRegion {
-    pub def_id: DefId,
+    pub def_id: RegionDef,
     pub index: u32,
     pub name: Symbol,
 }
@@ -65,7 +65,7 @@ pub struct BoundRegion {
 }
 
 pub struct FreeRegion {
-    pub scope: DefId,
+    pub scope: RegionDef,
     pub bound_region: BoundRegionKind,
 }
 
@@ -197,6 +197,9 @@ pub struct ConstDef(pub DefId);
 #[derive(Clone, PartialEq, Eq, Debug)]
 pub struct ImplDef(pub DefId);
 
+#[derive(Clone, PartialEq, Eq, Debug)]
+pub struct RegionDef(pub(crate) DefId);
+
 #[derive(Clone, Debug)]
 pub struct GenericArgs(pub Vec<GenericArgKind>);