Diffstat (limited to 'src/walk.rs')
-rw-r--r--src/walk.rs15
1 files changed, 5 insertions, 10 deletions
diff --git a/src/walk.rs b/src/walk.rs
index fa7fcae..8eb5656 100644
--- a/src/walk.rs
+++ b/src/walk.rs
@@ -7,6 +7,7 @@ use effectful::{
effective::Effective,
environment::{DynBind, Environment, NativeForm},
higher_ranked::Mut,
+ SendSync,
};
use crate::{protocol::DynVisitor, Flow};
@@ -61,6 +62,7 @@ pub trait WalkerObjSafe<'ctx, E: Environment>: DynBind<E> {
pub type DynWalkerObjSafe<'a, 'ctx, E> = &'a mut (dyn WalkerObjSafe<'ctx, E> + 'a);
+#[derive(SendSync)]
enum DynWalkerState<'ctx, W: Walker<'ctx, E>, E: Environment> {
Walking,
Pending(W),
@@ -80,20 +82,11 @@ pub enum DynWalkerError<'ctx, W: Walker<'ctx, E>, E: Environment> {
WasWalked(W::Output),
}
+#[derive(SendSync)]
pub struct DynWalkerAdapter<'ctx, W: Walker<'ctx, E>, E: Environment> {
state: DynWalkerState<'ctx, W, E>,
}
-unsafe impl<'ctx, W: Walker<'ctx, E>, E: Environment> IsSend<E::NeedSend>
- for DynWalkerAdapter<'ctx, W, E>
-{
-}
-
-unsafe impl<'ctx, W: Walker<'ctx, E>, E: Environment> IsSync<E::NeedSync>
- for DynWalkerAdapter<'ctx, W, E>
-{
-}
-
impl<'ctx, W: Walker<'ctx, E>, E: Environment> DynWalkerAdapter<'ctx, W, E> {
#[inline(always)]
pub fn new(walker: W) -> Self {
@@ -125,6 +118,8 @@ impl<'ctx, W: Walker<'ctx, E>, E: Environment> DynWalkerAdapter<'ctx, W, E> {
impl<'ctx, W: Walker<'ctx, E>, E: Environment> WalkerObjSafe<'ctx, E>
for DynWalkerAdapter<'ctx, W, E>
+where
+ Self: DynBind<E>,
{
#[inline(always)]
fn walk<'a: 'c, 'b: 'c, 'c>(