Files
continuwuity/src/core/utils/defer.rs
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

27 lines
490 B
Rust
Raw Normal View History

2024-05-09 15:59:08 -07:00
#[macro_export]
macro_rules! defer {
($body:block) => {
struct _Defer_<F: FnMut()> {
2024-05-09 15:59:08 -07:00
closure: F,
}
impl<F: FnMut()> Drop for _Defer_<F> {
2024-05-09 15:59:08 -07:00
fn drop(&mut self) { (self.closure)(); }
}
let _defer_ = _Defer_ { closure: || $body };
2024-05-09 15:59:08 -07:00
};
2024-08-09 02:58:10 +00:00
($body:expr_2021) => {
2024-09-29 04:18:47 +00:00
$crate::defer! {{ $body }}
};
}
#[macro_export]
macro_rules! scope_restore {
($val:ident, $ours:expr_2021) => {
2024-09-29 04:18:47 +00:00
let theirs = $crate::utils::exchange($val, $ours);
$crate::defer! {{ *$val = theirs; }};
2024-08-09 02:58:10 +00:00
};
2024-05-09 15:59:08 -07:00
}