about summary refs log tree commit diff
diff options
context:
space:
mode:
authorouz-a <ouz.agz@gmail.com>2023-09-21 12:18:10 +0300
committerouz-a <ouz.agz@gmail.com>2023-09-28 11:19:51 +0300
commitd83559939cf89f717d1fcd8266c5f457df6e37dd (patch)
treec5678992ff9095dc9f97d6fdec6ea525f1edbd80
parent5dc2214884483496ef8cf4a8fa7f1be189669974 (diff)
downloadrust-d83559939cf89f717d1fcd8266c5f457df6e37dd.tar.gz
rust-d83559939cf89f717d1fcd8266c5f457df6e37dd.zip
make reg public and add visit, fold
-rw-r--r--compiler/stable_mir/src/fold.rs8
-rw-r--r--compiler/stable_mir/src/ty.rs9
-rw-r--r--compiler/stable_mir/src/visitor.rs8
3 files changed, 22 insertions, 3 deletions
diff --git a/compiler/stable_mir/src/fold.rs b/compiler/stable_mir/src/fold.rs
index 16ae62311aa..edaf55f2aeb 100644
--- a/compiler/stable_mir/src/fold.rs
+++ b/compiler/stable_mir/src/fold.rs
@@ -4,7 +4,7 @@ use crate::Opaque;
 
 use super::ty::{
     Allocation, Binder, Const, ConstDef, ConstantKind, ExistentialPredicate, FnSig, GenericArgKind,
-    GenericArgs, Promoted, RigidTy, TermKind, Ty, TyKind, UnevaluatedConst,
+    GenericArgs, Promoted, Region, RigidTy, TermKind, Ty, TyKind, UnevaluatedConst,
 };
 
 pub trait Folder: Sized {
@@ -106,6 +106,12 @@ impl Foldable for GenericArgs {
     }
 }
 
+impl Foldable for Region {
+    fn super_fold<V: Folder>(&self, _folder: &mut V) -> ControlFlow<V::Break, Self> {
+        ControlFlow::Continue(self.clone())
+    }
+}
+
 impl Foldable for GenericArgKind {
     fn super_fold<V: Folder>(&self, folder: &mut V) -> ControlFlow<V::Break, Self> {
         let mut this = self.clone();
diff --git a/compiler/stable_mir/src/ty.rs b/compiler/stable_mir/src/ty.rs
index a47621337f0..d05fa4a2ed4 100644
--- a/compiler/stable_mir/src/ty.rs
+++ b/compiler/stable_mir/src/ty.rs
@@ -34,10 +34,13 @@ pub struct Const {
 }
 
 type Ident = Opaque;
-pub(crate) struct Region {
+
+#[derive(Debug, Clone)]
+pub struct Region {
     pub kind: RegionKind,
 }
 
+#[derive(Debug, Clone)]
 pub enum RegionKind {
     ReEarlyBound(EarlyBoundRegion),
     ReLateBound(DebruijnIndex, BoundRegion),
@@ -51,6 +54,7 @@ pub enum RegionKind {
 
 pub(crate) type DebruijnIndex = u32;
 
+#[derive(Debug, Clone)]
 pub struct EarlyBoundRegion {
     pub def_id: RegionDef,
     pub index: u32,
@@ -59,11 +63,13 @@ pub struct EarlyBoundRegion {
 
 pub(crate) type BoundVar = u32;
 
+#[derive(Debug, Clone)]
 pub struct BoundRegion {
     pub var: BoundVar,
     pub kind: BoundRegionKind,
 }
 
+#[derive(Debug, Clone)]
 pub struct FreeRegion {
     pub scope: RegionDef,
     pub bound_region: BoundRegionKind,
@@ -73,6 +79,7 @@ pub(crate) type RegionVid = u32;
 
 pub(crate) type UniverseIndex = u32;
 
+#[derive(Debug, Clone)]
 pub struct Placeholder<T> {
     pub universe: UniverseIndex,
     pub bound: T,
diff --git a/compiler/stable_mir/src/visitor.rs b/compiler/stable_mir/src/visitor.rs
index 9c3b4cd994a..8d5a25008d7 100644
--- a/compiler/stable_mir/src/visitor.rs
+++ b/compiler/stable_mir/src/visitor.rs
@@ -4,7 +4,7 @@ use crate::Opaque;
 
 use super::ty::{
     Allocation, Binder, Const, ConstDef, ExistentialPredicate, FnSig, GenericArgKind, GenericArgs,
-    Promoted, RigidTy, TermKind, Ty, UnevaluatedConst,
+    Promoted, Region, RigidTy, TermKind, Ty, UnevaluatedConst,
 };
 
 pub trait Visitor: Sized {
@@ -101,6 +101,12 @@ impl Visitable for GenericArgs {
     }
 }
 
+impl Visitable for Region {
+    fn super_visit<V: Visitor>(&self, _visitor: &mut V) -> ControlFlow<V::Break> {
+        ControlFlow::Continue(())
+    }
+}
+
 impl Visitable for GenericArgKind {
     fn super_visit<V: Visitor>(&self, visitor: &mut V) -> ControlFlow<V::Break> {
         match self {