diff options
author | Emilio Cobos Álvarez <ecoal95@gmail.com> | 2016-03-24 06:46:09 +0100 |
---|---|---|
committer | Emilio Cobos Álvarez <ecoal95@gmail.com> | 2016-03-24 06:46:09 +0100 |
commit | 072fef6ac6d61d7b4c99d0ebdd9af38420906608 (patch) | |
tree | 915ce739358568d2fae52a8e9cc663aeac97b9bd | |
parent | 58f4ff49237781e1512d0c5338997e59b239cc8d (diff) |
gen: Mangle names of inner enums
This prevents us changing some gecko types.
-rw-r--r-- | src/gen.rs | 18 |
1 files changed, 10 insertions, 8 deletions
@@ -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; } |