@@ -92,19 +92,40 @@ fn generate_type_constructor(type_name: TokenStream, fields: &syn::Fields) -> To
9292/// Generates a `match` case to construct each variant of the given type. Uses a
9393/// symbolic `usize` to decide which variant to construct.
9494fn enum_constructor ( ident : & syn:: Ident , data_enum : & syn:: DataEnum ) -> TokenStream {
95- let variant_constructors = data_enum. variants . iter ( ) . map ( |variant| {
95+ if data_enum. variants . is_empty ( ) {
96+ let msg = format ! (
97+ "Cannot create symbolic enum `{ident}`. Enums with zero-variants cannot be instantiated"
98+ ) ;
99+ quote ! {
100+ panic!( #msg)
101+ }
102+ } else if data_enum. variants . len ( ) == 1 {
103+ let variant = data_enum. variants . first ( ) . unwrap ( ) ;
96104 let variant_name = & variant. ident ;
97- generate_type_constructor ( quote ! ( #ident:: #variant_name) , & variant. fields )
98- } ) ;
99- let n_variants = data_enum. variants . len ( ) ;
100- let cases = variant_constructors. enumerate ( ) . map ( |( idx, var_constr) | {
101- if idx < n_variants - 1 { quote ! ( #idx => #var_constr) } else { quote ! ( _ => #var_constr) }
102- } ) ;
105+ let variant_constructor =
106+ generate_type_constructor ( quote ! ( #ident:: #variant_name) , & variant. fields ) ;
107+ quote ! {
108+ #variant_constructor
109+ }
110+ } else {
111+ let variant_constructors = data_enum. variants . iter ( ) . map ( |variant| {
112+ let variant_name = & variant. ident ;
113+ generate_type_constructor ( quote ! ( #ident:: #variant_name) , & variant. fields )
114+ } ) ;
115+ let n_variants = data_enum. variants . len ( ) ;
116+ let cases = variant_constructors. enumerate ( ) . map ( |( idx, var_constr) | {
117+ if idx < n_variants - 1 {
118+ quote ! ( #idx => #var_constr)
119+ } else {
120+ quote ! ( _ => #var_constr)
121+ }
122+ } ) ;
103123
104- let kani_path = kani_path ( ) ;
105- quote ! {
106- match #kani_path:: any( ) {
107- #( #cases) , * ,
124+ let kani_path = kani_path ( ) ;
125+ quote ! {
126+ match #kani_path:: any( ) {
127+ #( #cases) , * ,
128+ }
108129 }
109130 }
110131}
0 commit comments