1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
pub struct HiddenVariable;
/// ```
/// use std::any::TypeId;
/// fn check<T: 'static>(_x: T) {
/// assert_eq!(TypeId::of::<kmacros_shim::HiddenVariable>(), TypeId::of::<T>());
/// }
/// let x = 1;
/// kmacros_shim::rename!(let a = x);
/// assert_eq!(a, 1);
/// check(x);
/// kmacros_shim::rename!(let b = a;);
/// assert_eq!(b, 1);
/// check(a);
/// let y = 2;
/// kmacros_shim::rename! {
/// let b = y;
/// let a = b;
/// }
/// assert_eq!(a, 2);
/// check(b);
/// check(y);
/// let x = 1;
/// let y = 2;
/// kmacros_shim::rename! {
/// let a = x;
/// let b = y;
/// }
/// assert_eq!(a, 1);
/// assert_eq!(b, 2);
/// check(x);
/// check(y);
/// kmacros_shim::rename!(let a = a;);
/// check(a);
/// ```
/// ```compile_fail
/// let x = 1;
/// kmacros_shim::rename!(let a = x);
/// assert_eq!(x, 1);
/// ```
#[macro_export]
macro_rules! rename {
($(let $p:pat_param = $from:ident);+$(;)?) => {
$(
let $p = $from;
#[allow(unused_variables)]
let $from = $crate::HiddenVariable;
)+
};
}
/// Unwrap the Option value or break.
#[macro_export]
macro_rules! or_continue {
( $wrapper:expr ) => {
match $wrapper {
Some(v) => v,
None => continue,
}
};
}
/// ```
/// use std::any::TypeId;
/// fn check<T: 'static>(_x: T) {
/// assert_eq!(TypeId::of::<kmacros_shim::HiddenVariable>(), TypeId::of::<T>());
/// }
/// let x = 1;
/// kmacros_shim::hide!(x);
/// check(x);
/// ```
#[macro_export]
macro_rules! hide {
($x:ident) => {
#[allow(unused_variables)]
let $x = $crate::HiddenVariable;
};
}
#[cfg(test)]
mod tests {}