1*64644bc4SPaolo Bonzini--- a/src/shared/discriminant_assigner.rs 2*64644bc4SPaolo Bonzini+++ b/src/shared/discriminant_assigner.rs 3*64644bc4SPaolo Bonzini@@ -26,20 +26,20 @@ 4*64644bc4SPaolo Bonzini let discriminant_expr = &discriminant.1; 5*64644bc4SPaolo Bonzini let variant_name = &variant.ident; 6*64644bc4SPaolo Bonzini 7*64644bc4SPaolo Bonzini- let Expr::Lit(ExprLit { lit: Lit::Int(int), .. }) = discriminant_expr else { 8*64644bc4SPaolo Bonzini+ if let Expr::Lit(ExprLit { lit: Lit::Int(int), .. }) = discriminant_expr { 9*64644bc4SPaolo Bonzini+ let discriminant_value: u128 = int.base10_parse().unwrap_or_else(unreachable); 10*64644bc4SPaolo Bonzini+ if discriminant_value > self.max_value() { 11*64644bc4SPaolo Bonzini+ abort!(variant, "Value of variant exceeds the given number of bits") 12*64644bc4SPaolo Bonzini+ } 13*64644bc4SPaolo Bonzini+ 14*64644bc4SPaolo Bonzini+ Some(discriminant_value) 15*64644bc4SPaolo Bonzini+ } else { 16*64644bc4SPaolo Bonzini abort!( 17*64644bc4SPaolo Bonzini discriminant_expr, 18*64644bc4SPaolo Bonzini "variant `{}` is not a number", variant_name; 19*64644bc4SPaolo Bonzini help = "only literal integers currently supported" 20*64644bc4SPaolo Bonzini ) 21*64644bc4SPaolo Bonzini- }; 22*64644bc4SPaolo Bonzini- 23*64644bc4SPaolo Bonzini- let discriminant_value: u128 = int.base10_parse().unwrap_or_else(unreachable); 24*64644bc4SPaolo Bonzini- if discriminant_value > self.max_value() { 25*64644bc4SPaolo Bonzini- abort!(variant, "Value of variant exceeds the given number of bits") 26*64644bc4SPaolo Bonzini } 27*64644bc4SPaolo Bonzini- 28*64644bc4SPaolo Bonzini- Some(discriminant_value) 29*64644bc4SPaolo Bonzini } 30*64644bc4SPaolo Bonzini 31*64644bc4SPaolo Bonzini fn assign(&mut self, variant: &Variant) -> u128 { 32*64644bc4SPaolo Bonzini--- a/src/shared/fallback.rs 33*64644bc4SPaolo Bonzini+++ b/src/shared/fallback.rs 34*64644bc4SPaolo Bonzini@@ -22,8 +22,9 @@ 35*64644bc4SPaolo Bonzini } 36*64644bc4SPaolo Bonzini Unnamed(fields) => { 37*64644bc4SPaolo Bonzini let variant_fields = fields.unnamed.iter(); 38*64644bc4SPaolo Bonzini- let Ok(fallback_value) = variant_fields.exactly_one() else { 39*64644bc4SPaolo Bonzini- abort!(variant, "fallback variant must have exactly one field"; help = "use only one field or change to a unit variant") 40*64644bc4SPaolo Bonzini+ let fallback_value = match variant_fields.exactly_one() { 41*64644bc4SPaolo Bonzini+ Ok(ok) => ok, 42*64644bc4SPaolo Bonzini+ _ => abort!(variant, "fallback variant must have exactly one field"; help = "use only one field or change to a unit variant") 43*64644bc4SPaolo Bonzini }; 44*64644bc4SPaolo Bonzini 45*64644bc4SPaolo Bonzini if !is_last_variant { 46