1 | macro_rules! test_println { |
2 | ($($arg:tt)*) => { |
3 | if cfg!(test) && cfg!(slab_print) { |
4 | if std::thread::panicking() { |
5 | // getting the thread ID while panicking doesn't seem to play super nicely with loom's |
6 | // mock lazy_static... |
7 | println!("[PANIC {:>17}:{:<3}] {}" , file!(), line!(), format_args!($($arg)*)) |
8 | } else { |
9 | println!("[{:?} {:>17}:{:<3}] {}" , crate::Tid::<crate::DefaultConfig>::current(), file!(), line!(), format_args!($($arg)*)) |
10 | } |
11 | } |
12 | } |
13 | } |
14 | |
15 | #[cfg (all(test, loom))] |
16 | macro_rules! test_dbg { |
17 | ($e:expr) => { |
18 | match $e { |
19 | e => { |
20 | test_println!("{} = {:?}" , stringify!($e), &e); |
21 | e |
22 | } |
23 | } |
24 | }; |
25 | } |
26 | |
27 | macro_rules! panic_in_drop { |
28 | ($($arg:tt)*) => { |
29 | if !std::thread::panicking() { |
30 | panic!($($arg)*) |
31 | } else { |
32 | let thread = std::thread::current(); |
33 | eprintln!( |
34 | "thread '{thread}' attempted to panic at '{msg}', {file}:{line}:{col} \n\ |
35 | note: we were already unwinding due to a previous panic." , |
36 | thread = thread.name().unwrap_or("<unnamed>" ), |
37 | msg = format_args!($($arg)*), |
38 | file = file!(), |
39 | line = line!(), |
40 | col = column!(), |
41 | ); |
42 | } |
43 | } |
44 | } |
45 | |
46 | macro_rules! debug_assert_eq_in_drop { |
47 | ($this:expr, $that:expr) => { |
48 | debug_assert_eq_in_drop!(@inner $this, $that, "" ) |
49 | }; |
50 | ($this:expr, $that:expr, $($arg:tt)+) => { |
51 | debug_assert_eq_in_drop!(@inner $this, $that, format_args!(": {}" , format_args!($($arg)+))) |
52 | }; |
53 | (@inner $this:expr, $that:expr, $msg:expr) => { |
54 | if cfg!(debug_assertions) { |
55 | if $this != $that { |
56 | panic_in_drop!( |
57 | "assertion failed ({} == {}) \n left: `{:?}`, \n right: `{:?}`{}" , |
58 | stringify!($this), |
59 | stringify!($that), |
60 | $this, |
61 | $that, |
62 | $msg, |
63 | ) |
64 | } |
65 | } |
66 | } |
67 | } |
68 | |