diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-04-29 16:33:13 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-04-29 16:33:13 +0800 |
| commit | 376ed696ec2ff676a22bafa44c63e2c6fe606647 (patch) | |
| tree | c8c30fbf054f9dd50eb858386d208f9147e20dbc /mingling_macros/src/lib.rs | |
| parent | 4fb83212cefa1a7818d8531fdfe937db10203471 (diff) | |
Use small integer repr for gen_program! enum
Remove the default __FallBack variant and Debug derive from pack types.
Diffstat (limited to 'mingling_macros/src/lib.rs')
| -rw-r--r-- | mingling_macros/src/lib.rs | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/mingling_macros/src/lib.rs b/mingling_macros/src/lib.rs index 8ba028b..a8b3b15 100644 --- a/mingling_macros/src/lib.rs +++ b/mingling_macros/src/lib.rs @@ -346,19 +346,27 @@ pub fn program_final_gen(input: TokenStream) -> TokenStream { .map(|s| syn::parse_str::<proc_macro2::TokenStream>(s).unwrap()) .collect(); + let num_variants = packed_types.len(); + let repr_type = if num_variants <= u8::MAX as usize { + quote! { u8 } + } else if num_variants <= u16::MAX as usize { + quote! { u16 } + } else if num_variants <= u32::MAX as usize { + quote! { u32 } + } else { + quote! { u128 } + }; + let expanded = quote! { - #[derive(Debug, Default, PartialEq, Eq, Clone)] - #[repr(u32)] + #[derive(Debug, PartialEq, Eq, Clone)] + #[repr(#repr_type)] pub enum #name { - #[default] - __FallBack, #(#packed_types),* } impl ::std::fmt::Display for #name { fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { match self { - #name::__FallBack => write!(f, "__FallBack"), #(#name::#packed_types => write!(f, stringify!(#packed_types)),)* } } |
