diff options
| -rw-r--r-- | compiler/stable_mir/src/fold.rs | 8 | ||||
| -rw-r--r-- | compiler/stable_mir/src/ty.rs | 9 | ||||
| -rw-r--r-- | compiler/stable_mir/src/visitor.rs | 8 |
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 { |
