Browse Source

Fixed the generated C# for two anonymous types nested in another anonymous type.

Fixes https://github.com/mono/CppSharp/issues/931.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/943/head
Dimitar Dobrev 8 years ago
parent
commit
4b374c9084
  1. 11
      src/Generator/Passes/CleanInvalidDeclNamesPass.cs
  2. 15
      tests/Common/Common.h

11
src/Generator/Passes/CleanInvalidDeclNamesPass.cs

@ -82,13 +82,14 @@ namespace CppSharp.Passes @@ -82,13 +82,14 @@ namespace CppSharp.Passes
if (@class.Namespace.Classes.Any(d => d != @class && d.Name == @class.Name))
{
StringBuilder str = new StringBuilder();
str.Append(@class.Name);
// we need the new name in each iteration so no point in StringBuilder
var name = @class.Name;
do
{
str.Append('_');
} while (@class.Classes.Any(d => d != @class && d.Name == str.ToString()));
@class.Name = str.ToString();
name += '_';
} while (@class.Namespace.Name == name ||
@class.Classes.Any(d => d != @class && d.Name == name));
@class.Name = name;
}
return true;

15
tests/Common/Common.h

@ -1387,3 +1387,18 @@ inline namespace InlineNamespace @@ -1387,3 +1387,18 @@ inline namespace InlineNamespace
}
}
union
{
struct
{
struct
{
long Capabilities;
} Server;
struct
{
long Capabilities;
} Share;
} Smb2;
} ProtocolSpecific;

Loading…
Cancel
Save