diff --git a/src/Generator/AST/Utils.cs b/src/Generator/AST/Utils.cs index 9074614a..e5a31070 100644 --- a/src/Generator/AST/Utils.cs +++ b/src/Generator/AST/Utils.cs @@ -207,7 +207,7 @@ namespace CppSharp.AST return false; var typePrinterContext = new TypePrinterContext { Type = type }; - var mappedTo = typeMap.CSharpSignatureType(typePrinterContext); + var mappedTo = typeMap.SignatureType(typePrinterContext); mappedTo = mappedTo.Desugar(); mappedTo = (mappedTo.GetFinalPointee() ?? mappedTo).Desugar(); return (mappedTo.IsPrimitiveType() || diff --git a/src/Generator/Generators/CSharp/CSharpMarshal.cs b/src/Generator/Generators/CSharp/CSharpMarshal.cs index 09ced7d1..3dfbd1e8 100644 --- a/src/Generator/Generators/CSharp/CSharpMarshal.cs +++ b/src/Generator/Generators/CSharp/CSharpMarshal.cs @@ -45,7 +45,7 @@ namespace CppSharp.Generators.CSharp TypeMap typeMap; if (Context.Context.TypeMaps.FindTypeMap(type, out typeMap) && typeMap.DoesMarshalling) { - typeMap.CSharpMarshalToManaged(Context); + typeMap.MarshalToManaged(Context); return false; } @@ -471,7 +471,7 @@ namespace CppSharp.Generators.CSharp TypeMap typeMap; if (Context.Context.TypeMaps.FindTypeMap(type, out typeMap) && typeMap.DoesMarshalling) { - typeMap.CSharpMarshalToNative(Context); + typeMap.MarshalToNative(Context); return false; } diff --git a/src/Generator/Generators/CSharp/CSharpSources.cs b/src/Generator/Generators/CSharp/CSharpSources.cs index 8623ad3c..d8152864 100644 --- a/src/Generator/Generators/CSharp/CSharpSources.cs +++ b/src/Generator/Generators/CSharp/CSharpSources.cs @@ -3158,7 +3158,7 @@ internal static{(@new ? " new" : string.Empty)} {printedClass} __GetInstance({Ty Type = indirectRetType.Type.Desugar() }; - WriteLine("{0} {1};", typeMap.CSharpSignatureType(typePrinterContext), + WriteLine("{0} {1};", typeMap.SignatureType(typePrinterContext), Helpers.ReturnIdentifier); } else diff --git a/src/Generator/Generators/CSharp/CSharpTypePrinter.cs b/src/Generator/Generators/CSharp/CSharpTypePrinter.cs index 1453adb1..9b1b8553 100644 --- a/src/Generator/Generators/CSharp/CSharpTypePrinter.cs +++ b/src/Generator/Generators/CSharp/CSharpTypePrinter.cs @@ -36,7 +36,7 @@ namespace CppSharp.Generators.CSharp return string.Empty; TypeMap typeMap; - if (TypeMapDatabase.FindTypeMap(tag, out typeMap)) + if (TypeMapDatabase.FindTypeMap(tag, GeneratorKind.CSharp, out typeMap)) { typeMap.Type = tag; @@ -47,7 +47,7 @@ namespace CppSharp.Generators.CSharp Type = tag }; - return typeMap.CSharpSignatureType(typePrinterContext).ToString(); + return typeMap.SignatureType(typePrinterContext).ToString(); } return base.VisitTagType(tag, quals); @@ -150,7 +150,7 @@ namespace CppSharp.Generators.CSharp public override TypePrinterResult VisitBuiltinType(BuiltinType builtin, TypeQualifiers quals) { TypeMap typeMap; - if (TypeMapDatabase.FindTypeMap(builtin, out typeMap)) + if (TypeMapDatabase.FindTypeMap(builtin, GeneratorKind.CSharp, out typeMap)) { var typePrinterContext = new TypePrinterContext() { @@ -159,7 +159,7 @@ namespace CppSharp.Generators.CSharp Type = builtin, Parameter = Parameter }; - return typeMap.CSharpSignatureType(typePrinterContext).Visit(this); + return typeMap.SignatureType(typePrinterContext).Visit(this); } return base.VisitBuiltinType(builtin, quals); } @@ -183,7 +183,7 @@ namespace CppSharp.Generators.CSharp if (allowStrings && pointer.IsConstCharString()) { TypeMap typeMap; - TypeMapDatabase.FindTypeMap(pointer, out typeMap); + TypeMapDatabase.FindTypeMap(pointer, GeneratorKind.CSharp, out typeMap); var typePrinterContext = new TypePrinterContext() { Kind = ContextKind, @@ -191,7 +191,7 @@ namespace CppSharp.Generators.CSharp Type = pointer.Pointee, Parameter = Parameter }; - return typeMap.CSharpSignatureType(typePrinterContext).Visit(this); + return typeMap.SignatureType(typePrinterContext).Visit(this); } var pointee = pointer.Pointee.Desugar(); @@ -258,7 +258,7 @@ namespace CppSharp.Generators.CSharp var decl = typedef.Declaration; TypeMap typeMap; - if (TypeMapDatabase.FindTypeMap(typedef, out typeMap)) + if (TypeMapDatabase.FindTypeMap(typedef, GeneratorKind.CSharp, out typeMap)) { typeMap.Type = typedef; @@ -270,7 +270,7 @@ namespace CppSharp.Generators.CSharp Parameter = Parameter }; - return typeMap.CSharpSignatureType(typePrinterContext).ToString(); + return typeMap.SignatureType(typePrinterContext).ToString(); } FunctionType func; @@ -299,7 +299,7 @@ namespace CppSharp.Generators.CSharp template.Template.TemplatedDecl; TypeMap typeMap; - if (!TypeMapDatabase.FindTypeMap(template, out typeMap)) + if (!TypeMapDatabase.FindTypeMap(template, GeneratorKind.CSharp, out typeMap)) { if (ContextKind == TypePrinterContextKind.Managed && decl == template.Template.TemplatedDecl && @@ -330,7 +330,7 @@ namespace CppSharp.Generators.CSharp MarshalKind = MarshalKind }; - return typeMap.CSharpSignatureType(typePrinterContext).ToString(); + return typeMap.SignatureType(typePrinterContext).ToString(); } public override TypePrinterResult VisitDependentTemplateSpecializationType( diff --git a/src/Generator/Generators/ExtensionMethods.cs b/src/Generator/Generators/ExtensionMethods.cs index 3e4e9e27..c24a4703 100644 --- a/src/Generator/Generators/ExtensionMethods.cs +++ b/src/Generator/Generators/ExtensionMethods.cs @@ -63,12 +63,9 @@ namespace CppSharp.Generators Type = typeMap.Type }; - switch (generatorKind) + if (generatorKind == GeneratorKind.CLI || generatorKind == GeneratorKind.CSharp) { - case var _ when ReferenceEquals(generatorKind, GeneratorKind.CLI): - return typeMap.SignatureType(typePrinterContext).Desugar(); - case var _ when ReferenceEquals(generatorKind, GeneratorKind.CSharp): - return typeMap.CSharpSignatureType(typePrinterContext).Desugar(); + return typeMap.SignatureType(typePrinterContext).Desugar(); } } diff --git a/src/Generator/Passes/ExpressionHelper.cs b/src/Generator/Passes/ExpressionHelper.cs index 435dbcf6..be5e924d 100644 --- a/src/Generator/Passes/ExpressionHelper.cs +++ b/src/Generator/Passes/ExpressionHelper.cs @@ -68,9 +68,9 @@ namespace CppSharp.Internal public static System.Type GetSystemType(BindingContext context, Type type) { - if (context.TypeMaps.FindTypeMap(type, out TypeMap typeMap)) + if (context.TypeMaps.FindTypeMap(type, GeneratorKind.CSharp, out TypeMap typeMap)) { - var cilType = typeMap.CSharpSignatureType(new TypePrinterContext { Type = type, Kind = TypePrinterContextKind.Managed }) as CILType; + var cilType = typeMap.SignatureType(new TypePrinterContext { Type = type, Kind = TypePrinterContextKind.Managed }) as CILType; if (cilType != null) return cilType.Type; } @@ -239,7 +239,7 @@ namespace CppSharp.Internal var typePrinterResult = type.Visit(typePrinter); TypeMap typeMap; - if (context.TypeMaps.FindTypeMap(type, out typeMap)) + if (context.TypeMaps.FindTypeMap(type, GeneratorKind.CSharp, out typeMap)) { var typePrinterContext = new TypePrinterContext() { @@ -248,7 +248,7 @@ namespace CppSharp.Internal Type = type }; - var typeInSignature = typeMap.CSharpSignatureType(typePrinterContext) + var typeInSignature = typeMap.SignatureType(typePrinterContext) .SkipPointerRefs().Desugar(); Enumeration @enum; @@ -413,7 +413,7 @@ namespace CppSharp.Internal private static bool CheckForString(BindingContext context, Type desugared, ref string result) { - if (context.TypeMaps.FindTypeMap(desugared, out TypeMap typeMap)) + if (context.TypeMaps.FindTypeMap(desugared, GeneratorKind.CSharp, out TypeMap typeMap)) { var typePrinterContext = new TypePrinterContext() { @@ -422,7 +422,7 @@ namespace CppSharp.Internal Type = desugared }; - var typeInSignature = typeMap.CSharpSignatureType(typePrinterContext) + var typeInSignature = typeMap.SignatureType(typePrinterContext) .SkipPointerRefs().Desugar(); if (typeInSignature is CILType managed && managed.Type == typeof(string)) diff --git a/src/Generator/Passes/ValidateOperatorsPass.cs b/src/Generator/Passes/ValidateOperatorsPass.cs index 49fe8d01..690bb092 100644 --- a/src/Generator/Passes/ValidateOperatorsPass.cs +++ b/src/Generator/Passes/ValidateOperatorsPass.cs @@ -90,9 +90,9 @@ namespace CppSharp.Passes return type.IsPrimitiveType(PrimitiveType.Int); case var _ when ReferenceEquals(kind, GeneratorKind.CSharp): Types.TypeMap typeMap; - if (Context.TypeMaps.FindTypeMap(type, out typeMap)) + if (Context.TypeMaps.FindTypeMap(type, GeneratorKind.CSharp, out typeMap)) { - var mappedTo = typeMap.CSharpSignatureType( + var mappedTo = typeMap.SignatureType( new TypePrinterContext { Parameter = parameter, diff --git a/src/Generator/Types/Std/Stdlib.CLI.cs b/src/Generator/Types/Std/Stdlib.CLI.cs index 554ae09b..454a4523 100644 --- a/src/Generator/Types/Std/Stdlib.CLI.cs +++ b/src/Generator/Types/Std/Stdlib.CLI.cs @@ -5,12 +5,11 @@ using CppSharp.Generators; using CppSharp.Generators.AST; using CppSharp.Generators.C; using CppSharp.Generators.CLI; -using CppSharp.Generators.CSharp; -namespace CppSharp.Types.Std +namespace CppSharp.Types.Std.CLI { [TypeMap("const char*", GeneratorKindID = GeneratorKind.CLI_ID)] - public partial class ConstCharPointer : TypeMap + public class ConstCharPointer : TypeMap { public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { @@ -57,33 +56,32 @@ namespace CppSharp.Types.Std $"{Context.Options.Encoding.EncodingName} is not supported yet."); ctx.Return.Write( - $@"({ctx.ReturnVarName} == 0 ? nullptr : clix::marshalString({ctx.ReturnVarName}))"); + $@"({ctx.ReturnVarName} == 0 ? nullptr : clix::marshalString({ctx.ReturnVarName}))"); } } [TypeMap("const char[]", GeneratorKindID = GeneratorKind.CLI_ID)] - public partial class ConstCharArray : ConstCharPointer + public class ConstCharArray : ConstCharPointer { } [TypeMap("const wchar_t*", GeneratorKindID = GeneratorKind.CLI_ID)] - public partial class ConstWCharTPointer : ConstCharPointer + public class ConstWCharTPointer : ConstCharPointer { } [TypeMap("const char16_t*", GeneratorKindID = GeneratorKind.CLI_ID)] - public partial class ConstChar16TPointer : ConstCharPointer + public class ConstChar16TPointer : ConstCharPointer { } [TypeMap("const char32_t*", GeneratorKindID = GeneratorKind.CLI_ID)] - public partial class ConstChar32TPointer : ConstCharPointer + public class ConstChar32TPointer : ConstCharPointer { } [TypeMap("basic_string, allocator>", GeneratorKindID = GeneratorKind.CLI_ID)] - public partial class String : TypeMap + public class String : TypeMap { public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { @@ -104,7 +102,7 @@ namespace CppSharp.Types.Std } [TypeMap("std::wstring", GeneratorKindID = GeneratorKind.CLI_ID)] - public partial class WString : TypeMap + public class WString : TypeMap { public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { @@ -125,7 +123,7 @@ namespace CppSharp.Types.Std } [TypeMap("std::vector", GeneratorKindID = GeneratorKind.CLI_ID)] - public partial class Vector : TypeMap + public class Vector : TypeMap { public override bool IsIgnored { @@ -259,7 +257,7 @@ namespace CppSharp.Types.Std } [TypeMap("std::map", GeneratorKindID = GeneratorKind.CLI_ID)] - public partial class Map : TypeMap + public class Map : TypeMap { public override bool IsIgnored { get { return true; } } @@ -267,8 +265,7 @@ namespace CppSharp.Types.Std { var type = Type as TemplateSpecializationType; return new CustomType( - $@"::System::Collections::Generic::Dictionary<{ - type.Arguments[0].Type}, {type.Arguments[1].Type}>^"); + $@"::System::Collections::Generic::Dictionary<{type.Arguments[0].Type}, {type.Arguments[1].Type}>^"); } public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind) @@ -283,19 +280,19 @@ namespace CppSharp.Types.Std } [TypeMap("std::list", GeneratorKindID = GeneratorKind.CLI_ID)] - public partial class List : TypeMap + public class List : TypeMap { public override bool IsIgnored { get { return true; } } } [TypeMap("std::shared_ptr", GeneratorKindID = GeneratorKind.CLI_ID)] - public partial class SharedPtr : TypeMap + public class SharedPtr : TypeMap { public override bool IsIgnored { get { return true; } } } [TypeMap("basic_ostream>", GeneratorKind.CLI_ID)] - public partial class OStream : TypeMap + public class OStream : TypeMap { public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { @@ -315,7 +312,7 @@ namespace CppSharp.Types.Std } [TypeMap("std::nullptr_t", GeneratorKindID = GeneratorKind.CLI_ID)] - public partial class NullPtr : TypeMap + public class NullPtr : TypeMap { public override bool DoesMarshalling { get { return false; } } diff --git a/src/Generator/Types/Std/Stdlib.CSharp.cs b/src/Generator/Types/Std/Stdlib.CSharp.cs index a3c3d6d5..45990513 100644 --- a/src/Generator/Types/Std/Stdlib.CSharp.cs +++ b/src/Generator/Types/Std/Stdlib.CSharp.cs @@ -9,46 +9,46 @@ using CppSharp.Generators; using CppSharp.Generators.CSharp; using Type = CppSharp.AST.Type; -namespace CppSharp.Types.Std +namespace CppSharp.Types.Std.CSharp { [TypeMap("int", GeneratorKindID = GeneratorKind.CSharp_ID)] - public partial class Int : TypeMap + public class Int : TypeMap { - public override Type CSharpSignatureType(TypePrinterContext ctx) => + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) => CSharpTypePrinter.GetSignedType(Context.TargetInfo.IntWidth); } [TypeMap("unsigned int", GeneratorKindID = GeneratorKind.CSharp_ID)] - public partial class UnsignedInt : TypeMap + public class UnsignedInt : TypeMap { - public override Type CSharpSignatureType(TypePrinterContext ctx) => + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) => CSharpTypePrinter.GetUnsignedType(Context.TargetInfo.IntWidth); } [TypeMap("long", GeneratorKindID = GeneratorKind.CSharp_ID)] - public partial class Long : TypeMap + public class Long : TypeMap { - public override Type CSharpSignatureType(TypePrinterContext ctx) => + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) => CSharpTypePrinter.GetSignedType(Context.TargetInfo.LongWidth); } [TypeMap("unsigned long", GeneratorKindID = GeneratorKind.CSharp_ID)] - public partial class UnsignedLong : TypeMap + public class UnsignedLong : TypeMap { - public override Type CSharpSignatureType(TypePrinterContext ctx) => + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) => CSharpTypePrinter.GetUnsignedType(Context.TargetInfo.LongWidth); } [TypeMap("char", GeneratorKindID = GeneratorKind.CSharp_ID)] - public partial class Char : TypeMap + public class Char : TypeMap { - public override Type CSharpSignatureType(TypePrinterContext ctx) + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { return new CILType(ctx.Kind == TypePrinterContextKind.Native || !Context.Options.MarshalCharAsManagedChar ? typeof(sbyte) : typeof(char)); } - public override void CSharpMarshalToNative(CSharpMarshalContext ctx) + public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind) { if (Context.Options.MarshalCharAsManagedChar) ctx.Return.Write("global::System.Convert.ToSByte({0})", @@ -57,7 +57,7 @@ namespace CppSharp.Types.Std ctx.Return.Write(ctx.Parameter.Name); } - public override void CSharpMarshalToManaged(CSharpMarshalContext ctx) + public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind) { if (Context.Options.MarshalCharAsManagedChar) ctx.Return.Write("global::System.Convert.ToChar({0})", @@ -68,27 +68,27 @@ namespace CppSharp.Types.Std } [TypeMap("char16_t", GeneratorKindID = GeneratorKind.CSharp_ID)] - public partial class Char16T : TypeMap + public class Char16T : TypeMap { - public override Type CSharpSignatureType(TypePrinterContext ctx) + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { return new CILType(typeof(char)); } } [TypeMap("wchar_t", GeneratorKindID = GeneratorKind.CSharp_ID)] - public partial class WCharT : TypeMap + public class WCharT : TypeMap { - public override Type CSharpSignatureType(TypePrinterContext ctx) + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { return new CILType(typeof(char)); } } [TypeMap("const char*", GeneratorKindID = GeneratorKind.CSharp_ID)] - public partial class ConstCharPointer : TypeMap + public class ConstCharPointer : TypeMap { - public override Type CSharpSignatureType(TypePrinterContext ctx) + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { if (ctx.Kind == TypePrinterContextKind.Managed) return new CILType(typeof(string)); @@ -117,7 +117,7 @@ namespace CppSharp.Types.Std $"{Context.Options.Encoding.EncodingName} is not supported yet."); } - public override void CSharpMarshalToNative(CSharpMarshalContext ctx) + public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind) { string param = ctx.Parameter.Name; if (ctx.Parameter.Usage == ParameterUsage.Unknown && @@ -194,7 +194,7 @@ namespace CppSharp.Types.Std ctx.Return.Write($"{bytePtr}"); } - public override void CSharpMarshalToManaged(CSharpMarshalContext ctx) + public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind) { if (ctx.Parameter != null && !ctx.Parameter.IsOut && !ctx.Parameter.IsInOut) @@ -282,29 +282,29 @@ namespace CppSharp.Types.Std } [TypeMap("const char[]", GeneratorKindID = GeneratorKind.CSharp_ID)] - public partial class ConstCharArray : ConstCharPointer + public class ConstCharArray : ConstCharPointer { } [TypeMap("const wchar_t*", GeneratorKindID = GeneratorKind.CSharp_ID)] - public partial class ConstWCharTPointer : ConstCharPointer + public class ConstWCharTPointer : ConstCharPointer { } [TypeMap("const char16_t*", GeneratorKindID = GeneratorKind.CSharp_ID)] - public partial class ConstChar16TPointer : ConstCharPointer + public class ConstChar16TPointer : ConstCharPointer { } [TypeMap("const char32_t*", GeneratorKindID = GeneratorKind.CSharp_ID)] - public partial class ConstChar32TPointer : ConstCharPointer + public class ConstChar32TPointer : ConstCharPointer { } [TypeMap("basic_string, allocator>", GeneratorKindID = GeneratorKind.CSharp_ID)] - public partial class String : TypeMap + public class String : TypeMap { - public override Type CSharpSignatureType(TypePrinterContext ctx) + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { if (ctx.Kind == TypePrinterContextKind.Managed) return new CILType(typeof(string)); @@ -316,7 +316,7 @@ namespace CppSharp.Types.Std return new CustomType(basicString.Visit(typePrinter).Type); } - public override void CSharpMarshalToNative(CSharpMarshalContext ctx) + public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind) { Type type = ctx.Parameter.Type.Desugar(); ClassTemplateSpecialization basicString = GetBasicString(type); @@ -334,15 +334,13 @@ namespace CppSharp.Types.Std var = Generator.GeneratedIdentifier(ctx.ArgName); ctx.Before.WriteLine($"fixed (void* {var} = &{ctx.ReturnVarName})"); ctx.Before.WriteOpenBraceAndIndent(); - ctx.HasCodeBlock = true; + (ctx as CSharpMarshalContext).HasCodeBlock = true; } else { var = $"&{ctx.ReturnVarName}"; } - ctx.Return.Write($@"{qualifiedBasicString}Extensions.{ - Helpers.InternalStruct}.{assign.Name}(new { - typePrinter.IntPtrType}({var}), "); + ctx.Return.Write($@"{qualifiedBasicString}Extensions.{Helpers.InternalStruct}.{assign.Name}(new {typePrinter.IntPtrType}({var}), "); if (ctx.Parameter.Type.IsTemplateParameterType()) ctx.Return.Write("(string) (object) "); ctx.Return.Write($"{ctx.Parameter.Name})"); @@ -351,22 +349,19 @@ namespace CppSharp.Types.Std else { var varBasicString = $"__basicString{ctx.ParameterIndex}"; - ctx.Before.WriteLine($@"var {varBasicString} = new { - basicString.Visit(typePrinter)}();"); + ctx.Before.WriteLine($@"var {varBasicString} = new {basicString.Visit(typePrinter)}();"); - ctx.Before.Write($@"{qualifiedBasicString}Extensions.{ - assign.Name}({varBasicString}, "); + ctx.Before.Write($@"{qualifiedBasicString}Extensions.{assign.Name}({varBasicString}, "); if (ctx.Parameter.Type.IsTemplateParameterType()) ctx.Before.Write("(string) (object) "); ctx.Before.WriteLine($"{ctx.Parameter.Name});"); ctx.Return.Write($"{varBasicString}.{Helpers.InstanceIdentifier}"); - ctx.Cleanup.WriteLine($@"{varBasicString}.Dispose({ - (!Type.IsAddress() || ctx.Parameter?.IsIndirect == true ? "disposing: true, callNativeDtor:false" : string.Empty)});"); + ctx.Cleanup.WriteLine($@"{varBasicString}.Dispose({(!Type.IsAddress() || ctx.Parameter?.IsIndirect == true ? "disposing: true, callNativeDtor:false" : string.Empty)});"); } } - public override void CSharpMarshalToManaged(CSharpMarshalContext ctx) + public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind) { var type = Type.Desugar(resolveTemplateSubstitution: false); ClassTemplateSpecialization basicString = GetBasicString(type); @@ -376,10 +371,7 @@ namespace CppSharp.Types.Std string varBasicString = $"__basicStringRet{ctx.ParameterIndex}"; bool usePointer = type.IsAddress() || ctx.MarshalKind == MarshalKind.NativeField || ctx.MarshalKind == MarshalKind.ReturnVariableArray; - ctx.Before.WriteLine($@"var {varBasicString} = { - basicString.Visit(typePrinter)}.{Helpers.CreateInstanceIdentifier}({ - (usePointer ? string.Empty : $"new {typePrinter.IntPtrType}(&")}{ - ctx.ReturnVarName}{(usePointer ? string.Empty : ")")});"); + ctx.Before.WriteLine($@"var {varBasicString} = {basicString.Visit(typePrinter)}.{Helpers.CreateInstanceIdentifier}({(usePointer ? string.Empty : $"new {typePrinter.IntPtrType}(&")}{ctx.ReturnVarName}{(usePointer ? string.Empty : ")")});"); string @string = $"{qualifiedBasicString}Extensions.{data.Name}({varBasicString})"; if (usePointer) { @@ -421,9 +413,9 @@ namespace CppSharp.Types.Std } [TypeMap("FILE", GeneratorKindID = GeneratorKind.CSharp_ID)] - public partial class FILE : TypeMap + public class FILE : TypeMap { - public override Type CSharpSignatureType(TypePrinterContext ctx) + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { return new CILType(typeof(System.IntPtr)); } diff --git a/src/Generator/Types/TypeMap.cs b/src/Generator/Types/TypeMap.cs index 65dc8568..4506ad7f 100644 --- a/src/Generator/Types/TypeMap.cs +++ b/src/Generator/Types/TypeMap.cs @@ -63,9 +63,8 @@ namespace CppSharp.Types case var _ when ReferenceEquals(kind, GeneratorKind.C): case var _ when ReferenceEquals(kind, GeneratorKind.CPlusPlus): case var _ when ReferenceEquals(kind, GeneratorKind.CLI): - return new CILType(typeof(object)); case var _ when ReferenceEquals(kind, GeneratorKind.CSharp): - return CSharpSignatureType(ctx); + return new CILType(typeof(object)); default: throw new System.NotImplementedException(); } @@ -84,10 +83,8 @@ namespace CppSharp.Types case var _ when ReferenceEquals(kind, GeneratorKind.C): case var _ when ReferenceEquals(kind, GeneratorKind.CPlusPlus): case var _ when ReferenceEquals(kind, GeneratorKind.CLI): - ctx.Return.Write(ctx.Parameter.Name); - return; case var _ when ReferenceEquals(kind, GeneratorKind.CSharp): - CSharpMarshalToNative(ctx as CSharpMarshalContext); + ctx.Return.Write(ctx.Parameter.Name); return; default: throw new System.NotImplementedException(); @@ -106,10 +103,8 @@ namespace CppSharp.Types case var _ when ReferenceEquals(kind, GeneratorKind.C): case var _ when ReferenceEquals(kind, GeneratorKind.CPlusPlus): case var _ when ReferenceEquals(kind, GeneratorKind.CLI): - ctx.Return.Write(ctx.ReturnVarName); - return; case var _ when ReferenceEquals(kind, GeneratorKind.CSharp): - CSharpMarshalToManaged(ctx as CSharpMarshalContext); + ctx.Return.Write(ctx.ReturnVarName); return; default: throw new System.NotImplementedException(); @@ -118,21 +113,6 @@ namespace CppSharp.Types #region C# backend - public virtual Type CSharpSignatureType(TypePrinterContext ctx) - { - return new CILType(typeof(object)); - } - - public virtual void CSharpMarshalToNative(CSharpMarshalContext ctx) - { - ctx.Return.Write(ctx.Parameter.Name); - } - - public virtual void CSharpMarshalToManaged(CSharpMarshalContext ctx) - { - ctx.Return.Write(ctx.ReturnVarName); - } - /// /// Used to construct a new instance of the mapped type. /// diff --git a/tests/dotnet/CSharp/CSharp.Gen.cs b/tests/dotnet/CSharp/CSharp.Gen.cs index 38c2e5d6..362b8cdb 100644 --- a/tests/dotnet/CSharp/CSharp.Gen.cs +++ b/tests/dotnet/CSharp/CSharp.Gen.cs @@ -120,17 +120,17 @@ namespace CppSharp.Tests [TypeMap("boolean_t")] public class BooleanTypeMap : TypeMap { - public override Type CSharpSignatureType(TypePrinterContext ctx) + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { return new BuiltinType(PrimitiveType.Bool); } - public override void CSharpMarshalToNative(CSharpMarshalContext ctx) + public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind) { ctx.Return.Write(ctx.Parameter.Name); } - public override void CSharpMarshalToManaged(CSharpMarshalContext ctx) + public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind) { ctx.Return.Write(ctx.ReturnVarName); } @@ -144,12 +144,12 @@ namespace CppSharp.Tests return string.Empty; } - public override Type CSharpSignatureType(TypePrinterContext ctx) + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { return GetEnumType(ctx.Type); } - public override void CSharpMarshalToNative(CSharpMarshalContext ctx) + public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind) { if (ctx.Parameter.Type.Desugar().IsAddress()) ctx.Return.Write("new global::System.IntPtr(&{0})", ctx.Parameter.Name); @@ -157,7 +157,7 @@ namespace CppSharp.Tests ctx.Return.Write(ctx.Parameter.Name); } - public override void CSharpMarshalToManaged(CSharpMarshalContext ctx) + public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind) { if (ctx.ReturnType.Type.Desugar().IsAddress()) { @@ -196,17 +196,17 @@ namespace CppSharp.Tests return string.Empty; } - public override Type CSharpSignatureType(TypePrinterContext ctx) + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { return new TagType(flags ?? (flags = Context.ASTContext.FindEnum("Flags").First())); } - public override void CSharpMarshalToNative(CSharpMarshalContext ctx) + public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind) { ctx.Return.Write(ctx.Parameter.Name); } - public override void CSharpMarshalToManaged(CSharpMarshalContext ctx) + public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind) { ctx.Return.Write(ctx.ReturnVarName); } @@ -229,7 +229,7 @@ namespace CppSharp.Tests } } - public override Type CSharpSignatureType(TypePrinterContext ctx) + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { if (ctx.Kind == TypePrinterContextKind.Native) { @@ -249,7 +249,7 @@ namespace CppSharp.Tests ctx.GetTemplateParameterList()}>"); } - public override void CSharpMarshalToNative(CSharpMarshalContext ctx) + public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind) { // pointless, put just so that the generated code compiles var type = (TemplateSpecializationType)ctx.Parameter.Type.Desugar(); @@ -259,7 +259,7 @@ namespace CppSharp.Tests ctx.Return.Write("new {0}()", specialization.Visit(typePrinter)); } - public override void CSharpMarshalToManaged(CSharpMarshalContext ctx) + public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind) { ctx.Return.Write(ctx.ReturnVarName); } @@ -268,18 +268,18 @@ namespace CppSharp.Tests [TypeMap("TypeMappedWithOperator")] public class TypeMappedWithOperator : TypeMap { - public override Type CSharpSignatureType(TypePrinterContext ctx) + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { // doesn't matter, we just need it to compile return new BuiltinType(PrimitiveType.Int); } - public override void CSharpMarshalToNative(CSharpMarshalContext ctx) + public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind) { ctx.Return.Write(ctx.Parameter.Name); } - public override void CSharpMarshalToManaged(CSharpMarshalContext ctx) + public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind) { ctx.Return.Write(ctx.ReturnVarName); } @@ -288,7 +288,7 @@ namespace CppSharp.Tests [TypeMap("QString")] public class QString : TypeMap { - public override Type CSharpSignatureType(TypePrinterContext ctx) + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) { if (ctx.Kind == TypePrinterContextKind.Native) { @@ -299,13 +299,13 @@ namespace CppSharp.Tests return new CILType(typeof(string)); } - public override void CSharpMarshalToNative(CSharpMarshalContext ctx) + public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind) { ctx.Return.Write(ctx.Parameter.Type.Desugar().IsAddress() ? "global::System.IntPtr.Zero" : "\"test\""); } - public override void CSharpMarshalToManaged(CSharpMarshalContext ctx) + public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind) { ctx.Return.Write("\"test\""); } diff --git a/tests/dotnet/Common/Common.Gen.cs b/tests/dotnet/Common/Common.Gen.cs index 7ab6cbea..338f01b3 100644 --- a/tests/dotnet/Common/Common.Gen.cs +++ b/tests/dotnet/Common/Common.Gen.cs @@ -7,41 +7,47 @@ using CppSharp.Utils; namespace CppSharp.Tests { - [TypeMap("TypeMappedIndex", GeneratorKindID = GeneratorKind.CLI_ID)] - public class CLITypeMappedIndex : TypeMap + namespace CLI { - public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) + [TypeMap("TypeMappedIndex", GeneratorKindID = GeneratorKind.CLI_ID)] + public class TypeMappedIndex : TypeMap { - return new BuiltinType(PrimitiveType.UShort); - } - - public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind) - { - ctx.Return.Write(ctx.ReturnVarName); - } - - public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind) - { - ctx.Return.Write("::TypeMappedIndex()"); + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) + { + return new BuiltinType(PrimitiveType.UShort); + } + + public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind) + { + ctx.Return.Write(ctx.ReturnVarName); + } + + public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind) + { + ctx.Return.Write("::TypeMappedIndex()"); + } } } - [TypeMap("TypeMappedIndex", GeneratorKindID = GeneratorKind.CSharp_ID)] - public class TypeMappedIndex : TypeMap + namespace CSharp { - public override Type CSharpSignatureType(TypePrinterContext ctx) - { - return new BuiltinType(PrimitiveType.UShort); - } - - public override void CSharpMarshalToManaged(CSharpMarshalContext ctx) - { - ctx.Return.Write(ctx.ReturnVarName); - } - - public override void CSharpMarshalToNative(CSharpMarshalContext ctx) + [TypeMap("TypeMappedIndex", GeneratorKindID = GeneratorKind.CSharp_ID)] + public class TypeMappedIndex : TypeMap { - ctx.Return.Write("IntPtr.Zero"); + public override Type SignatureType(TypePrinterContext ctx, GeneratorKind kind) + { + return new BuiltinType(PrimitiveType.UShort); + } + + public override void MarshalToManaged(MarshalContext ctx, GeneratorKind kind) + { + ctx.Return.Write(ctx.ReturnVarName); + } + + public override void MarshalToNative(MarshalContext ctx, GeneratorKind kind) + { + ctx.Return.Write("IntPtr.Zero"); + } } }