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
#[macro_export]

macro_rules! binary_op_impl {
    ($tr:ty, $typ:ty; $($op:ident),+ $(,)?) => ($(
        // suppress false-positive `unconditional_recursion` warnings; for proof warnings are
        // false-positives, see `unit_tests::unconditional_recursion_warning_is_a_false_positive()`.
        #[allow(unconditional_recursion)]
        #[inline]
        fn $op(self, rhs: $typ) -> <Self as $tr>::Output {
            Self::$op(self, rhs)
        }
    )*)
}
#[macro_export]
macro_rules! panicking_binary_op_impl {
    ($tr:ty, $typ:ty; $($op_outer:ident, $op_inner:ident),+ $(,)?) => ($(
        // suppress false-positive `unconditional_recursion` warnings; see
        // `unit_tests::unconditional_recursion_warning_is_a_false_positive()` for proof warnings are false-positives.
        #[allow(unconditional_recursion)]
        #[inline]
        fn $op_outer(self, rhs: $typ) -> <Self as $tr>::Output {
            Self::$op_inner(self, rhs).unwrap()
        }
    )*)
}

#[macro_export]
macro_rules! panicking_unary_op_impl {
    ($($op_outer:ident, $op_inner:ident),+ $(,)?) => ($(
        // suppress false positive `unconditional_recursion` warnings; see `unit_tests` for proof
        // suppress false positive `a method with this name may be added to std` warning; (this macro *is* calling the
        // `std` function!)
        #[allow(unconditional_recursion, unstable_name_collisions)]
        #[inline]
        fn $op_outer(self) -> <Self as IPanickingOps>::Output {
            Self::$op_inner(self).unwrap()
        }
    )*)
}

#[macro_export]
macro_rules! unary_op_impl {
    ($($op:ident),+ $(,)?) => ($(
        // suppress false positive `unconditional_recursion` warnings; see `unit_tests` for proof
        // suppress false positive `a method with this name may be added to std` warning; (this macro *is* calling the
        // `std` function!)
        #[allow(unconditional_recursion, unstable_name_collisions)]
        #[inline]
        fn $op(self) -> Self::Output {
            Self::$op(self)
        }
    )*)
}