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}