From 30bad99267f7150983b3ae0c8dfdec8d4d4932b1 Mon Sep 17 00:00:00 2001 From: Kenny Kerr Date: Fri, 11 Oct 2024 12:12:11 -0500 Subject: [PATCH] bindgen --- crates/libs/bindgen/src/rust/standalone.rs | 2 +- crates/libs/bindgen/src/rust/structs.rs | 2 +- crates/libs/bindgen/src/rust/writer.rs | 2 +- crates/libs/metadata/src/reader.rs | 13 +++++-------- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/crates/libs/bindgen/src/rust/standalone.rs b/crates/libs/bindgen/src/rust/standalone.rs index 1bb6a85c7f..5a08bae04c 100644 --- a/crates/libs/bindgen/src/rust/standalone.rs +++ b/crates/libs/bindgen/src/rust/standalone.rs @@ -241,7 +241,7 @@ fn type_collect_standalone_nested( td: metadata::TypeDef, set: &mut std::collections::BTreeSet, ) { - for nested in td.reader().nested_types(td) { + for (_, nested) in td.reader().nested_types(td) { type_collect_standalone_nested(writer, nested, set); for field in nested.fields() { diff --git a/crates/libs/bindgen/src/rust/structs.rs b/crates/libs/bindgen/src/rust/structs.rs index 9bd2e170a7..5201827a19 100644 --- a/crates/libs/bindgen/src/rust/structs.rs +++ b/crates/libs/bindgen/src/rust/structs.rs @@ -109,7 +109,7 @@ fn gen_struct_with_name( }); } - for (index, nested_type) in writer.reader.nested_types(def).enumerate() { + for (index, nested_type) in writer.reader.nested_types(def) { let nested_name = format!("{struct_name}_{index}"); tokens.combine(&gen_struct_with_name( writer, diff --git a/crates/libs/bindgen/src/rust/writer.rs b/crates/libs/bindgen/src/rust/writer.rs index 1669445e95..43c41e2e06 100644 --- a/crates/libs/bindgen/src/rust/writer.rs +++ b/crates/libs/bindgen/src/rust/writer.rs @@ -535,7 +535,7 @@ impl Writer { } fn scoped_name(&self, def: metadata::TypeDef) -> String { if let Some(enclosing_type) = def.enclosing_type() { - for (index, nested_type) in self.reader.nested_types(enclosing_type).enumerate() { + for (index, nested_type) in self.reader.nested_types(enclosing_type) { if nested_type.name() == def.name() { return format!("{}_{index}", &self.scoped_name(enclosing_type)); } diff --git a/crates/libs/metadata/src/reader.rs b/crates/libs/metadata/src/reader.rs index af877ef368..143520ade6 100644 --- a/crates/libs/metadata/src/reader.rs +++ b/crates/libs/metadata/src/reader.rs @@ -12,7 +12,7 @@ pub enum Item { pub struct Reader { items: BTreeMap<&'static str, BTreeMap<&'static str, Vec>>, - nested: HashMap>, + nested: HashMap>, // The reader needs to store the filter since standalone code generation needs more than just the filtered items // in order to chase dependencies automatically. This is why `Reader::filter` can't just filter everything up front. @@ -85,11 +85,8 @@ impl Reader { for key in file.table::() { let inner = key.inner(); - reader - .nested - .entry(key.outer()) - .or_default() - .insert(inner.name(), inner); + let types = reader.nested.entry(key.outer()).or_default(); + types.insert(inner.name(), (types.len(), inner)); } } @@ -203,7 +200,7 @@ impl Reader { }) } - pub fn nested_types(&self, type_def: TypeDef) -> impl Iterator + '_ { + pub fn nested_types(&self, type_def: TypeDef) -> impl Iterator + '_ { self.nested .get(&type_def) .map(|map| map.values().copied()) @@ -262,7 +259,7 @@ impl Reader { // TODO: this needs to be deferred via a TypeName's optional nested type name? if let Some(outer) = enclosing { if full_name.namespace().is_empty() { - let Some(inner) = self + let Some((_, inner)) = self .nested .get(&outer) .and_then(|nested| nested.get(full_name.name()))