pax_message/
refcell_debug.rs

1// Taken from: https://users.rust-lang.org/t/dump-all-refcell-borrows/28315/4
2// ::cfg_if::cfg_if! { if #[cfg(debug_assertions)] {
3//     #[derive(
4//         Debug,
5//         Clone,
6//         Default,
7//         PartialEq, Eq,
8//         PartialOrd, Ord,
9//     )]
10//     pub struct RefCell<T> {
11//         pub ref_cell: ::core::cell::RefCell<T>,
12//
13//         pub last_borrow_context: ::core::cell::Cell<&'static str>,
14//     }
15//
16//     impl<T> RefCell<T> {
17//         pub fn new (value: T) -> Self
18//         {
19//             RefCell {
20//                 ref_cell: ::core::cell::RefCell::new(value),
21//                 last_borrow_context: ::core::cell::Cell::new(""),
22//             }
23//         }
24//     }
25//
26//     #[macro_export]
27//     macro_rules! borrow {(
28//         $wrapper:expr
29//     ) => ({
30//         let wrapper = &$wrapper;
31//         if let Ok(ret) = wrapper.ref_cell.try_borrow() {
32//             wrapper
33//                 .last_borrow_context
34//                 .set(concat!(
35//                     "was still borrowed from ",
36//                     file!(), ":", line!(), ":", column!(),
37//                     " on expression ",
38//                     stringify!($wrapper),
39//                 ));
40//             ret
41//         } else {
42//             panic!(
43//                 "Error, {} {}",
44//                 stringify!($wrapper),
45//                 wrapper.last_borrow_context.get(),
46//             );
47//         }
48//     })}
49//
50//     #[macro_export]
51//     macro_rules! borrow_mut {(
52//         $wrapper:expr
53//     ) => ({
54//         let wrapper = &$wrapper;
55//         if let Ok(ret) = $wrapper.ref_cell.try_borrow_mut() {
56//             $wrapper
57//                 .last_borrow_context
58//                 .set(concat!(
59//                     "was still mutably borrowed from ",
60//                     file!(), ":", line!(), ":", column!(),
61//                     " on expression ",
62//                     stringify!($wrapper),
63//                 ));
64//             ret
65//         } else {
66//             panic!(
67//                 "Error, {} {}",
68//                 stringify!($wrapper),
69//                 wrapper.last_borrow_context.get(),
70//             );
71//         }
72//     })}
73//
74//     #[macro_export]
75//     macro_rules! use_RefCell {() => (
76//         pub use pax_runtime_api::RefCell;
77//     )}
78// } else {
79#[macro_export]
80macro_rules! borrow {
81    (
82        $ref_cell:expr
83    ) => {
84        $ref_cell.borrow()
85    };
86}
87
88#[macro_export]
89macro_rules! borrow_mut {
90    (
91        $ref_cell:expr
92    ) => {
93        $ref_cell.borrow_mut()
94    };
95}
96#[macro_export]
97macro_rules! use_RefCell {
98    () => {
99        use ::core::cell::RefCell;
100    };
101}
102// }}