macro_rules! RIDL { (#[uuid($l:expr, $w1:expr, $w2:expr, $b1:expr, $b2:expr, $b3:expr, $b4:expr, $b5:expr, $b6:expr, $b7:expr, $b8:expr)] class $class:ident;) => { ... }; (#[uuid($($uuid:expr),+)] interface $interface:ident ($vtbl:ident) {$( $(#[$($attrs:tt)*])* fn $method:ident($($p:ident : $t:ty,)*) -> $rtr:ty, )+}) => { ... }; (#[uuid($($uuid:expr),+)] interface $interface:ident ($vtbl:ident) : $pinterface:ident ($pvtbl:ident) {}) => { ... }; (#[uuid($($uuid:expr),+)] interface $interface:ident ($vtbl:ident) : $pinterface:ident ($pvtbl:ident) {$( $(#[$($attrs:tt)*])* fn $method:ident($($p:ident : $t:ty,)*) -> $rtr:ty, )+}) => { ... }; (@deref $interface:ident $pinterface:ident) => { ... }; (@method fn $method:ident($($p:ident : $t:ty,)*) -> $rtr:ty) => { ... }; (@method #[fixme] fn $method:ident($($p:ident : $t:ty,)*) -> $rtr:ty) => { ... }; (@vtbl $interface:ident $vtbl:ident ($($fields:tt)*) $(fn $method:ident($($p:ident : $t:ty,)*) -> $rtr:ty,)* ) => { ... }; (@vtbl $interface:ident $vtbl:ident ($($fields:tt)*) fn $method:ident($($p:ident : $t:ty,)*) -> $rtr:ty, $($tail:tt)*) => { ... }; (@vtbl $interface:ident $vtbl:ident ($($fields:tt)*) #[fixme] fn $method:ident($($p:ident : $t:ty,)*) -> $rtr:ty, $($tail:tt)*) => { ... }; (@uuid $interface:ident $l:expr, $w1:expr, $w2:expr, $b1:expr, $b2:expr, $b3:expr, $b4:expr, $b5:expr, $b6:expr, $b7:expr, $b8:expr ) => { ... }; (@item $thing:item) => { ... }; }