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