From 072fef6ac6d61d7b4c99d0ebdd9af38420906608 Mon Sep 17 00:00:00 2001 From: Emilio Cobos Álvarez Date: Thu, 24 Mar 2016 06:46:09 +0100 Subject: gen: Mangle names of inner enums This prevents us changing some gecko types. --- src/gen.rs | 18 ++++++++++-------- 1 file 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 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; } -- cgit v1.2.3