promise_unsafe/
lib.rs

1extern crate proc_macro;
2
3#[macro_export]
4macro_rules! promise {
5    ($b:block) => {
6        unsafe { $b }
7    };
8    ($s:stmt) => {
9        unsafe { $s }
10    };
11    ($e:expr) => {
12        unsafe { $e }
13    };
14}
15
16#[cfg(test)]
17mod tests {
18    use super::*;
19
20    #[test]
21    fn it_works() {
22        let mut v = 0;
23        let p: *mut i32 = &mut v;
24        promise!(*p = 4);
25        assert_eq!(v, 4);
26
27        assert_eq!(
28            promise!({
29                *p = 3;
30                *p
31            }),
32            3
33        );
34
35        assert_eq!(promise!(*p), 3);
36    }
37}