Compute enum discriminant during parsing
This allows us to reuse the computation in multiple places later.
diff --git a/gen/src/write.rs b/gen/src/write.rs
index 3c059a7..4e98674 100644
--- a/gen/src/write.rs
+++ b/gen/src/write.rs
@@ -367,12 +367,7 @@
}
writeln!(out, "enum class {} : uint32_t {{", enm.ident);
for variant in &enm.variants {
- write!(out, " ");
- write!(out, "{}", variant.ident);
- if let Some(discriminant) = &variant.discriminant {
- write!(out, " = {}", discriminant);
- }
- writeln!(out, ",");
+ writeln!(out, " {} = {},", variant.ident, variant.discriminant);
}
writeln!(out, "}};");
}
@@ -383,18 +378,13 @@
"static_assert(sizeof({}) == sizeof(uint32_t), \"incorrect size\");",
enm.ident
);
- let mut prev_discriminant = None;
for variant in &enm.variants {
- let discriminant = variant
- .discriminant
- .unwrap_or_else(|| prev_discriminant.map_or(0, |n| n + 1));
writeln!(
out,
"static_assert(static_cast<uint32_t>({}::{}) == {},
\"disagrees with the value in #[cxx::bridge]\");",
- enm.ident, variant.ident, discriminant,
+ enm.ident, variant.ident, variant.discriminant,
);
- prev_discriminant = Some(discriminant);
}
}