macro_rules! do_gen {
(__impl $i:expr, $idx:expr, ( $($rest:expr),* )) => { ... };
(__impl $i:expr, $idx:expr, $e:ident( $($args:tt)* )) => { ... };
(__impl $i:expr, $idx:expr, $submac:ident!( $($args:tt)* )) => { ... };
(__impl $i:expr, $idx:expr, $e:ident >> $($rest:tt)*) => { ... };
(__impl $i:expr, $idx:expr, $e:ident( $($args:tt)* ) >> $($rest:tt)*) => { ... };
(__impl $i:expr, $idx:expr, $submac:ident!( $($args:tt)* ) >> $($rest:tt)*) => { ... };
(__impl $i:expr, $idx:expr, $e:ident : $($rest:tt)*) => { ... };
( ($i:expr, $idx:expr), $($rest:tt)*) => { ... };
( $i:expr, $($rest:tt)*) => { ... };
}