1 // Copyright © 2017-2018 Mozilla Foundation 2 // 3 // This program is made available under an ISC-style license. See the 4 // accompanying file LICENSE for details. 5 6 macro_rules! cubeb_enum { 7 (pub enum $name:ident { $($variants:tt)* }) => { 8 #[cfg(target_env = "msvc")] 9 pub type $name = i32; 10 #[cfg(not(target_env = "msvc"))] 11 pub type $name = u32; 12 cubeb_enum!(gen, $name, 0, $($variants)*); 13 }; 14 (pub enum $name:ident: $t:ty { $($variants:tt)* }) => { 15 pub type $name = $t; 16 cubeb_enum!(gen, $name, 0, $($variants)*); 17 }; 18 (gen, $name:ident, $val:expr, $variant:ident, $($rest:tt)*) => { 19 pub const $variant: $name = $val; 20 cubeb_enum!(gen, $name, $val+1, $($rest)*); 21 }; 22 (gen, $name:ident, $val:expr, $variant:ident = $e:expr, $($rest:tt)*) => { 23 pub const $variant: $name = $e; 24 cubeb_enum!(gen, $name, $e+1, $($rest)*); 25 }; 26 (gen, $name:ident, $val:expr, ) => {} 27 } 28