merge impl_arena_allocatable & declare_arena

This commit is contained in:
Mazdak Farrokhzad 2020-03-21 01:02:46 +01:00
parent 6aff92a7d2
commit 093bcf2e7a

View file

@ -187,6 +187,16 @@ macro_rules! declare_arena {
drop: DropArena,
$($name: arena_for_type!($a[$ty]),)*
}
$(
impl ArenaAllocatable for $ty {}
unsafe impl<$tcx> ArenaField<$tcx> for $ty {
#[inline]
fn arena<'a>(_arena: &'a Arena<$tcx>) -> Option<&'a TypedArena<Self>> {
which_arena_for_type!($a[&_arena.$name])
}
}
)*
}
}
@ -202,24 +212,8 @@ macro_rules! which_arena_for_type {
};
}
macro_rules! impl_arena_allocatable {
([], [$($a:tt $name:ident: $ty:ty,)*], $tcx:lifetime) => {
$(
impl ArenaAllocatable for $ty {}
unsafe impl<$tcx> ArenaField<$tcx> for $ty {
#[inline]
fn arena<'a>(_arena: &'a Arena<$tcx>) -> Option<&'a TypedArena<Self>> {
which_arena_for_type!($a[&_arena.$name])
}
}
)*
}
}
arena_types!(declare_arena, [], 'tcx);
arena_types!(impl_arena_allocatable, [], 'tcx);
#[marker]
pub trait ArenaAllocatable {}