From: Ian Jackson Date: Thu, 14 Nov 2024 22:18:11 +0000 (+0000) Subject: sealed better X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=cb59b7b2d8f605e7eda371bef5ab490e14460e11;p=manually-boxed sealed better --- diff --git a/src/lib.rs b/src/lib.rs index 55d3733..7ce6970 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -61,29 +61,25 @@ pub unsafe trait IsMutToken<'a>: IsRefToken<'a> + Sized + Sealed { mod sealed { pub trait Sealed {} } use sealed::Sealed; -macro_rules! impl_is { { $( - unsafe impl [$($gens:tt)*] $trait:ty, for $ty:ty {} -)* } => { $( - unsafe impl <$($gens )*> $trait for $ty {} - impl <$($gens )*> Sealed for $ty {} -)* } } -impl_is! { - -unsafe impl['a] IsRefToken<'a>, for &'a NoAliasSingleton {} -unsafe impl['a] IsRefToken<'a>, for &'a mut NoAliasSingleton {} -unsafe impl['a] IsMutToken<'a>, for &'a mut NoAliasSingleton {} -unsafe impl['a] IsRefToken<'a>, for RefToken<'a> {} -unsafe impl['a] IsRefToken<'a>, for MutToken<'a> {} -unsafe impl['a] IsMutToken<'a>, for MutToken<'a> {} -unsafe impl['a, A: IsRefToken<'a>] IsRefToken<'a>, for &'a A {} - -unsafe impl['r, 'a, 'aa, A] IsRefToken<'r>, for &'aa mut A +unsafe impl<'a> IsRefToken<'a> for &'a NoAliasSingleton {} +unsafe impl<'a> IsRefToken<'a> for &'a mut NoAliasSingleton {} +unsafe impl<'a> IsMutToken<'a> for &'a mut NoAliasSingleton {} +unsafe impl<'a> IsRefToken<'a> for RefToken<'a> {} +unsafe impl<'a> IsRefToken<'a> for MutToken<'a> {} +unsafe impl<'a> IsMutToken<'a> for MutToken<'a> {} +unsafe impl<'a, A: IsRefToken<'a>> IsRefToken<'a> for &'a A {} + +unsafe impl<'r, 'a, 'aa, A> IsRefToken<'r> for &'aa mut A where A: IsMutToken<'a>, 'a: 'r, 'aa: 'r {} -unsafe impl['r, 'a, 'aa, A] IsMutToken<'r>, for &'aa mut A +unsafe impl<'r, 'a, 'aa, A> IsMutToken<'r> for &'aa mut A where A: IsMutToken<'a>, 'a: 'r, 'aa: 'r {} -} +impl Sealed for RefToken<'_> {} +impl Sealed for MutToken<'_> {} +impl Sealed for NoAliasSingleton {} +impl Sealed for & T {} +impl Sealed for &mut T {} /// `&NoAliasSingleton`, but a ZST ///