1#[macro_export]
2macro_rules! rooted {
3 (in($cx:expr) let $($var:ident)+ = $init:expr) => {
4 let mut __root = ::std::mem::MaybeUninit::uninit();
5 let $($var)+ = $crate::gc::RootedGuard::new($cx, &mut __root, $init);
6 };
7 (in($cx:expr) let $($var:ident)+: $type:ty = $init:expr) => {
8 let mut __root = ::std::mem::MaybeUninit::uninit();
9 let $($var)+: $crate::gc::RootedGuard<$type> = $crate::gc::RootedGuard::new($cx, &mut __root, $init);
10 };
11 (in($cx:expr) let $($var:ident)+: $type:ty) => {
12 let mut __root = ::std::mem::MaybeUninit::uninit();
13 let $($var)+: $crate::gc::RootedGuard<$type> = $crate::gc::RootedGuard::new(
16 $cx,
17 &mut __root,
18 unsafe { <$type as $crate::gc::GCMethods>::initial() },
19 );
20 };
21}
22
23#[macro_export]
24macro_rules! rooted_vec {
25 (let mut $name:ident) => {
26 let mut __root = $crate::gc::RootableVec::new_unrooted();
27 let mut $name = $crate::gc::RootedVec::new(&mut __root);
28 };
29 (let $name:ident <- $iter:expr) => {
30 let mut __root = $crate::gc::RootableVec::new_unrooted();
31 let $name = $crate::gc::RootedVec::from_iter(&mut __root, $iter);
32 };
33 (let mut $name:ident <- $iter:expr) => {
34 let mut __root = $crate::gc::RootableVec::new_unrooted();
35 let mut $name = $crate::gc::RootedVec::from_iter(&mut __root, $iter);
36 };
37}
38
39#[macro_export]
40macro_rules! auto_root {
41 (in($cx:expr) let $($var:ident)+ = $init:expr) => {
42 let mut __root = $crate::gc::CustomAutoRooter::new($init);
43 let $($var)+ = __root.root($cx);
44 };
45 (in($cx:expr) let $($var:ident)+: $type:ty = $init:expr) => {
46 let mut __root = $crate::gc::CustomAutoRooter::new($init);
47 let $($var)+: $crate::rust::CustomAutoRootedGuard<$type> = __root.root($cx);
48 };
49}