Browse Source

Merge pull request #451 from genuinelucifer/anon_types

Fixed compilation issues when nesting more than one anonymous types.
pull/455/head
João Matos 10 years ago
parent
commit
5f99ceb4aa
  1. 5
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  2. 16
      src/Generator/Passes/CleanInvalidDeclNamesPass.cs
  3. 18
      tests/Basic/Basic.h

5
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -724,6 +724,11 @@ namespace CppSharp.Generators.CSharp @@ -724,6 +724,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);

16
src/Generator/Passes/CleanInvalidDeclNamesPass.cs

@ -3,6 +3,7 @@ using System.Linq; @@ -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 @@ -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);
}
}
}

18
tests/Basic/Basic.h

@ -647,6 +647,24 @@ public: @@ -647,6 +647,24 @@ public:
{
};
};
struct
{
struct
{
};
};
struct
{
struct
{
};
};
struct
{
struct
{
};
};
union as_types
{

Loading…
Cancel
Save