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
var safeIdentifier = Helpers.SafeIdentifier(field.OriginalName); var safeIdentifier = Helpers.SafeIdentifier(field.OriginalName);
if(safeIdentifier.All(c => c.Equals('_')))
{
safeIdentifier = Helpers.SafeIdentifier(field.Name);
}
PushBlock(CSharpBlockKind.Field); PushBlock(CSharpBlockKind.Field);
WriteLine("[FieldOffset({0})]", field.OffsetInBytes); WriteLine("[FieldOffset({0})]", field.OffsetInBytes);

16
src/Generator/Passes/CleanInvalidDeclNamesPass.cs

@ -3,6 +3,7 @@ using System.Linq;
using CppSharp.AST; using CppSharp.AST;
using CppSharp.Generators.CLI; using CppSharp.Generators.CLI;
using CppSharp.Generators.CSharp; using CppSharp.Generators.CSharp;
using System.Text;
namespace CppSharp.Passes namespace CppSharp.Passes
{ {
@ -153,6 +154,21 @@ namespace CppSharp.Passes
item.Name = CheckName(item.Name); item.Name = CheckName(item.Name);
return base.VisitEnumItem(item); 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:
{ {
}; };
}; };
struct
{
struct
{
};
};
struct
{
struct
{
};
};
struct
{
struct
{
};
};
union as_types union as_types
{ {

Loading…
Cancel
Save