Fix previous commit.
diff --git a/gen/src/write.rs b/gen/src/write.rs
index 2ea6ca8..70620ce 100644
--- a/gen/src/write.rs
+++ b/gen/src/write.rs
@@ -5,7 +5,7 @@
use crate::syntax::symbol::Symbol;
use crate::syntax::{mangle, Api, Enum, ExternFn, ExternType, Signature, Struct, Type, Types, Var};
use proc_macro2::Ident;
-use std::collections::{HashMap, HashSet};
+use std::collections::HashMap;
pub(super) fn gen(
namespace: &Namespace,
@@ -46,7 +46,6 @@
}
}
- let mut cxx_types = HashSet::new();
let mut methods_for_type = HashMap::new();
for api in apis {
if let Api::RustFunction(efn) = api {
@@ -57,9 +56,6 @@
.push(efn);
}
}
- if let Api::CxxType(enm) = api {
- cxx_types.insert(&enm.ident);
- }
}
for api in apis {
@@ -70,7 +66,7 @@
}
Api::Enum(enm) => {
out.next_section();
- if cxx_types.contains(&enm.ident) {
+ if types.cxx.contains(&enm.ident) {
check_enum(out, enm);
} else {
write_enum(out, enm);
@@ -382,31 +378,24 @@
}
fn check_enum(out: &mut OutFile, enm: &Enum) {
- let discriminants = enm
- .variants
- .iter()
- .scan(None, |prev_discriminant, variant| {
- let discriminant = variant
- .discriminant
- .unwrap_or_else(|| prev_discriminant.map_or(0, |n| n + 1));
- *prev_discriminant = Some(discriminant);
- Some(discriminant)
- });
writeln!(
out,
"static_assert(sizeof({}) == sizeof(uint32_t));",
enm.ident
);
- enm.variants
- .iter()
- .zip(discriminants)
- .for_each(|(variant, discriminant)| {
- writeln!(
- out,
- "static_assert({}::{} == {});",
- enm.ident, variant.ident, discriminant
- );
- });
+ 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,
+ );
+ prev_discriminant = Some(discriminant);
+ }
}
fn write_exception_glue(out: &mut OutFile, apis: &[Api]) {