From 2be83e75efe05cdf1fc0be383641ffb9ab9da2ac Mon Sep 17 00:00:00 2001
From: Ryan Hunt <rhunt@eqrion.net>
Date: Sun, 7 May 2017 23:38:54 -0400
Subject: [PATCH] Resolve specialized structs and enums so field renaming works

---
 src/bindgen/items.rs   | 19 +++++++++++++------
 src/bindgen/library.rs |  2 +-
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/bindgen/items.rs b/src/bindgen/items.rs
index 6eff0cb..b533619 100644
--- a/src/bindgen/items.rs
+++ b/src/bindgen/items.rs
@@ -802,7 +802,7 @@ impl Specialization {
         }
     }
 
-    pub fn specialize(&self, library: &Library) -> ConvertResult<PathValue> {
+    pub fn specialize(&self, config: &Config, library: &Library) -> ConvertResult<PathValue> {
         match library.resolve_path(&self.aliased) {
             Some(aliased) => {
                 match aliased {
@@ -821,22 +821,29 @@ impl Specialization {
                         let mappings = aliased.generic_params.iter()
                                                              .zip(self.generic_values.iter())
                                                              .collect::<Vec<_>>();
-                        Ok(PathValue::Struct(Struct {
+
+                        let mut value = Struct {
                             name: self.name.clone(),
                             directives: self.directives.clone(),
                             fields: aliased.fields.iter()
                                                   .map(|x| (x.0.clone(), x.1.specialize(&mappings)))
                                                   .collect(),
                             generic_params: vec![],
-                        }))
+                        };
+                        value.resolve(config);
+
+                        Ok(PathValue::Struct(value))
                     }
                     PathValue::Enum(aliased) => {
-                        Ok(PathValue::Enum(Enum {
+                        let mut value = Enum {
                             name: self.name.clone(),
                             repr: aliased.repr.clone(),
                             directives: self.directives.clone(),
                             values: aliased.values.clone(),
-                        }))
+                        };
+                        value.resolve(config);
+
+                        Ok(PathValue::Enum(value))
                     }
                     PathValue::Typedef(aliased) => {
                         Ok(PathValue::Typedef(Typedef {
@@ -851,7 +858,7 @@ impl Specialization {
                             directives: self.directives.clone(),
                             aliased: aliased.aliased.clone(),
                             generic_values: aliased.generic_values.clone(),
-                        }.specialize(library)
+                        }.specialize(config, library)
                     }
                 }
             }
diff --git a/src/bindgen/library.rs b/src/bindgen/library.rs
index 02e2571..7c5286d 100644
--- a/src/bindgen/library.rs
+++ b/src/bindgen/library.rs
@@ -325,7 +325,7 @@ impl<'a> Library<'a> {
                     }
                 }
                 &PathValue::Specialization(ref s) => {
-                    match s.specialize(&self) {
+                    match s.specialize(self.config, &self) {
                         Ok(value) => {
                             result.items.push(value);
                         }
-- 
GitLab