macro_rules! rev {
    (@ $mac:ident $(,$args:ident)* ; $a:expr               ; $($c:expr),* ) => (        $mac!($($args),* ; $a           $(,$c)* ) );
    (@ $mac:ident $(,$args:ident)* ; $a:expr  $(,$b:expr)* ; $($c:expr),* ) => ( rev!(@ $mac $(,$args)*  ; $($b),* ; $a $(,$c)* ) );
    (  $mac:ident $(,$args:ident)* ; $a:expr,                             ) => (        $mac!($($args),* ; $a                   ) );
    (  $mac:ident $(,$args:ident)* ; $a:expr, $($b:expr,)*                ) => ( rev!(@ $mac $(,$args)*  ; $($b),* ; $a         ) );
}
