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) => { ... };
}