Fix remapping for union field names (#191)

* Fix remapping for union field names

* Remove dead logic
This commit is contained in:
John Tur 2021-01-08 12:14:11 -05:00 коммит произвёл GitHub
Родитель c10a6dba88
Коммит da66f976f1
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 56 добавлений и 1 удалений

Просмотреть файл

@ -1067,7 +1067,7 @@ namespace ClangSharp
return remappedName;
}
if ((namedDecl is FieldDecl fieldDecl) && name.StartsWith("__AnonymousField_"))
if ((namedDecl is FieldDecl fieldDecl) && name.StartsWith("__AnonymousFieldDecl_"))
{
remappedName = "Anonymous";

Просмотреть файл

@ -1508,6 +1508,61 @@ bool MyFunction(const MyStruct& lhs, const MyStruct& rhs)
await ValidateGeneratedBindingsAsync(inputContents, expectedOutputContents);
}
[Fact]
public async Task AccessUnionMemberTest()
{
var inputContents = @"union MyUnion
{
struct { int a; };
};
void MyFunction()
{
MyUnion myUnion;
myUnion.a = 10;
}
";
var expectedOutputContents = @"using System.Runtime.InteropServices;
namespace ClangSharp.Test
{
[StructLayout(LayoutKind.Explicit)]
public partial struct MyUnion
{
[FieldOffset(0)]
[NativeTypeName(""MyUnion::(anonymous struct at ClangUnsavedFile.h:3:5)"")]
public _Anonymous_e__Struct Anonymous;
public ref int a
{
get
{
return ref MemoryMarshal.GetReference(MemoryMarshal.CreateSpan(ref Anonymous.a, 1));
}
}
public partial struct _Anonymous_e__Struct
{
public int a;
}
}
public static partial class Methods
{
public static void MyFunction()
{
MyUnion myUnion = new MyUnion();
myUnion.Anonymous.a = 10;
}
}
}
";
await ValidateGeneratedBindingsAsync(inputContents, expectedOutputContents);
}
[Fact]
public async Task ReturnStructTest()
{