summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <ecoal95@gmail.com>2016-03-24 06:46:09 +0100
committerEmilio Cobos Álvarez <ecoal95@gmail.com>2016-03-24 06:46:09 +0100
commit072fef6ac6d61d7b4c99d0ebdd9af38420906608 (patch)
tree915ce739358568d2fae52a8e9cc663aeac97b9bd
parent58f4ff49237781e1512d0c5338997e59b239cc8d (diff)
gen: Mangle names of inner enums
This prevents us changing some gecko types.
-rw-r--r--src/gen.rs18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/gen.rs b/src/gen.rs
index 1d4e5a09..d520d1d8 100644
--- a/src/gen.rs
+++ b/src/gen.rs
@@ -970,15 +970,17 @@ fn cstruct_to_rs(ctx: &mut GenCtx, name: &str, ci: CompInfo) -> Vec<P<ast::Item>
for m in members.iter() {
if let CompMember::Enum(ref ei) = *m {
- let e = ei.borrow().clone();
- let ename = if e.name.is_empty() {
- let ename = format!("{}_enum{}", name, anon_enum_count);
- anon_enum_count += 1;
- ename
+ let empty_name = ei.borrow().name.is_empty();
+ if empty_name {
+ ei.borrow_mut().name = format!("{}_enum{}", name, anon_enum_count);
} else {
- e.name.clone()
- };
- extra.extend(cenum_to_rs(ctx, ename, e.kind, e.comment, &e.items, e.layout).into_iter());
+ // Mangled name to deal with multiple definitions of the same inner type
+ let new_name = [name, &*ei.borrow().name].join("_").to_owned();
+ ei.borrow_mut().name = new_name;
+ }
+
+ let e = ei.borrow().clone();
+ extra.extend(cenum_to_rs(ctx, e.name, e.kind, e.comment, &e.items, e.layout).into_iter());
continue;
}