Skip to content

Commit a3fabbe

Browse files
committed
Added pointer wrapping to metadata.
1 parent 7a1a3c6 commit a3fabbe

19 files changed

+301
-238
lines changed

HexaGen.Tests/CsGeneratorTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ namespace HexaGen.Tests
33
using CppAst;
44
using HexaGen.Core.Logging;
55
using HexaGen.Core.Mapping;
6+
using HexaGen.Metadata;
67
using HexaGen.Patching;
78
using System;
89
using System.Text;

HexaGen/CsCodeGenerator.Constants.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
namespace HexaGen
22
{
33
using CppAst;
4-
using HexaGen.Language.Cpp;
4+
using HexaGen.Metadata;
55
using System.Collections.Generic;
66

77
public unsafe partial class CsCodeGenerator
@@ -12,8 +12,7 @@ public unsafe partial class CsCodeGenerator
1212

1313
protected virtual List<string> SetupConstantUsings()
1414
{
15-
List<string> usings = new() { "System", "HexaGen.Runtime" };
16-
usings.AddRange(config.Usings);
15+
List<string> usings = ["System", "HexaGen.Runtime", .. config.Usings];
1716
return usings;
1817
}
1918

HexaGen/CsCodeGenerator.Delegates.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@ public partial class CsCodeGenerator
1515

1616
protected virtual List<string> SetupDelegateUsings()
1717
{
18-
List<string> usings = new() { "System", "System.Diagnostics", "System.Runtime.CompilerServices", "System.Runtime.InteropServices", "HexaGen.Runtime" };
19-
usings.AddRange(config.Usings);
18+
List<string> usings =
19+
[
20+
"System", "System.Diagnostics", "System.Runtime.CompilerServices", "System.Runtime.InteropServices", "HexaGen.Runtime",
21+
.. config.Usings,
22+
];
2023
return usings;
2124
}
2225

HexaGen/CsCodeGenerator.Enum.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{
33
using CppAst;
44
using HexaGen.Core.Mapping;
5+
using HexaGen.Metadata;
56
using System;
67
using System.Collections.Generic;
78
using System.IO;
@@ -15,8 +16,7 @@ public partial class CsCodeGenerator
1516

1617
protected virtual List<string> SetupEnumUsings()
1718
{
18-
List<string> usings = new() { "System", "HexaGen.Runtime" };
19-
usings.AddRange(config.Usings);
19+
List<string> usings = ["System", "HexaGen.Runtime", .. config.Usings];
2020
return usings;
2121
}
2222

HexaGen/CsCodeGenerator.Extensions.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ public partial class CsCodeGenerator
1212

1313
protected virtual List<string> SetupExtensionUsings()
1414
{
15-
List<string> usings = new() { "System", "System.Runtime.CompilerServices", "System.Runtime.InteropServices", "HexaGen.Runtime" };
16-
usings.AddRange(config.Usings);
15+
List<string> usings = ["System", "System.Runtime.CompilerServices", "System.Runtime.InteropServices", "HexaGen.Runtime", .. config.Usings];
1716
return usings;
1817
}
1918

HexaGen/CsCodeGenerator.Functions.cs

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
using HexaGen.Core.CSharp;
66
using System.Collections.Generic;
77
using System.IO;
8-
using System.Runtime.InteropServices;
9-
using System.Security.Cryptography;
108
using System.Text;
119

1210
public enum WriteFunctionFlags
@@ -30,8 +28,7 @@ public partial class CsCodeGenerator
3028

3129
protected virtual List<string> SetupFunctionUsings()
3230
{
33-
List<string> usings = new() { "System", "System.Runtime.CompilerServices", "System.Runtime.InteropServices", "HexaGen.Runtime" };
34-
usings.AddRange(config.Usings);
31+
List<string> usings = ["System", "System.Runtime.CompilerServices", "System.Runtime.InteropServices", "HexaGen.Runtime", .. config.Usings];
3532
return usings;
3633
}
3734

@@ -587,6 +584,46 @@ protected virtual void WriteFunction(GenContext context, HashSet<string> defined
587584
writer.WriteLine();
588585
}
589586

587+
private readonly List<IParameterWriter> parameterWriters =
588+
[
589+
new HandleParameterWriter(),
590+
new UseThisParameterWriter(),
591+
new DefaultValueParameterWriter(),
592+
new StringParameterWriter(),
593+
new RefParameterWriter(),
594+
new SpanParameterWriter(),
595+
new ArrayParameterWriter(),
596+
new BoolParameterWriter(),
597+
new FallthroughParameterWriter(),
598+
];
599+
600+
public IReadOnlyList<IParameterWriter> ParameterWriters => parameterWriters;
601+
602+
public void AddParamterWriter(IParameterWriter writer)
603+
{
604+
parameterWriters.Add(writer);
605+
parameterWriters.Sort(new ParameterPriorityComparer());
606+
}
607+
608+
public void RemoveParamterWriter(IParameterWriter writer)
609+
{
610+
parameterWriters.Remove(writer);
611+
}
612+
613+
public void OverwriteParameterWriter<T>(IParameterWriter newWriter) where T : IParameterWriter
614+
{
615+
for (int i = 0; i < parameterWriters.Count; i++)
616+
{
617+
var writer = parameterWriters[i];
618+
if (writer is T)
619+
{
620+
parameterWriters[i] = newWriter;
621+
break;
622+
}
623+
}
624+
parameterWriters.Sort(new ParameterPriorityComparer());
625+
}
626+
590627
protected virtual void WriteFunctionEx(GenContext context, HashSet<string> definedFunctions, CsFunction function, CsFunctionOverload overload, CsFunctionVariation variation, WriteFunctionFlags flags, params string[] modifiers)
591628
{
592629
var writer = context.Writer;
@@ -650,19 +687,6 @@ protected virtual void WriteFunctionEx(GenContext context, HashSet<string> defin
650687
}
651688

652689
FunctionWriterContext writerContext = new(context.Writer, config, sb, overload, variation, flags);
653-
List<IParameterWriter> parameterWriters =
654-
[
655-
new HandleParameterWriter(),
656-
new UseThisParameterWriter(),
657-
new DefaultValueParameterWriter(),
658-
new StringParameterWriter(),
659-
new RefParameterWriter(),
660-
new SpanParameterWriter(),
661-
new ArrayParameterWriter(),
662-
new BoolParameterWriter(),
663-
new FallthroughParameterWriter(),
664-
];
665-
parameterWriters.Sort(new ParameterPriorityComparer());
666690

667691
for (int i = 0; i < overload.Parameters.Count - offset; i++)
668692
{

HexaGen/CsCodeGenerator.Types.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,16 @@ public partial class CsCodeGenerator
1313
{
1414
protected readonly HashSet<string> LibDefinedTypes = new();
1515
public readonly HashSet<string> DefinedTypes = new();
16-
protected readonly Dictionary<string, string> WrappedPointers = new();
17-
protected readonly Dictionary<string, HashSet<string>> MemberFunctions = new();
16+
public readonly Dictionary<string, string> WrappedPointers = new();
17+
public readonly Dictionary<string, HashSet<string>> MemberFunctions = new();
1818

1919
protected virtual List<string> SetupTypeUsings()
2020
{
21-
List<string> usings = new() { "System", "System.Diagnostics", "System.Runtime.CompilerServices", "System.Runtime.InteropServices", "HexaGen.Runtime" };
22-
usings.AddRange(config.Usings);
21+
List<string> usings =
22+
[
23+
"System", "System.Diagnostics", "System.Runtime.CompilerServices", "System.Runtime.InteropServices", "HexaGen.Runtime",
24+
.. config.Usings,
25+
];
2326
return usings;
2427
}
2528

HexaGen/CsCodeGenerator.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using CppAst;
44
using HexaGen.Core.CSharp;
55
using HexaGen.Core.Logging;
6+
using HexaGen.Metadata;
67
using HexaGen.Patching;
78
using System.Text.Json;
89

@@ -212,6 +213,7 @@ public void CopyFrom(CsCodeGeneratorMetadata metadata)
212213
var typedefs = metadata.DefinedTypes;
213214
var types = metadata.DefinedTypes;
214215
var delegates = metadata.DefinedDelegates;
216+
var wrappedPointers = metadata.WrappedPointers;
215217
for (int i = 0; i < constants.Count; i++)
216218
{
217219
LibDefinedConstants.Add(constants[i]);
@@ -241,6 +243,10 @@ public void CopyFrom(CsCodeGeneratorMetadata metadata)
241243
{
242244
LibDefinedDelegates.Add(delegates[i]);
243245
}
246+
foreach (var item in wrappedPointers)
247+
{
248+
WrappedPointers[item.Key] = item.Value;
249+
}
244250
}
245251

246252
public void SaveMetadata(string path)

HexaGen/CsCodeGeneratorConfig.TypeNaming.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using CppAst;
2+
using HexaGen.Metadata;
23
using System.Text.Json.Serialization;
34

45
namespace HexaGen

HexaGen/FunctionGenerator.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,10 @@ public FunctionGenerator(CsCodeGeneratorConfig settings)
417417
steps.Add(new StringReturnGenStep());
418418
}
419419

420+
public IReadOnlyList<FunctionGenRule> Rules => rules;
421+
422+
public IReadOnlyList<FunctionGenStep> Steps => steps;
423+
420424
public void OverwriteStep<T>(FunctionGenStep step) where T : FunctionGenStep
421425
{
422426
for (int i = 0; i < steps.Count; i++)
@@ -441,6 +445,26 @@ public void OverwriteRule<T>(FunctionGenRule rule) where T : FunctionGenRule
441445
}
442446
}
443447

448+
public void AddRule(FunctionGenRule rule)
449+
{
450+
rules.Add(rule);
451+
}
452+
453+
public void RemoveRule(FunctionGenRule rule)
454+
{
455+
rules.Remove(rule);
456+
}
457+
458+
public void AddStep(FunctionGenStep step)
459+
{
460+
steps.Add(step);
461+
}
462+
463+
public void RemoveStep(FunctionGenStep step)
464+
{
465+
steps.Remove(step);
466+
}
467+
444468
public virtual void GenerateConstructorVariations(CppClass cppClass, List<CsSubClass> subClasses, string csName, CsFunctionOverload function)
445469
{
446470
settings.TryGetFunctionMapping(function.ExportedName, out var mapping);

0 commit comments

Comments
 (0)