]> git.proxmox.com Git - rustc.git/blobdiff - vendor/chalk-ir-0.55.0/src/visit/binder_impls.rs
Merge tag 'debian/1.52.1+dfsg1-1_exp2' into proxmox/buster
[rustc.git] / vendor / chalk-ir-0.55.0 / src / visit / binder_impls.rs
diff --git a/vendor/chalk-ir-0.55.0/src/visit/binder_impls.rs b/vendor/chalk-ir-0.55.0/src/visit/binder_impls.rs
new file mode 100644 (file)
index 0000000..3907dcb
--- /dev/null
@@ -0,0 +1,54 @@
+//! This module contains impls of `Visit` for those types that
+//! introduce binders.
+//!
+//! The more interesting impls of `Visit` remain in the `visit` module.
+
+use crate::interner::HasInterner;
+use crate::{Binders, Canonical, ControlFlow, DebruijnIndex, FnPointer, Interner, Visit, Visitor};
+
+impl<I: Interner> Visit<I> for FnPointer<I> {
+    fn visit_with<'i, B>(
+        &self,
+        visitor: &mut dyn Visitor<'i, I, BreakTy = B>,
+        outer_binder: DebruijnIndex,
+    ) -> ControlFlow<B>
+    where
+        I: 'i,
+    {
+        self.substitution
+            .visit_with(visitor, outer_binder.shifted_in())
+    }
+}
+
+impl<T, I: Interner> Visit<I> for Binders<T>
+where
+    T: HasInterner + Visit<I>,
+{
+    fn visit_with<'i, B>(
+        &self,
+        visitor: &mut dyn Visitor<'i, I, BreakTy = B>,
+        outer_binder: DebruijnIndex,
+    ) -> ControlFlow<B>
+    where
+        I: 'i,
+    {
+        self.value.visit_with(visitor, outer_binder.shifted_in())
+    }
+}
+
+impl<I, T> Visit<I> for Canonical<T>
+where
+    I: Interner,
+    T: HasInterner<Interner = I> + Visit<I>,
+{
+    fn visit_with<'i, B>(
+        &self,
+        visitor: &mut dyn Visitor<'i, I, BreakTy = B>,
+        outer_binder: DebruijnIndex,
+    ) -> ControlFlow<B>
+    where
+        I: 'i,
+    {
+        self.value.visit_with(visitor, outer_binder.shifted_in())
+    }
+}