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