Skip to content

Commit 15ecf3b

Browse files
committed
TypeMap: refactor CSharp backend into common methods + migration
1 parent bf5a6ea commit 15ecf3b

File tree

12 files changed

+132
-160
lines changed

12 files changed

+132
-160
lines changed

src/Generator/AST/Utils.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ public static bool IsMappedToPrimitive(ITypeMapDatabase typeMaps, Type type)
207207
return false;
208208

209209
var typePrinterContext = new TypePrinterContext { Type = type };
210-
var mappedTo = typeMap.CSharpSignatureType(typePrinterContext);
210+
var mappedTo = typeMap.SignatureType(typePrinterContext);
211211
mappedTo = mappedTo.Desugar();
212212
mappedTo = (mappedTo.GetFinalPointee() ?? mappedTo).Desugar();
213213
return (mappedTo.IsPrimitiveType() ||

src/Generator/Generators/CSharp/CSharpMarshal.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public override bool VisitType(Type type, TypeQualifiers quals)
4545
TypeMap typeMap;
4646
if (Context.Context.TypeMaps.FindTypeMap(type, out typeMap) && typeMap.DoesMarshalling)
4747
{
48-
typeMap.CSharpMarshalToManaged(Context);
48+
typeMap.MarshalToManaged(Context);
4949
return false;
5050
}
5151

@@ -471,7 +471,7 @@ public override bool VisitType(Type type, TypeQualifiers quals)
471471
TypeMap typeMap;
472472
if (Context.Context.TypeMaps.FindTypeMap(type, out typeMap) && typeMap.DoesMarshalling)
473473
{
474-
typeMap.CSharpMarshalToNative(Context);
474+
typeMap.MarshalToNative(Context);
475475
return false;
476476
}
477477

src/Generator/Generators/CSharp/CSharpSources.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3158,7 +3158,7 @@ public void GenerateFunctionCall(string functionName, Function function,
31583158
Type = indirectRetType.Type.Desugar()
31593159
};
31603160

3161-
WriteLine("{0} {1};", typeMap.CSharpSignatureType(typePrinterContext),
3161+
WriteLine("{0} {1};", typeMap.SignatureType(typePrinterContext),
31623162
Helpers.ReturnIdentifier);
31633163
}
31643164
else

src/Generator/Generators/CSharp/CSharpTypePrinter.cs

+10-10
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public override TypePrinterResult VisitTagType(TagType tag, TypeQualifiers quals
3636
return string.Empty;
3737

3838
TypeMap typeMap;
39-
if (TypeMapDatabase.FindTypeMap(tag, out typeMap))
39+
if (TypeMapDatabase.FindTypeMap(tag, GeneratorKind.CSharp, out typeMap))
4040
{
4141
typeMap.Type = tag;
4242

@@ -47,7 +47,7 @@ public override TypePrinterResult VisitTagType(TagType tag, TypeQualifiers quals
4747
Type = tag
4848
};
4949

50-
return typeMap.CSharpSignatureType(typePrinterContext).ToString();
50+
return typeMap.SignatureType(typePrinterContext).ToString();
5151
}
5252

5353
return base.VisitTagType(tag, quals);
@@ -150,7 +150,7 @@ public override TypePrinterResult VisitArrayType(ArrayType array,
150150
public override TypePrinterResult VisitBuiltinType(BuiltinType builtin, TypeQualifiers quals)
151151
{
152152
TypeMap typeMap;
153-
if (TypeMapDatabase.FindTypeMap(builtin, out typeMap))
153+
if (TypeMapDatabase.FindTypeMap(builtin, GeneratorKind.CSharp, out typeMap))
154154
{
155155
var typePrinterContext = new TypePrinterContext()
156156
{
@@ -159,7 +159,7 @@ public override TypePrinterResult VisitBuiltinType(BuiltinType builtin, TypeQual
159159
Type = builtin,
160160
Parameter = Parameter
161161
};
162-
return typeMap.CSharpSignatureType(typePrinterContext).Visit(this);
162+
return typeMap.SignatureType(typePrinterContext).Visit(this);
163163
}
164164
return base.VisitBuiltinType(builtin, quals);
165165
}
@@ -183,15 +183,15 @@ public override TypePrinterResult VisitPointerType(PointerType pointer,
183183
if (allowStrings && pointer.IsConstCharString())
184184
{
185185
TypeMap typeMap;
186-
TypeMapDatabase.FindTypeMap(pointer, out typeMap);
186+
TypeMapDatabase.FindTypeMap(pointer, GeneratorKind.CSharp, out typeMap);
187187
var typePrinterContext = new TypePrinterContext()
188188
{
189189
Kind = ContextKind,
190190
MarshalKind = MarshalKind,
191191
Type = pointer.Pointee,
192192
Parameter = Parameter
193193
};
194-
return typeMap.CSharpSignatureType(typePrinterContext).Visit(this);
194+
return typeMap.SignatureType(typePrinterContext).Visit(this);
195195
}
196196

197197
var pointee = pointer.Pointee.Desugar();
@@ -258,7 +258,7 @@ public override TypePrinterResult VisitTypedefType(TypedefType typedef,
258258
var decl = typedef.Declaration;
259259

260260
TypeMap typeMap;
261-
if (TypeMapDatabase.FindTypeMap(typedef, out typeMap))
261+
if (TypeMapDatabase.FindTypeMap(typedef, GeneratorKind.CSharp, out typeMap))
262262
{
263263
typeMap.Type = typedef;
264264

@@ -270,7 +270,7 @@ public override TypePrinterResult VisitTypedefType(TypedefType typedef,
270270
Parameter = Parameter
271271
};
272272

273-
return typeMap.CSharpSignatureType(typePrinterContext).ToString();
273+
return typeMap.SignatureType(typePrinterContext).ToString();
274274
}
275275

276276
FunctionType func;
@@ -299,7 +299,7 @@ public override TypePrinterResult VisitTemplateSpecializationType(
299299
template.Template.TemplatedDecl;
300300

301301
TypeMap typeMap;
302-
if (!TypeMapDatabase.FindTypeMap(template, out typeMap))
302+
if (!TypeMapDatabase.FindTypeMap(template, GeneratorKind.CSharp, out typeMap))
303303
{
304304
if (ContextKind == TypePrinterContextKind.Managed &&
305305
decl == template.Template.TemplatedDecl &&
@@ -330,7 +330,7 @@ public override TypePrinterResult VisitTemplateSpecializationType(
330330
MarshalKind = MarshalKind
331331
};
332332

333-
return typeMap.CSharpSignatureType(typePrinterContext).ToString();
333+
return typeMap.SignatureType(typePrinterContext).ToString();
334334
}
335335

336336
public override TypePrinterResult VisitDependentTemplateSpecializationType(

src/Generator/Generators/ExtensionMethods.cs

+2-5
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,9 @@ public static Type GetMappedType(this Type type, TypeMapDatabase typeMaps,
6363
Type = typeMap.Type
6464
};
6565

66-
switch (generatorKind)
66+
if (generatorKind == GeneratorKind.CLI || generatorKind == GeneratorKind.CSharp)
6767
{
68-
case var _ when ReferenceEquals(generatorKind, GeneratorKind.CLI):
69-
return typeMap.SignatureType(typePrinterContext).Desugar();
70-
case var _ when ReferenceEquals(generatorKind, GeneratorKind.CSharp):
71-
return typeMap.CSharpSignatureType(typePrinterContext).Desugar();
68+
return typeMap.SignatureType(typePrinterContext).Desugar();
7269
}
7370
}
7471

src/Generator/Passes/ExpressionHelper.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,9 @@ internal static class ExpressionHelper
6868

6969
public static System.Type GetSystemType(BindingContext context, Type type)
7070
{
71-
if (context.TypeMaps.FindTypeMap(type, out TypeMap typeMap))
71+
if (context.TypeMaps.FindTypeMap(type, GeneratorKind.CSharp, out TypeMap typeMap))
7272
{
73-
var cilType = typeMap.CSharpSignatureType(new TypePrinterContext { Type = type, Kind = TypePrinterContextKind.Managed }) as CILType;
73+
var cilType = typeMap.SignatureType(new TypePrinterContext { Type = type, Kind = TypePrinterContextKind.Managed }) as CILType;
7474
if (cilType != null)
7575
return cilType.Type;
7676
}
@@ -239,7 +239,7 @@ private static bool CheckForDefaultPointer(BindingContext context, Type desugare
239239
var typePrinterResult = type.Visit(typePrinter);
240240

241241
TypeMap typeMap;
242-
if (context.TypeMaps.FindTypeMap(type, out typeMap))
242+
if (context.TypeMaps.FindTypeMap(type, GeneratorKind.CSharp, out typeMap))
243243
{
244244
var typePrinterContext = new TypePrinterContext()
245245
{
@@ -248,7 +248,7 @@ private static bool CheckForDefaultPointer(BindingContext context, Type desugare
248248
Type = type
249249
};
250250

251-
var typeInSignature = typeMap.CSharpSignatureType(typePrinterContext)
251+
var typeInSignature = typeMap.SignatureType(typePrinterContext)
252252
.SkipPointerRefs().Desugar();
253253

254254
Enumeration @enum;
@@ -413,7 +413,7 @@ private static bool CheckForChar(BindingContext context, Type desugared, ref str
413413

414414
private static bool CheckForString(BindingContext context, Type desugared, ref string result)
415415
{
416-
if (context.TypeMaps.FindTypeMap(desugared, out TypeMap typeMap))
416+
if (context.TypeMaps.FindTypeMap(desugared, GeneratorKind.CSharp, out TypeMap typeMap))
417417
{
418418
var typePrinterContext = new TypePrinterContext()
419419
{
@@ -422,7 +422,7 @@ private static bool CheckForString(BindingContext context, Type desugared, ref s
422422
Type = desugared
423423
};
424424

425-
var typeInSignature = typeMap.CSharpSignatureType(typePrinterContext)
425+
var typeInSignature = typeMap.SignatureType(typePrinterContext)
426426
.SkipPointerRefs().Desugar();
427427

428428
if (typeInSignature is CILType managed && managed.Type == typeof(string))

src/Generator/Passes/ValidateOperatorsPass.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,9 @@ private bool IsValidOperatorOverload(Method @operator)
9090
return type.IsPrimitiveType(PrimitiveType.Int);
9191
case var _ when ReferenceEquals(kind, GeneratorKind.CSharp):
9292
Types.TypeMap typeMap;
93-
if (Context.TypeMaps.FindTypeMap(type, out typeMap))
93+
if (Context.TypeMaps.FindTypeMap(type, GeneratorKind.CSharp, out typeMap))
9494
{
95-
var mappedTo = typeMap.CSharpSignatureType(
95+
var mappedTo = typeMap.SignatureType(
9696
new TypePrinterContext
9797
{
9898
Parameter = parameter,

src/Generator/Types/Std/Stdlib.CLI.cs

+16-19
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@
55
using CppSharp.Generators.AST;
66
using CppSharp.Generators.C;
77
using CppSharp.Generators.CLI;
8-
using CppSharp.Generators.CSharp;
98

10-
namespace CppSharp.Types.Std
9+
namespace CppSharp.Types.Std.CLI
1110
{
1211
[TypeMap("const char*", GeneratorKindID = GeneratorKind.CLI_ID)]
13-
public partial class ConstCharPointer : TypeMap
12+
public class ConstCharPointer : TypeMap
1413
{
1514
public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind)
1615
{
@@ -57,33 +56,32 @@ public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind)
5756
$"{Context.Options.Encoding.EncodingName} is not supported yet.");
5857

5958
ctx.Return.Write(
60-
$@"({ctx.ReturnVarName} == 0 ? nullptr : clix::marshalString<clix::{
61-
param}>({ctx.ReturnVarName}))");
59+
$@"({ctx.ReturnVarName} == 0 ? nullptr : clix::marshalString<clix::{param}>({ctx.ReturnVarName}))");
6260
}
6361
}
6462

6563
[TypeMap("const char[]", GeneratorKindID = GeneratorKind.CLI_ID)]
66-
public partial class ConstCharArray : ConstCharPointer
64+
public class ConstCharArray : ConstCharPointer
6765
{
6866
}
6967

7068
[TypeMap("const wchar_t*", GeneratorKindID = GeneratorKind.CLI_ID)]
71-
public partial class ConstWCharTPointer : ConstCharPointer
69+
public class ConstWCharTPointer : ConstCharPointer
7270
{
7371
}
7472

7573
[TypeMap("const char16_t*", GeneratorKindID = GeneratorKind.CLI_ID)]
76-
public partial class ConstChar16TPointer : ConstCharPointer
74+
public class ConstChar16TPointer : ConstCharPointer
7775
{
7876
}
7977

8078
[TypeMap("const char32_t*", GeneratorKindID = GeneratorKind.CLI_ID)]
81-
public partial class ConstChar32TPointer : ConstCharPointer
79+
public class ConstChar32TPointer : ConstCharPointer
8280
{
8381
}
8482

8583
[TypeMap("basic_string<char, char_traits<char>, allocator<char>>", GeneratorKindID = GeneratorKind.CLI_ID)]
86-
public partial class String : TypeMap
84+
public class String : TypeMap
8785
{
8886
public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind)
8987
{
@@ -104,7 +102,7 @@ public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind)
104102
}
105103

106104
[TypeMap("std::wstring", GeneratorKindID = GeneratorKind.CLI_ID)]
107-
public partial class WString : TypeMap
105+
public class WString : TypeMap
108106
{
109107
public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind)
110108
{
@@ -125,7 +123,7 @@ public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind)
125123
}
126124

127125
[TypeMap("std::vector", GeneratorKindID = GeneratorKind.CLI_ID)]
128-
public partial class Vector : TypeMap
126+
public class Vector : TypeMap
129127
{
130128
public override bool IsIgnored
131129
{
@@ -259,16 +257,15 @@ public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind)
259257
}
260258

261259
[TypeMap("std::map", GeneratorKindID = GeneratorKind.CLI_ID)]
262-
public partial class Map : TypeMap
260+
public class Map : TypeMap
263261
{
264262
public override bool IsIgnored { get { return true; } }
265263

266264
public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind)
267265
{
268266
var type = Type as TemplateSpecializationType;
269267
return new CustomType(
270-
$@"::System::Collections::Generic::Dictionary<{
271-
type.Arguments[0].Type}, {type.Arguments[1].Type}>^");
268+
$@"::System::Collections::Generic::Dictionary<{type.Arguments[0].Type}, {type.Arguments[1].Type}>^");
272269
}
273270

274271
public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind)
@@ -283,19 +280,19 @@ public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind)
283280
}
284281

285282
[TypeMap("std::list", GeneratorKindID = GeneratorKind.CLI_ID)]
286-
public partial class List : TypeMap
283+
public class List : TypeMap
287284
{
288285
public override bool IsIgnored { get { return true; } }
289286
}
290287

291288
[TypeMap("std::shared_ptr", GeneratorKindID = GeneratorKind.CLI_ID)]
292-
public partial class SharedPtr : TypeMap
289+
public class SharedPtr : TypeMap
293290
{
294291
public override bool IsIgnored { get { return true; } }
295292
}
296293

297294
[TypeMap("basic_ostream<char, char_traits<char>>", GeneratorKind.CLI_ID)]
298-
public partial class OStream : TypeMap
295+
public class OStream : TypeMap
299296
{
300297
public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind)
301298
{
@@ -315,7 +312,7 @@ public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind)
315312
}
316313

317314
[TypeMap("std::nullptr_t", GeneratorKindID = GeneratorKind.CLI_ID)]
318-
public partial class NullPtr : TypeMap
315+
public class NullPtr : TypeMap
319316
{
320317
public override bool DoesMarshalling { get { return false; } }
321318

0 commit comments

Comments
 (0)