eager_macro_rules! {
#[macro_export]
reverse_tt $eager_1 $eager2
{
$($rest:tt)*
}=>{
reverse_tt_internal!{
$($rest)*
}
};
}
eager_macro_rules! {
#[macro_export]
#[doc(hidden)]
reverse_tt_internal $eager_1 $eager2
{
$(@done{$($prev:tt)*})* [$($all:tt)*] $($rest:tt)*
}=>{
reverse_tt!{
$(@done{$($prev)*})*
|{} [$($all)*] $($rest)*
}
};
{
$(@done{$($prev:tt)*})* |[$($all:tt)*] $($rest:tt)*
}=>{
reverse_tt!{
$(@done{$($prev)*})*
|{} [$($all)*] $($rest)*
}
};
{
{$($all:tt)*} $($rest:tt)*
}=>{
reverse_tt!{ |{$($all)*} $($rest)*}
};
{
$(@done{$($prev:tt)*})*
|{$($reversed:tt)*} [$start:tt $($unreversed:tt)*] $($rest:tt)*
}=>{
reverse_tt!{
$(@done{$($prev)*})*
|{$start $($reversed)*} [$($unreversed)*] $($rest)*
}
};
{
$(@done{$($prev:tt)*})*
|{$($reversed:tt)*} [] $($rest:tt)*
}=>{
reverse_tt!{
$(@done{$($prev)*})*
|{$($reversed)*} $($rest)*
}
};
{
$(@done{$($prev:tt)*})*
|{$($reversed:tt)*} {$($no_r:tt)*} $($rest:tt)*
}=>{
reverse_tt!{
$(@done{$($prev)*})*
|{$($no_r)* $($reversed)*} $($rest)*
}
};
{
$(@done{$($prev:tt)*})* |{$($done:tt)*} | $($rest:tt)*
}=>{
reverse_tt!{
$(@done{$($prev)*})* @done{$($done)*}
| $($rest)*
}
};
{
$(@done{$($done:tt)*})* |{$($last:tt)*}
}=>{
$($($done)*)* $($last)*
};
}