borrowscope_runtime/tracker/
maybe_uninit.rs

1//! MaybeUninit tracking
2
3use super::TRACKER;
4
5pub fn track_maybe_uninit_uninit<T>(
6    #[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
7    #[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
8    value: std::mem::MaybeUninit<T>,
9) -> std::mem::MaybeUninit<T> {
10    #[cfg(feature = "track")]
11    {
12        let mut tracker = TRACKER.lock();
13        tracker.record_maybe_uninit_new(name, false, location);
14    }
15    value
16}
17
18/// Track MaybeUninit::new (initialized)
19#[inline(always)]
20pub fn track_maybe_uninit_new<T>(
21    #[cfg_attr(not(feature = "track"), allow(unused_variables))] name: &str,
22    #[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
23    value: std::mem::MaybeUninit<T>,
24) -> std::mem::MaybeUninit<T> {
25    #[cfg(feature = "track")]
26    {
27        let mut tracker = TRACKER.lock();
28        tracker.record_maybe_uninit_new(name, true, location);
29    }
30    value
31}
32
33/// Track MaybeUninit::write
34#[inline(always)]
35pub fn track_maybe_uninit_write<'a, T>(
36    #[cfg_attr(not(feature = "track"), allow(unused_variables))] var_id: &str,
37    #[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
38    value: &'a mut T,
39) -> &'a mut T {
40    #[cfg(feature = "track")]
41    {
42        let mut tracker = TRACKER.lock();
43        tracker.record_maybe_uninit_write(var_id, location);
44    }
45    value
46}
47
48/// Track MaybeUninit::assume_init (unsafe)
49#[inline(always)]
50pub fn track_maybe_uninit_assume_init<T>(
51    #[cfg_attr(not(feature = "track"), allow(unused_variables))] var_id: &str,
52    #[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
53    value: T,
54) -> T {
55    #[cfg(feature = "track")]
56    {
57        let mut tracker = TRACKER.lock();
58        tracker.record_maybe_uninit_assume_init(var_id, location);
59    }
60    value
61}
62
63/// Track MaybeUninit::assume_init_read (unsafe)
64#[inline(always)]
65pub fn track_maybe_uninit_assume_init_read<T>(
66    #[cfg_attr(not(feature = "track"), allow(unused_variables))] var_id: &str,
67    #[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
68    value: T,
69) -> T {
70    #[cfg(feature = "track")]
71    {
72        let mut tracker = TRACKER.lock();
73        tracker.record_maybe_uninit_assume_init_read(var_id, location);
74    }
75    value
76}
77
78/// Track MaybeUninit::assume_init_drop (unsafe)
79#[inline(always)]
80pub fn track_maybe_uninit_assume_init_drop(
81    #[cfg_attr(not(feature = "track"), allow(unused_variables))] var_id: &str,
82    #[cfg_attr(not(feature = "track"), allow(unused_variables))] location: &str,
83) {
84    #[cfg(feature = "track")]
85    {
86        let mut tracker = TRACKER.lock();
87        tracker.record_maybe_uninit_assume_init_drop(var_id, location);
88    }
89}
90