#[macro_export]
macro_rules! shed{
($l: lifetime _; $($t: tt) *) => {
$l: loop {
#[allow(unreachable_code)] break {
$($t) *
};
}
};
($($t: tt) *) => {
loop {
#[allow(unreachable_code)] break {
$($t) *
};
}
};
}
#[macro_export]
macro_rules! superif{
({
$($t: tt) *
} $l: lifetime {
$($t2: tt) *
}) => {
$crate:: superif !({
$($t) *
} _unused = $l {
$($t2) *
})
};
({
$($t: tt) *
} $i: ident = $l: lifetime {
$($t2: tt) *
}) => {
$crate:: shed ! {
'superif _;
let $i = $crate:: shed ! {
$l _;
break 'superif $crate:: shed ! {
$($t) *
};
};
$($t2) *
}
}
}
#[test]
fn test_superif() {
superif!({
if true {
break 'then;
}
} 'then {
});
}
#[macro_export]
macro_rules! ta_return{
($t: ty, $e: ty) => {
if false {
fn unreachable_value<T>() -> T {
panic!();
}
return std:: result:: Result::< $t,
$e >:: Ok(unreachable_value());
}
}
}
#[macro_export]
macro_rules! exenum{
($s: expr, $m: pat => $v: expr) => {
match $s {
$m => Some($v),
_ => None,
}
}
}