summaryrefslogtreecommitdiffstats
path: root/vendor/chalk-engine/src/normalize_deep.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/chalk-engine/src/normalize_deep.rs')
-rw-r--r--vendor/chalk-engine/src/normalize_deep.rs46
1 files changed, 23 insertions, 23 deletions
diff --git a/vendor/chalk-engine/src/normalize_deep.rs b/vendor/chalk-engine/src/normalize_deep.rs
index 0c4a01ccb..9f36f3ce5 100644
--- a/vendor/chalk-engine/src/normalize_deep.rs
+++ b/vendor/chalk-engine/src/normalize_deep.rs
@@ -1,9 +1,11 @@
+use chalk_derive::FallibleTypeFolder;
use chalk_ir::fold::shift::Shift;
-use chalk_ir::fold::{Fold, Folder};
+use chalk_ir::fold::{TypeFoldable, TypeFolder};
use chalk_ir::interner::Interner;
use chalk_ir::*;
use chalk_solve::infer::InferenceTable;
+#[derive(FallibleTypeFolder)]
pub(crate) struct DeepNormalizer<'table, I: Interner> {
table: &'table mut InferenceTable<I>,
interner: I,
@@ -21,13 +23,13 @@ impl<I: Interner> DeepNormalizer<'_, I> {
/// See also `InferenceTable::canonicalize`, which -- during real
/// processing -- is often used to capture the "current state" of
/// variables.
- pub fn normalize_deep<T: Fold<I>>(
+ pub fn normalize_deep<T: TypeFoldable<I>>(
table: &mut InferenceTable<I>,
interner: I,
value: T,
- ) -> T::Result {
+ ) -> T {
value
- .fold_with(
+ .try_fold_with(
&mut DeepNormalizer { interner, table },
DebruijnIndex::INNERMOST,
)
@@ -35,10 +37,8 @@ impl<I: Interner> DeepNormalizer<'_, I> {
}
}
-impl<I: Interner> Folder<I> for DeepNormalizer<'_, I> {
- type Error = NoSolution;
-
- fn as_dyn(&mut self) -> &mut dyn Folder<I, Error = Self::Error> {
+impl<I: Interner> TypeFolder<I> for DeepNormalizer<'_, I> {
+ fn as_dyn(&mut self) -> &mut dyn TypeFolder<I> {
self
}
@@ -47,18 +47,18 @@ impl<I: Interner> Folder<I> for DeepNormalizer<'_, I> {
var: InferenceVar,
kind: TyVariableKind,
_outer_binder: DebruijnIndex,
- ) -> Fallible<Ty<I>> {
+ ) -> Ty<I> {
let interner = self.interner;
match self.table.probe_var(var) {
- Some(ty) => Ok(ty
+ Some(ty) => ty
.assert_ty_ref(interner)
.clone()
- .fold_with(self, DebruijnIndex::INNERMOST)?
- .shifted_in(interner)), // FIXME shift
+ .fold_with(self, DebruijnIndex::INNERMOST)
+ .shifted_in(interner), // FIXME shift
None => {
// Normalize all inference vars which have been unified into a
// single variable. Ena calls this the "root" variable.
- Ok(self.table.inference_var_root(var).to_ty(interner, kind))
+ self.table.inference_var_root(var).to_ty(interner, kind)
}
}
}
@@ -67,15 +67,15 @@ impl<I: Interner> Folder<I> for DeepNormalizer<'_, I> {
&mut self,
var: InferenceVar,
_outer_binder: DebruijnIndex,
- ) -> Fallible<Lifetime<I>> {
+ ) -> Lifetime<I> {
let interner = self.interner;
match self.table.probe_var(var) {
- Some(l) => Ok(l
+ Some(l) => l
.assert_lifetime_ref(interner)
.clone()
- .fold_with(self, DebruijnIndex::INNERMOST)?
- .shifted_in(interner)),
- None => Ok(var.to_lifetime(interner)), // FIXME shift
+ .fold_with(self, DebruijnIndex::INNERMOST)
+ .shifted_in(interner),
+ None => var.to_lifetime(interner), // FIXME shift
}
}
@@ -84,15 +84,15 @@ impl<I: Interner> Folder<I> for DeepNormalizer<'_, I> {
ty: Ty<I>,
var: InferenceVar,
_outer_binder: DebruijnIndex,
- ) -> Fallible<Const<I>> {
+ ) -> Const<I> {
let interner = self.interner;
match self.table.probe_var(var) {
- Some(c) => Ok(c
+ Some(c) => c
.assert_const_ref(interner)
.clone()
- .fold_with(self, DebruijnIndex::INNERMOST)?
- .shifted_in(interner)),
- None => Ok(var.to_const(interner, ty)), // FIXME shift
+ .fold_with(self, DebruijnIndex::INNERMOST)
+ .shifted_in(interner),
+ None => var.to_const(interner, ty), // FIXME shift
}
}