Diffstat (limited to 'src/walk.rs')
| -rw-r--r-- | src/walk.rs | 15 |
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>( |