]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_data_structures/src/macros.rs
Rollup merge of #93337 - Amanieu:asm_tracking, r=tmiasko
[rust.git] / compiler / rustc_data_structures / src / macros.rs
1 /// Type size assertion. The first argument is a type and the second argument is its expected size.
2 #[macro_export]
3 macro_rules! static_assert_size {
4     ($ty:ty, $size:expr) => {
5         const _: [(); $size] = [(); ::std::mem::size_of::<$ty>()];
6     };
7 }
8
9 #[macro_export]
10 macro_rules! enum_from_u32 {
11     ($(#[$attr:meta])* pub enum $name:ident {
12         $($(#[$var_attr:meta])* $variant:ident = $e:expr,)*
13     }) => {
14         $(#[$attr])*
15         pub enum $name {
16             $($(#[$var_attr])* $variant = $e),*
17         }
18
19         impl $name {
20             pub fn from_u32(u: u32) -> Option<$name> {
21                 $(if u == $name::$variant as u32 {
22                     return Some($name::$variant)
23                 })*
24                 None
25             }
26         }
27     };
28     ($(#[$attr:meta])* pub enum $name:ident {
29         $($(#[$var_attr:meta])* $variant:ident,)*
30     }) => {
31         $(#[$attr])*
32         pub enum $name {
33             $($(#[$var_attr])* $variant,)*
34         }
35
36         impl $name {
37             pub fn from_u32(u: u32) -> Option<$name> {
38                 $(if u == $name::$variant as u32 {
39                     return Some($name::$variant)
40                 })*
41                 None
42             }
43         }
44     }
45 }