macro_rules! attempt { (@recurse ($a:expr) { } catch ($e:ident) $b:block) => { ... }; (@recurse ($a:expr) { $e:expr; $($tail:tt)* } $($handler:tt)*) => { ... }; ({ $e:expr; $($tail:tt)* } $($handler:tt)*) => { ... }; }