From f81247911b781a04d38ccb4df6d9125db5b432b3 Mon Sep 17 00:00:00 2001 From: Abhinav Tripathi Date: Mon, 25 May 2015 19:22:02 +0530 Subject: [PATCH] Fixed compilation issues when nesting more than one anonymous types. --- .../Generators/CSharp/CSharpTextTemplate.cs | 5 +++++ .../Passes/CleanInvalidDeclNamesPass.cs | 16 ++++++++++++++++ tests/Basic/Basic.h | 18 ++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs index ef0a2424..33cc2bf1 100644 --- a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs +++ b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs @@ -713,6 +713,11 @@ namespace CppSharp.Generators.CSharp var safeIdentifier = Helpers.SafeIdentifier(field.OriginalName); + if(safeIdentifier.All(c => c.Equals('_'))) + { + safeIdentifier = Helpers.SafeIdentifier(field.Name); + } + PushBlock(CSharpBlockKind.Field); WriteLine("[FieldOffset({0})]", field.OffsetInBytes); diff --git a/src/Generator/Passes/CleanInvalidDeclNamesPass.cs b/src/Generator/Passes/CleanInvalidDeclNamesPass.cs index 70ecfc9b..9eb352a1 100644 --- a/src/Generator/Passes/CleanInvalidDeclNamesPass.cs +++ b/src/Generator/Passes/CleanInvalidDeclNamesPass.cs @@ -3,6 +3,7 @@ using System.Linq; using CppSharp.AST; using CppSharp.Generators.CLI; using CppSharp.Generators.CSharp; +using System.Text; namespace CppSharp.Passes { @@ -153,6 +154,21 @@ namespace CppSharp.Passes item.Name = CheckName(item.Name); return base.VisitEnumItem(item); } + + public override bool VisitFieldDecl(Field field) + { + if (field.Class.Fields.Count(c => c.Name.Equals(field.Name)) > 1) + { + StringBuilder str = new StringBuilder(); + str.Append(field.Name); + do + { + str.Append('_'); + } while (field.Class.Fields.Any(c => c.Name.Equals(str.ToString()))); + field.Name = str.ToString(); + } + return base.VisitFieldDecl(field); + } } } diff --git a/tests/Basic/Basic.h b/tests/Basic/Basic.h index 488dd2c5..de990011 100644 --- a/tests/Basic/Basic.h +++ b/tests/Basic/Basic.h @@ -647,6 +647,24 @@ public: { }; }; + struct + { + struct + { + }; + }; + struct + { + struct + { + }; + }; + struct + { + struct + { + }; + }; union as_types {