Skip to content

Commit e1132cf

Browse files
committed
Ensure string sets are using the ordinal string comparer
1 parent b8a50b9 commit e1132cf

File tree

5 files changed

+42
-41
lines changed

5 files changed

+42
-41
lines changed

sources/ClangSharp.PInvokeGenerator/CSharp/CSharpOutputBuilder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ internal sealed partial class CSharpOutputBuilder(string name, PInvokeGenerator
1818
private readonly PInvokeGenerator _generator = generator;
1919
private readonly List<string> _contents = [];
2020
private readonly StringBuilder _currentLine = new StringBuilder();
21-
private readonly SortedSet<string> _usingDirectives = [];
22-
private readonly SortedSet<string> _staticUsingDirectives = [];
21+
private readonly SortedSet<string> _usingDirectives = new SortedSet<string>(StringComparer.Ordinal);
22+
private readonly SortedSet<string> _staticUsingDirectives = new SortedSet<string>(StringComparer.Ordinal);
2323
private readonly string _indentationString = indentationString;
2424
private readonly bool _isTestOutput = isTestOutput;
2525

sources/ClangSharp.PInvokeGenerator/OutputBuilderFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace ClangSharp;
1212
internal sealed class OutputBuilderFactory(PInvokeGenerator generator)
1313
{
1414
private readonly bool _writeSourceLocation = generator.Config.GenerateSourceLocationAttribute;
15-
private readonly Dictionary<string, IOutputBuilder> _outputBuilders = [];
15+
private readonly Dictionary<string, IOutputBuilder> _outputBuilders = new Dictionary<string, IOutputBuilder>(StringComparer.Ordinal);
1616

1717
public IEnumerable<IOutputBuilder> OutputBuilders => _outputBuilders.Values;
1818

sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.VisitDecl.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1558,7 +1558,7 @@ private void VisitRecordDecl(RecordDecl recordDecl)
15581558

15591559
if (!_topLevelClassUsings.TryGetValue(name, out var withUsings))
15601560
{
1561-
withUsings = [];
1561+
withUsings = new HashSet<string>(StringComparer.Ordinal);
15621562
}
15631563

15641564
if (desc.LayoutAttribute is not null)
@@ -3310,7 +3310,7 @@ void ForUnderlyingType(TypedefDecl typedefDecl, Type underlyingType, bool onlyHa
33103310
{
33113311
if (!_allValidNameRemappings.TryGetValue(underlyingName, out var allRemappings))
33123312
{
3313-
allRemappings = [];
3313+
allRemappings = new HashSet<string>(StringComparer.Ordinal);
33143314
_allValidNameRemappings[underlyingName] = allRemappings;
33153315
}
33163316
_ = allRemappings.Add(typedefName);
@@ -3320,7 +3320,7 @@ void ForUnderlyingType(TypedefDecl typedefDecl, Type underlyingType, bool onlyHa
33203320
{
33213321
if (!_traversedValidNameRemappings.TryGetValue(underlyingName, out var traversedRemappings))
33223322
{
3323-
traversedRemappings = [];
3323+
traversedRemappings = new HashSet<string>(StringComparer.Ordinal);
33243324
_traversedValidNameRemappings[underlyingName] = traversedRemappings;
33253325
}
33263326
_ = traversedRemappings.Add(typedefName);

sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Globalization;
88
using System.IO;
99
using System.Linq;
10+
using System.Runtime.CompilerServices;
1011
using System.Runtime.InteropServices;
1112
using System.Text;
1213
using System.Text.RegularExpressions;
@@ -137,31 +138,31 @@ public PInvokeGenerator(PInvokeGeneratorConfiguration config, Func<string, Strea
137138
return new FileStream(path, FileMode.Create);
138139
});
139140
_fileContentsBuilder = new StringBuilder();
140-
_visitedFiles = [];
141+
_visitedFiles = new HashSet<string>(StringComparer.Ordinal);
141142
_diagnostics = [];
142143
_context = new LinkedList<(Cursor, object?)>();
143-
_uuidsToGenerate = [];
144-
_generatedUuids = [];
144+
_uuidsToGenerate = new Dictionary<string, Guid>(StringComparer.Ordinal);
145+
_generatedUuids = new HashSet<string>(StringComparer.Ordinal);
145146
_cursorNames = [];
146147
_cursorQualifiedNames = [];
147148
_typeNames = [];
148-
_allValidNameRemappings = new Dictionary<string, HashSet<string>>() {
149+
_allValidNameRemappings = new Dictionary<string, HashSet<string>>(StringComparer.Ordinal) {
149150
["intptr_t"] = ["IntPtr", "nint"],
150151
["ptrdiff_t"] = ["IntPtr", "nint"],
151152
["size_t"] = ["UIntPtr", "nuint"],
152153
["uintptr_t"] = ["UIntPtr", "nuint"],
153154
["_GUID"] = ["Guid"],
154155
};
155-
_traversedValidNameRemappings = [];
156+
_traversedValidNameRemappings = new Dictionary<string, HashSet<string>>(StringComparer.Ordinal);
156157
_overloadIndices = [];
157158
_isExcluded = [];
158-
_topLevelClassHasGuidMember = [];
159-
_topLevelClassIsUnsafe = [];
160-
_topLevelClassNames = [];
161-
_topLevelClassAttributes = [];
159+
_topLevelClassHasGuidMember = new Dictionary<string, bool>(StringComparer.Ordinal);
160+
_topLevelClassIsUnsafe = new Dictionary<string, bool>(StringComparer.Ordinal);
161+
_topLevelClassNames = new HashSet<string>(StringComparer.Ordinal);
162+
_topLevelClassAttributes = new Dictionary<string, List<string>>(StringComparer.Ordinal);
162163
_fileContents = [];
163-
_topLevelClassUsings = [];
164-
_usedRemappings = [];
164+
_topLevelClassUsings = new Dictionary<string, HashSet<string>>(StringComparer.Ordinal);
165+
_usedRemappings = new HashSet<string>(StringComparer.Ordinal);
165166
_filePath = "";
166167
_clangCommandLineArgs = [];
167168
_placeholderMacroType = GetPlaceholderMacroType();
@@ -214,8 +215,8 @@ public void Close()
214215
Stream? stream = null;
215216
Stream? testStream = null;
216217

217-
var methodClassOutputBuilders = new Dictionary<string, IOutputBuilder>();
218-
var methodClassTestOutputBuilders = new Dictionary<string, IOutputBuilder>();
218+
var methodClassOutputBuilders = new Dictionary<string, IOutputBuilder>(StringComparer.Ordinal);
219+
var methodClassTestOutputBuilders = new Dictionary<string, IOutputBuilder>(StringComparer.Ordinal);
219220
var emitNamespaceDeclaration = true;
220221
var leaveStreamOpen = false;
221222

sources/ClangSharp.PInvokeGenerator/PInvokeGeneratorConfiguration.cs

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -81,28 +81,28 @@ public PInvokeGeneratorConfiguration(string language, string languageStandard, s
8181
_methodPrefixToStrip = DefaultMethodPrefixToStripValue;
8282
_testOutputLocation = DefaultTestOutputLocationValue;
8383

84-
_excludedNames = [];
85-
_forceRemappedNames = [];
86-
_includedNames = [];
87-
_nativeTypeNamesToStrip = [];
88-
_withManualImports = [];
89-
_traversalNames = [];
90-
_withSetLastErrors = [];
91-
_withSuppressGCTransitions = [];
92-
93-
_remappedNames = [];
94-
_withAccessSpecifiers = [];
95-
_withAttributes = [];
96-
_withCallConvs = [];
97-
_withClasses = [];
98-
_withGuids = [];
99-
_withLengths = [];
100-
_withLibraryPaths = [];
101-
_withNamespaces = [];
102-
_withTransparentStructs = [];
103-
_withTypes = [];
104-
_withUsings = [];
105-
_withPackings = [];
84+
_excludedNames = new SortedSet<string>(StringComparer.Ordinal);
85+
_forceRemappedNames = new SortedSet<string>(StringComparer.Ordinal);
86+
_includedNames = new SortedSet<string>(StringComparer.Ordinal);
87+
_nativeTypeNamesToStrip = new SortedSet<string>(StringComparer.Ordinal);
88+
_withManualImports = new SortedSet<string>(StringComparer.Ordinal);
89+
_traversalNames = new SortedSet<string>(StringComparer.Ordinal);
90+
_withSetLastErrors = new SortedSet<string>(StringComparer.Ordinal);
91+
_withSuppressGCTransitions = new SortedSet<string>(StringComparer.Ordinal);
92+
93+
_remappedNames = new Dictionary<string, string>(StringComparer.Ordinal);
94+
_withAccessSpecifiers = new Dictionary<string, AccessSpecifier>(StringComparer.Ordinal);
95+
_withAttributes = new Dictionary<string, IReadOnlyList<string>>(StringComparer.Ordinal);
96+
_withCallConvs = new Dictionary<string, string>(StringComparer.Ordinal);
97+
_withClasses = new Dictionary<string, string>(StringComparer.Ordinal);
98+
_withGuids = new Dictionary<string, Guid>(StringComparer.Ordinal);
99+
_withLengths = new Dictionary<string, string>(StringComparer.Ordinal);
100+
_withLibraryPaths = new Dictionary<string, string>(StringComparer.Ordinal);
101+
_withNamespaces = new Dictionary<string, string>(StringComparer.Ordinal);
102+
_withTransparentStructs = new Dictionary<string, (string, PInvokeGeneratorTransparentStructKind)>(StringComparer.Ordinal);
103+
_withTypes = new Dictionary<string, string>(StringComparer.Ordinal);
104+
_withUsings = new Dictionary<string, IReadOnlyList<string>>(StringComparer.Ordinal);
105+
_withPackings = new Dictionary<string, string>(StringComparer.Ordinal);
106106

107107
if ((outputMode == PInvokeGeneratorOutputMode.Xml) && !options.HasFlag(PInvokeGeneratorConfigurationOptions.GenerateMultipleFiles) && (options.HasFlag(PInvokeGeneratorConfigurationOptions.GenerateTestsNUnit) || options.HasFlag(PInvokeGeneratorConfigurationOptions.GenerateTestsXUnit)))
108108
{

0 commit comments

Comments
 (0)