Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.Naming.cs
Original file line number Diff line number Diff line change
Expand Up @@ -456,7 +456,7 @@ private string GetRemappedCursorName(NamedDecl namedDecl, out string nativeTypeN
{
remappedName = "Dispose";
}
else if ((namedDecl is FieldDecl fieldDecl) && name.StartsWith("__AnonymousFieldDecl_", StringComparison.Ordinal))
else if ((namedDecl is FieldDecl fieldDecl) && name.StartsWith(AnonymousFieldDeclPrefix, StringComparison.Ordinal))
{
if (fieldDecl.Type.AsCXXRecordDecl?.IsAnonymousStructOrUnion == true)
{
Expand All @@ -482,7 +482,7 @@ private string GetRemappedCursorName(NamedDecl namedDecl, out string nativeTypeN
}
}
}
else if ((namedDecl is RecordDecl recordDecl) && name.StartsWith("__AnonymousRecord_", StringComparison.Ordinal))
else if ((namedDecl is RecordDecl recordDecl) && IsAnonymousRecord(name))
{
remappedName = GetRemappedNameForAnonymousRecord(recordDecl);
}
Expand Down Expand Up @@ -614,7 +614,7 @@ private string GetRemappedName(string name, Cursor? cursor, bool tryRemapOperato
return AddUsingDirectiveIfNeeded(_outputBuilder, remappedName, skipUsing);
}

if ((cursor is CXXBaseSpecifier cxxBaseSpecifier) && remappedName.StartsWith("__AnonymousBase_", StringComparison.Ordinal))
if ((cursor is CXXBaseSpecifier cxxBaseSpecifier) && remappedName.StartsWith(AnonymousBasePrefix, StringComparison.Ordinal))
{
Debug.Assert(_cxxRecordDeclContext is not null);
remappedName = "Base";
Expand Down Expand Up @@ -668,12 +668,12 @@ private string GetRemappedTypeName(Cursor? cursor, Cursor? context, Type type, o
type = arrayType.ElementType;
}

if (IsType<RecordType>(cursor, type, out var recordType) && remappedName.StartsWith("__AnonymousRecord_", StringComparison.Ordinal))
if (IsType<RecordType>(cursor, type, out var recordType) && IsAnonymousRecord(remappedName))
{
var recordDecl = recordType.Decl;
remappedName = GetRemappedNameForAnonymousRecord(recordDecl);
}
else if (IsType<EnumType>(cursor, type, out var enumType) && remappedName.StartsWith("__AnonymousEnum_", StringComparison.Ordinal))
else if (IsType<EnumType>(cursor, type, out var enumType) && IsAnonymousEnum(remappedName))
{
remappedName = GetRemappedTypeName(enumType.Decl, context: null, enumType.Decl.IntegerType, out _, skipUsing);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ private void VisitEnumConstantDecl(EnumConstantDecl enumConstantDecl)
{
parentName = GetRemappedCursorName(enumDecl);

if (parentName.StartsWith("__AnonymousEnum_", StringComparison.Ordinal))
if (IsAnonymousEnum(parentName))
{
parentName = "";
isAnonymousEnum = true;
Expand Down Expand Up @@ -365,7 +365,7 @@ private void VisitEnumDecl(EnumDecl enumDecl)
var escapedName = EscapeName(name);
var isAnonymousEnum = false;

if (name.StartsWith("__AnonymousEnum_", StringComparison.Ordinal))
if (IsAnonymousEnum(name))
{
isAnonymousEnum = true;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1026,7 +1026,7 @@ private void VisitDeclRefExpr(DeclRefExpr declRefExpr)

if (!_config.DontUseUsingStaticsForEnums)
{
if (enumName.StartsWith("__AnonymousEnum_", StringComparison.Ordinal))
if (IsAnonymousEnum(enumName))
{
var className = GetClass(enumName);

Expand Down
12 changes: 11 additions & 1 deletion sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ public sealed partial class PInvokeGenerator : IDisposable
{
private const int DefaultStreamWriterBufferSize = 1024;

private const string AnonymousNamePrefix = "__Anonymous";
private const string AnonymousBasePrefix = $"{AnonymousNamePrefix}Base_";
private const string AnonymousEnumPrefix = $"{AnonymousNamePrefix}Enum_";
private const string AnonymousFieldDeclPrefix = $"{AnonymousNamePrefix}FieldDecl_";
private const string AnonymousRecordPrefix = $"{AnonymousNamePrefix}Record_";

private static readonly Encoding s_defaultStreamWriterEncoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: true);
private static readonly string[] s_doubleColonSeparator = ["::"];
private static readonly char[] s_doubleQuoteSeparator = ['"'];
Expand Down Expand Up @@ -1076,9 +1082,13 @@ private static string GetAnonymousName(Cursor cursor, string kind)
{
cursor.Location.GetFileLocation(out var file, out var line, out var column, out _);
var fileName = Path.GetFileNameWithoutExtension(file.Name.ToString());
return $"__Anonymous{kind}_{fileName}_L{line}_C{column}";
return $"{AnonymousNamePrefix}{kind}_{fileName}_L{line}_C{column}";
}

private static bool IsAnonymousEnum(string name) => name.StartsWith(AnonymousEnumPrefix, StringComparison.Ordinal);

private static bool IsAnonymousRecord(string name) => name.StartsWith(AnonymousRecordPrefix, StringComparison.Ordinal);

private string GetArtificialFixedSizedBufferName(FieldDecl fieldDecl)
{
var name = GetRemappedCursorName(fieldDecl);
Expand Down
Loading