simplify fold

This commit is contained in:
ouz-a 2023-09-28 19:43:28 +03:00
parent 9f2e15d232
commit 8c41cd0d78

View File

@ -1,9 +1,6 @@
use std::ops::ControlFlow;
use crate::{
ty::{self, BoundRegion, BoundRegionKind},
Opaque,
};
use crate::Opaque;
use super::ty::{
Allocation, Binder, Const, ConstDef, ConstantKind, ExistentialPredicate, FnSig, GenericArgKind,
@ -116,36 +113,8 @@ impl Foldable for Region {
fn fold<V: Folder>(&self, folder: &mut V) -> ControlFlow<V::Break, Self> {
folder.fold_reg(self)
}
fn super_fold<V: Folder>(&self, folder: &mut V) -> ControlFlow<V::Break, Self> {
let mut kind = self.kind.clone();
match &mut kind {
crate::ty::RegionKind::ReEarlyBound(_) => {}
crate::ty::RegionKind::ReLateBound(_, bound_reg) => {
*bound_reg = bound_reg.fold(folder)?
}
crate::ty::RegionKind::ReStatic => {}
crate::ty::RegionKind::RePlaceholder(bound_reg) => {
bound_reg.bound = bound_reg.bound.fold(folder)?
}
crate::ty::RegionKind::ReErased => {}
}
ControlFlow::Continue(ty::Region { kind: kind }.into())
}
}
impl Foldable for BoundRegion {
fn super_fold<V: Folder>(&self, folder: &mut V) -> ControlFlow<V::Break, Self> {
ControlFlow::Continue(BoundRegion { var: self.var, kind: self.kind.fold(folder)? })
}
}
impl Foldable for BoundRegionKind {
fn super_fold<V: Folder>(&self, _folder: &mut V) -> ControlFlow<V::Break, Self> {
match self {
BoundRegionKind::BrAnon => ControlFlow::Continue(self.clone()),
BoundRegionKind::BrNamed(_, _) => ControlFlow::Continue(self.clone()),
BoundRegionKind::BrEnv => ControlFlow::Continue(self.clone()),
}
fn super_fold<V: Folder>(&self, _: &mut V) -> ControlFlow<V::Break, Self> {
ControlFlow::Continue(self.clone())
}
}