summaryrefslogtreecommitdiff
path: root/src/ir/comp.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ir/comp.rs')
-rw-r--r--src/ir/comp.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/ir/comp.rs b/src/ir/comp.rs
index 4c57a86b..fc17ab8f 100644
--- a/src/ir/comp.rs
+++ b/src/ir/comp.rs
@@ -666,6 +666,33 @@ impl CompFields {
CompFields::AfterComputingBitfieldUnits(fields_and_units),
);
}
+
+ fn deanonymize_fields(&mut self) {
+ let fields = match *self {
+ CompFields::AfterComputingBitfieldUnits(ref mut fields) => {
+ fields
+ }
+ CompFields::BeforeComputingBitfieldUnits(_) => {
+ panic!("Not yet computed bitfield units.");
+ }
+ };
+
+ let mut anon_field_counter = 0;
+ for field in fields.iter_mut() {
+ let field_data = match *field {
+ Field::DataMember(ref mut fd) => fd,
+ Field::Bitfields(_) => continue,
+ };
+
+ if let Some(_) = field_data.name {
+ continue;
+ }
+
+ anon_field_counter += 1;
+ let name = format!("__bindgen_anon_{}", anon_field_counter);
+ field_data.name = Some(name);
+ }
+ }
}
impl Trace for CompFields {
@@ -1351,6 +1378,11 @@ impl CompInfo {
self.fields.compute_bitfield_units(ctx);
}
+ /// Assign for each anonymous field a generated name.
+ pub fn deanonymize_fields(&mut self) {
+ self.fields.deanonymize_fields();
+ }
+
/// Returns whether the current union can be represented as a Rust `union`
///
/// Requirements: