Detect out of bounds when inserting discriminant
diff --git a/syntax/discriminant.rs b/syntax/discriminant.rs
index c65b3f4..4caa42b 100644
--- a/syntax/discriminant.rs
+++ b/syntax/discriminant.rs
@@ -100,6 +100,21 @@
}
fn insert(set: &mut DiscriminantSet, discriminant: Discriminant) -> Result<Discriminant> {
+ if let Some(expected_repr) = set.repr {
+ for bounds in &BOUNDS {
+ if bounds.repr != expected_repr {
+ continue;
+ }
+ if bounds.min <= discriminant && discriminant <= bounds.max {
+ break;
+ }
+ let msg = format!(
+ "discriminant value `{}` is outside the limits of {}",
+ discriminant, expected_repr,
+ );
+ return Err(Error::new(Span::call_site(), msg));
+ }
+ }
if set.values.insert(discriminant) {
set.previous = Some(discriminant);
Ok(discriminant)