macro_rules! construct_gc {
(impl $typ : ident [$($acc : tt) *] [$($ptr : ident) *] @ $field : ident :
$expr : expr, $($rest : tt) *) => { ... };
(impl $typ : ident [$($acc : tt) *] [$($ptr : ident) *] @ $field : ident,
$($rest : tt) *) => { ... };
(impl $typ : ident [$($acc : tt) *] [$($ptr : ident) *] $field : ident
$(: $expr : expr) ?, $($rest : tt) *) => { ... };
(impl $typ : ident [$($acc : tt) *] [$($ptr : ident) *]) => { ... };
($typ : ident { $($tt : tt) * }) => { ... };
($typ : ident $(:: $variant : ident) ? ($($tt : tt) *)) => { ... };
}